第9章--C8051F41x單片機簡介new[137頁]課件_第1頁
第9章--C8051F41x單片機簡介new[137頁]課件_第2頁
第9章--C8051F41x單片機簡介new[137頁]課件_第3頁
第9章--C8051F41x單片機簡介new[137頁]課件_第4頁
第9章--C8051F41x單片機簡介new[137頁]課件_第5頁
已閱讀5頁,還剩132頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第9章 C8051F41x單片機簡介單片機技術及應用授課人:莊友誼第9章 C8051F41x單片機簡介9.1 C8051F41X概述9.3 C8051F41X可編程IO口 9.2 C8051F41X存儲器組織 9.4 C8051F41X中斷系統 9.5 C8051F41X內部定時器/計數器9.7 C8051F41X的串行口 9.6 可編程定時器/計數器陣列 9.8 模數轉換器ADC 9.9數模轉換器DAC 9.10 復位 9.11 電源管理方式 9.1 C8051F41x概述 C8051F41x單片機是C8051F單片機家族中的一款性價比較高的成員,是一種集成混合信號的片上系統單片機(SoC)

2、,具有與標準 MCS51兼容的高速CIP-51內核與指令集。完全兼容MCS-51內核的微控制器、除標準8051的數字外設部件外,還集成了數據采集和控制系統中常用的模擬外設、其它數字外設及功能部件。 真正能獨立工作的集成混合信號片上系統SOC(System on chip),CPU有效地管理模擬和數字外設,可以關閉單個或全部外設以節省功耗。FLASH存儲器具有在系統重新編程的能力,既可用作程序存儲器又可用作于非易失性數據存儲 。C8051F系列單片機內核采用與MCS-51兼容的CIP-51:指令共111條,在二進制碼和功能上與MCS-51 產品完全等價,包括操作碼、尋址方式和對PSW標志的影響。

3、標準8051中,除MUL和DIV以外所有指令都需要12或24個系統時鐘周期,最大系統時鐘頻率為12-24MHz。 CIP-51內核采用流水線結構,70%的指令執行時間為1或2個系統時鐘周期,沒有執行時間超過8個系統時鐘周期的指令。執行周期數122/433/5454/664/78指令數26505107521221芯片型號MIPS(峰值)Flash存儲器(KB)RAM(字節)校準的內部24.5MHz晶振時鐘乘法器SMBus/SPIUART定時器(16位)可編程定時器/計數器陣列I/O口12位ADCSmaTRClock(實時時鐘)兩個12位電流輸出DAC內部電壓基準溫度傳感器模擬比較器C410503

4、22368424C41150322368420C41250162368424C41350162368420C8051F41x的4款芯片C8051F410芯片示意圖 高速、流水線結構的8051兼容的微控制器核 達32KB的片內FLASH存儲器 2304字節片內RAM 4個通用的16位定時器 硬件實現的SMBus(系統管理總線)/ I2C、增強型UART和增強型SPI(串行外設接口)片內電壓比較器 真12位200 ksps的24通道ADC,帶模擬多路器 兩個12位電流輸出DAC 9.1.1 C8051F410系統內部結構循環冗余碼校驗硬件實時時鐘9.1.2 C8051F410系統引腳C8051F4

5、1x 的存貯器結構與MCS-51基本一樣(哈佛結構)物理結構上可分為:片內、 片外程序存儲器片內、 片外數據存儲器邏輯上可分為:程序存儲器、 內部數據存儲器、外部數據存儲器9.2 C8051F410存儲器組織 程序存儲器內部數據存儲器、SFR外部數據存儲器1、程序存貯器 CIP-51 有 64KB 的程序存儲器空間。C8051F410在這個程序存儲器空間中實現了 32KB的可在系統編程的 FLASH 存儲器,組織在一個連續的存儲塊內(0 x0000 0 x7DFF)。2、內部數據存貯器 CIP-51 的數據存儲器空間中有 256字節的內部 RAM,位于0 x00 0 xFF的地址空間。數據存儲

6、器中的低 128 字節用于通用寄存器和臨時存儲器。可以用直接或間接尋址方式訪問數據存儲器的低 128 字節。0 x00 0 x1F 為 4 個通用寄存器區,每個區有 8個 8 位寄存器。接下來的 16 字節為位尋址區,地址 0 x20 0 x2F,既可以按字節尋址,又可以作為 128 個位地址用位尋址方式訪問。 數據存儲器中的高 128字節只能用間接尋址訪問。該存儲區與特殊功能寄存器(SFR)占據相同的地址空間,但物理上與 SFR 空間是分開的。當尋址高于 0 x7F的地址時,指令所用的尋址方式決定了CPU是訪問數據存儲器的高128字節還是訪問 SFR。使用直接尋址方式的指令將訪問SFR空間,

7、間接尋址高于0 x7F地址的指令將訪問數據存儲器的高128字節。(1)通用寄存器數據存儲器的低 32 字節(地址 0 x00 0 x1F)可以作為 4 個通用寄存器組訪問。每個區有8 個 8 位寄存器,稱為 R0 R7。在某一時刻只能選擇一個寄存器區。程序狀態字中的 RS0(PSW.3)和 RS1(PSW.4)位用于選擇當前的寄存器區。RS1 RS0寄存器組片內RAM地址0 00組0 x00-0 x070 11組0 x08-0 x0F1 02組0 x10-0 x171 13組0 x18-0 x1F(2)位尋址區 可以位尋址的包括兩部分: 內部RAM中的0 x20-0 x2F單元; 部分SFR(

8、字節地址為8的倍數的)。MCS-51匯編語言允許用XX . B的形式替代位地址,XX為字節地址,B為尋址位在該字節中的位置。例如,指令: MOV C, 22 . 3 h 將 0 x13 中的布爾值(字節地址 0 x22中的位 3)傳送到進位標志。 CIP-51中的布爾處理器,能對位地址直接尋址,執行置“1”、清“0”、取反等操作。 (3)特殊功能寄存器SFR 地址以 0 x0或 0 x8 結尾的 SFR(例如 P0、TCON、IE 等)既可以按字節尋址也可以按位尋址,所有其它 SFR 只能按字節尋址。SFR 空間中未使用的地址保留為將來使用,訪問這些地址會產生不確定的結果,應予避免。1、c80

9、51F410.h #ifndef C8051F410_H #define C8051F410_H / Byte Registers sfr P0 = 0 x80; / Port 0 latch sfr SP = 0 x81; / Stack pointer#endif / #define C8051F410_H 從0 x80到0 xFF的直接尋址存儲器空間為特殊功能寄存器(SFR)。SFR提供對CIP-51的資源和外設的控制及CIP-51與這些資源和外設之間的數據交換。 CIP-51具有標準 8051中的全部SFR,還增加了一些用于配置和訪問專有子系統的SFR。這就允許在保證與MCS-51TM

10、指令集兼容的前提下增加新的功能。任何時刻用直接尋址方式訪問 0 x80 0 xFF的存儲器空間將訪問特殊功能寄存器(SFR)。F8SPI0CNPCA0LPCA0HPCA0CPL0PCA0CPH0PCA0CPL4PCA0CPH4VDM0CNF0BP0MDINP1MDINP2MDINIDA1LIDA1HEIP1EIP2E8ADC0CNPCA0CPL1PCA0CPH1PCA0CPL2PCA0CPH2PCA0CPL3PCA0CPH3RSTSRCE0ACCXBR0XBR1PFE0CNIT01CFEIE1EIE2D8PCA0CNPCA0MDPCA0CPM0PCA0CPM1PCA0CPM2PCA0CPM3P

11、CA0CPM4CRC0FLIPD0PSWREF0CNPCA0CPL5PCA0CPH5P0SKIPP1SKIPP2SKIPP0MATC8TMR2CNREG0CNTMR2RLLTMR2RLHTMR2LTMR2HPCA0CPM5P1MATC0SMB0CNSMB0CFSMB0DATADC0GTLADC0GTHADC0LTLADC0LTHP0MASKB9IPIDA0CNADC0TKADC0MXADC0CFADC0LADC0HP1MASKB0P0ODENOSCXCNOSCICNOSCICLIDA1CNFLSCLFLKEYA8IECLKSELEMI0CNCLKMULTRC0ADRRTC0DATRTC0KEY

12、ONESHOTA0P2SPI0CFGSPI0CKRSPI0DATP0MDOUTP1MDOUTP2MDOUT98SCON0SBUF0CPT1CNCPT0CNCPT1MDCPT0MDCPT1MXCPT0MX90P1TMR3CNTMR3RLLTMR3RLHTMR3LTMR3HIDA0LIDA0H88TCONTMODTL0TL1TH0TH1CKCONPSCTL80P0SPDPLDPHCRC0CNCRC0INCRC0DATPCON0(8)1(9)2(A)3(B)4(C)5(D)6(E)7(F)特殊功能寄存器(SFR) 3、片內XRAM MCS-51內部只有128或256字節的數據存儲器,不夠時可以在芯片

13、外部擴展64KB的外部數據存儲器(XRAM) 。 C8051F410在芯片內部有屬于外部數據存儲器空間的2048字節RAM 。 外部存儲器空間用MOVX指令和DPTR 、R0或R1用間接尋址方式訪問。9.3 C8051F41x可編程的IO口9.3.1 IO口輸入/輸出:C8051F410單片機共有24個I/O端口可以使用,即P0.0 P2.7,這些I/O端口可以:用作通用I/O,用作模擬輸入/輸出。被分配給內部數字資源。設計者完全控制數字功能的引腳分配,只受物理I/O引腳數的限制。24 個 I/O P0 P1 P2通用I/O(GPIO)模擬輸入/輸出內部數字資源配置定義端口(P0、P1、P2)

14、既可以按位尋址也可以按字節尋址。所有引腳都耐5V電壓,都可以被配置為漏極開路或推挽輸出方式和弱上拉。缺省狀態為漏極開路。1、配置端口引腳的輸出方式(1)推挽方式:向端口數據寄存器中的相應位:寫邏輯0將使端口引腳被驅動到GND,寫邏輯1將使端口引腳被驅動到VDD。(2)漏極開路方式:向端口數據寄存器中的相應位:寫邏輯0將使端口引腳被驅動到GND,寫邏輯1將使端口引腳處于高阻狀態。(3)弱上拉 每個端口引腳都有一個內部弱上拉部件,在引腳與VDD之間提供阻性連接(約 100 k) ,在缺省情況下該上拉器件被使能。一、端口單元的工作原理:110010011推挽(PUSH-PULL)輸出方式VDDDGN

15、DPnMDOUTPnPnMDIN=11000101高阻漏極開路(Open-Drain)輸出和弱上拉DGND需上拉電阻100012、數字輸入0通過設置輸出方式為漏極開路并向端口數據寄存器中的相應位寫1將端口引腳配置為數字輸入。1013、模擬輸入1二、端口相關寄存器:1、端口:P0P22、端口輸出方式寄存器:3、端口輸入方式寄存器:C8051F410單片機的I/O端口在使用前都要進行輸入/輸出的設置。設置輸入方式:模擬輸入還是數字輸入。設置輸出方式:漏極開路(open-drain)輸出還是推挽輸出(push-pull)。注意:9.3.2 優先權交叉開關譯碼器24 個 I/O P0 P1 P2通用I

16、/O(GPIO)模擬輸入/輸出內部數字資源配置定義C8051F410內有大量的數字資源需要通過3個低端I/O端口P0P2才能使用。通過使用優先權交叉開關譯碼實現的。(XBRn、 XBARE、PnSKIP)( PnMDIN、PnMDOUT )通過2個特殊功能寄存器XBR0、XBR1實現,對應使能位置1時,交叉開關將端口引腳分配給外設。引腳分配原則:端口引腳的分配順序是從P0.0開始,可以一直分配到P2.7。為數字外設分配端口引腳的優先權順序如上圖,UART0具有最高優先權,而T1具有最低優先權。1、XBR0:端口 I/O交叉開關寄存器 0 2、XBR1:端口 I/O交叉開關寄存器 1 沒有引腳被

17、跳過的交叉開關優先權譯碼表從優先權最高的 UART0開始。當一個數字資源被選擇時,尚未分配的端口引腳中的最低位被分配給該資源(UART0除外,它總是被分配到引腳 P0.4和P0.5)。如果一個端口引腳已經被分配,則交叉開關在為下一個被選擇的資源分配引腳時將跳過該引腳。引腳被跳過的交叉開關優先權譯碼表如果一個端口引腳被一個外設使用而不經過交叉開關,則該引腳在 PnSKIP 寄存器中的對應位應被置 1。3、端口 0跳過寄存器例1:按如下要求配置交叉開關:系統使用UART0、SMBus(共 2 個引腳)。將P0.0、P0.1 和P0.2 配置為模擬輸入,以便用ADC1測量加在這些引腳上的電壓。 Vo

18、id PortInit(void) P0MDIN = 0 xF8; P0SKIP = 0 x07; XBR0 = 0 x05; XBR1 = 0 x40;例2:通過P2.1驅動一個LED:P2MDIN |= 0 x02; /設置P2.1為數字輸入P2MDOUT |= 0 x02; /設置P2.1為推挽輸出P2SKIP |= 0 x02; /CrossBar跳過P2.1例3:P2.1接一外部的模擬信號,對其進行AD轉換:P2MDIN &= 0 x02; /設置P2.1為模擬輸入/這時P2MDOUT不用設置,因為用作模擬輸入的端口,其對應位在PnMDOUT中的設置會被忽略P2SKIP |= 0 x

19、02; /CrossBar跳過P2.1例4:設置P2.1為PCA的CEX0的輸出:P2MDIN |= 0 x02; /P2.1為數字輸入P2MDOUT |= 0 x02; /P2.1為推挽輸出P0SKIP = 0 xFF; /跳過P0的所以端口P1SKIP = 0 xFF; /跳過P1的所以端口P2SKIP |= 0 x01; /跳過P2.0端口XBR1 &= 0 x07;XBR1 |= 0 x01; /CEX0輸出到P2.1XBR0 |= 0 x40; /使能CrossBar例5:P0.0用作模擬信號輸入,進而進行AD轉換,P0.1用來驅動一個led,P0.4和P0.5用作UART,PCA的

20、CEX0輸出到P0.7。P0SKIP = 0 x4F; XBR0 |= 0 x01;XBR1 |= 0 x41;端口 I/O初始化:端口I/O初始化包括以下步驟: 第一步:用端口輸入方式寄存器(PnMDIN)選擇所有端口引腳的輸入方式(模擬或非模擬)。 第二步:用端口輸出方式寄存器(PnMDOUT)選擇所有端口引腳的輸出方式(漏極開路或推挽)。 第三步:用端口跳過寄存器(PnSKIP)選擇應被交叉開關跳過的那些引腳。 第四步:用XBRn寄存器將引腳分配給要使用的外設。 第五步:使能交叉開關(XBARE = 1)。 未被交叉開關分配的端口引腳和未被模擬外設使用的端口引腳都可以作為通用I/O。通過

21、對應的端口數據寄存器訪問端口 P0-P2,這些寄存器既可以按位尋址也可以按字節尋址。 向端口寫入時,數據被鎖存到端口數據寄存器中,以保持引腳上的輸出數據值不變。 讀端口數據寄存器(或端口位)將總是返回引腳本身的邏輯狀態,而與XBRn的設置值無關,即使在引腳被交叉開關分配給其它信號時,端口寄存器總是讀其對應的端口I/O引腳。sbit SW2 = P14;sbit LED1 = P21;if (SW2 = 0) LED1 = 1; 9.4 C8051F41x 中斷系統9.4.1 概述: C8051F410 擴展了MCS-51的中斷系統,包含 17中斷源(標準8051 有5 中斷源),每個中斷源有兩

22、個優先級。 MCS-51中斷系統結構:各單路開關總開關IP寄存器實行兩級控制SCON寄存器 EA總允許位中斷源標志位查詢機構高優先級低優先級中斷入口中斷源標志位中斷入口中斷源標志位IE0EX0TF0IE1TF1TIESET1EX1ET0RI+源允許位優先級外部中斷 請求0外部中斷 請求1定時器/計數器0定時器/計數器1串行口TRINT0INT1RXDTXDT1T0中斷標志位IE寄存器TCON寄存器 C8051F41x包含一個擴展的中斷系統,支持17個中斷源,每個中斷源有兩個優先級。每個中斷源可以在一個SFR中有一個或多個中斷標志。當一個外設或外部源滿足有效的中斷條件時,相應的中斷標志置為邏輯

23、1。 如果一個中斷源被允許,則在中斷標志被置位時將產生中斷請求。一旦當前指令執行束,CPU產生一個LCALL到預定地址,開始執行中斷服務程序(ISR)。 每個 ISR 必須以 RETI指令結束,使程序回到中斷前執行的那條指令的下一條指令。 如果中斷未被允許,中斷標志將被硬件忽略,程序繼續正常執行。中斷標志置1與否不受中斷允許/禁止狀態的影響。 某些中斷標志在CPU進入ISR時被自動清除,但大多數中斷標志不是由硬件清除的,須在ISR返回前用軟件清除。 如果一個中斷標志在CPU執行完中斷返回指令后仍保持置位狀態,則會立即產生一個新的中斷請求,CPU將在執行完下一條指令后再次進入ISR。 MCU中斷

24、源和中斷向量 MCU支持17個中斷源。軟件可以通過將任何一個中斷標志設置為邏輯1來模擬一個中斷。如果中斷使能被允許,系統將產生一個中斷請求,CPU將轉向與該中斷標志對應的ISR地址。C8051F中斷系統 中斷源中斷允許寄存器中斷優先級寄存器高優先級EX0ET0低優先級 高 低IE0IE1TF0INT0INT1TF1TIRITF2EXF2EX1ET1ESET2EAPX0PT0PX1PT1PSPX2IE寄存器IP寄存器EIE1寄存器EIE2寄存器EIP1EIP2EXVLD0000同級查詢順序中斷控制(1)中斷使能控制 采用兩級中斷使能控制C8051F對所有的中斷源的開放和屏蔽(總控制位EA) 每個

25、中斷源都有單獨的二級中斷允許控制位 受中斷允許寄存器IE、EIE1、EIE2控制。(2)中斷優先級別的設定 每個中斷源都可以設置為高優先級和低優先級,由中斷優先級寄存器IP、EIP1、EIP2統一管理。相同優先級的硬件查詢順序 中斷源 同級時的優先順序 外部中斷0 定時器0中斷 外部中斷1 定時器1中斷 串行口0中斷 定時器2中斷 . . . 穩壓器電壓降落 端口匹配高低9.4.2 中斷寄存器說明IE:中斷允許寄存器 EIE1:擴展中斷允許1 EIE2:擴展中斷允許2 IP:中斷優先級寄存器 EIP1:擴展中斷優先級1 EIP2:擴展中斷優先級2 1、IE (中斷允許) SPI T22、IP

26、(中斷優先級) SPI T23、EIE1(中斷擴展允許) T3 比較1 比較0 可編程計數器 AD0 窗口 實時時鐘 系統總線4、EIP1(擴展中斷優先級1) T3 比較1 比較0 可編程計數器 AD0 窗口 實時時鐘 系統總線5、EIE2(中斷擴展允許)端口匹配 穩壓器電壓降落6、EIP2(擴展中斷優先級1)端口匹配 穩壓器電壓降落中斷響應過程: 硬件動作1為實現嵌套,先置位相應優先級狀態觸發器(不可尋址,該觸發器指出CPU開始處理的中斷優先級別)2執行一條硬件子程序調用指令(LCALL),轉到相應ISR入口。3清除中斷請求標志(有些中斷源如RI、TI不能被自動清除,需要在中斷服務程序中用軟

27、件清除)。4PC入棧,將ISR的入口地址送程序計數器PC。9.4.3 外部中斷 兩個外部中斷源/INT0和/INT1可被配置為低電平有效或高電平有效,邊沿觸發或電平觸發。IT01CF:INT0/INT1配置寄存器注意:該引腳分配與交叉開關無關;/INT0 將監視分配給它的端口引腳,但不影響被交叉開關分配了相同引腳的外設。()邊沿觸發方式 外部中斷標志觸發器鎖存外部中斷輸入線上的負跳變,即使暫時得不到CPU響應,中斷請求標志也不會丟失。 CPU在轉向 ISR 時用硬件自動清除相應的中斷標志。 ()電平觸發方式 外部中斷輸入信號必須有效至CPU響應該中斷為止,同時在中斷服務程序返回之前必須清除中斷

28、請求信號,否則CPU在中斷返回后又會再次響應中斷。 在輸入有效期間中斷標志將保持在邏輯1狀態;在輸入無效期間該標志保持邏輯 0 狀態。外部中斷/INT0或/INT1觸發方式外部中斷觸發方式的選擇 可被配置為低電平有效或高電平有效,邊沿觸發或電平觸發。IT01CF寄存器中的IN0PL(/INT0極性)和IN1PL(/INT1極性)位用于選擇高電平有效還是低電平有效;TCON中的IT0和IT1用于選擇電平或邊沿觸發。下面的表列出了可能的配置組合。 #include #define SYSCLK 24500000 / Clock speed in Hzsbit SW1 = P00; / Push-b

29、utton switch on boardsbit SW2 = P01; / Push-button switch on boardsbit LED1 = P21; / Green LEDsbit LED2 = P23; / Green LEDvoid main (void)PCA0MD &= 0 x40; / Disable Watchdog timerOscillator_Init(); / Initialize the system clockPort_Init (); / Initialize crossbar and GPIOExt_Interrupt_Init(); / Initi

30、alize External InterruptsEA = 1;while(1); / Infinite while loop waiting for an interrupt from /INT0 or /INT1void Oscillator_Init (void)OSCICN = 0 x87; / Set internal oscillator to run at its maximum frequency/ P0.0 - digital open-drain /INT0 / P0.1 - digital open-drain /INT1/ P2.1 - digital push-pul

31、l LED1 / P2.3 - digital push-pull LED2void Port_Init (void)XBR1 = 0 x40; / Enable crossbar and weak pullupsP2MDOUT = 0 x0A; / LED1 and LED2 are push-pull outputsvoid Ext_Interrupt_Init (void)TCON = 0 x05; / /INT 0 and /INT 1 are edge triggeredIT01CF = 0 x10; / /INT0 active low; on P0.0; /INT1 active

32、 low; P0.1EX0 = 1; / Enable /INT0 interruptsEX1 = 1; / Enable /INT1 interruptsvoid INT0_ISR (void) interrupt 0LED1 = !LED1;void INT1_ISR (void) interrupt 2LED2 = !LED2;復位后單片機引腳處于數字輸入模式9.5 C8051F41x內部定時器/計數器9.5.1 概述 C8051F41x內部有4個16位定時器/計數器: T0和T1工作方式T2工作方式T3工作方式13位定時器/計數器16位自動重裝載定時器/計數器16位自動重裝載定時器/計

33、數器16位定時器/計數器8位自動重裝載的定時器/計數器兩個8位自動重裝載定時器/計數器兩個8位自動重裝載定時器/計數器兩個8位定時器/計數器(僅限于定時器/計數器0) T0和T1與標準8051幾乎完全相同,除了其時鐘源可選擇配置外,使用上其它均相同。 T2和T3均可作為一個16位或兩個8位自動重裝載定時器/計數器。可用于ADC、SMBus、通用定時器使用。T2和T3還具有smaRTClock捕捉方式,可用于測量smaRTClock時鐘(相對于另一個振蕩器)。定時器的一般結構和工作原理 方式選擇計數器定時器啟/停控制執行機構減1計數:如Intel 8253加1計數:如C8051F410 的T0T

34、2溢出標志查詢中斷定時器的時鐘內部振蕩頻率=24.5MHz,系統時鐘=24.5MHz/振蕩器分頻T0時鐘=系統時鐘/定時器分頻內部振蕩24.5MHzOSCICN:IFCN振蕩器分頻定時器分頻CKCON :T0M、SCAT0時鐘系統時鐘CKCON:時鐘控制寄存器9.5.2 定時器/計數器T0、T1TMOD:定時器方式寄存器TCON:定時器控制寄存器 1、方式013位計數器/定時器控制啟停引腳TR0=1GATE0=0時:GATE0=1時:啟動計數 TR0=1且INT0=1啟動計數TH0寄存器保持13位計數器/定時器的8個MSB,TL0在TL0.4-TL0.0位置保持5個LSB。TL0的高3位(TL

35、0.7-TL0.5)是不確定的,在讀計數值時應屏蔽掉或忽略這3位。作為13位定時器寄存器,計到0 x1FFF(全 1)后再計一次將發生溢出,使計數值回到0 x0000,此時定時器溢出標志TF0被置位并產生一個中斷(如果該中斷被允許)。 C/T0位選擇計數器/定時器的時鐘源。當C/T0被設置為邏輯1時,出現在T0輸入引腳上的負跳變使定時器寄存器加1。清除C/T0位將選擇由T0M位定義的時鐘作為定時器的輸入。當T0M=1時,定時器0的時鐘為系統時鐘;當T0M=0時,定時器0的時鐘源由CKCON中的時鐘分頻位定義。 IN0PL位TCON中的IT0和IT1用于選擇電平或邊沿觸發2、方式2 具有自動重裝

36、計數初值能力的8位計數器/定時器。TL0保持計數值,TH0保持重載值。當TL0中的計數值發生溢出(從全1到0 x00)時,定時器溢出標志TF0被置位,TH0中的重載值被重新裝入到TL0。如中斷被允許,在TF0被置位時將產生一個中斷。TH0中的重載值保持不變。3、方式0、3:也與MCS-51一樣T0和T1的應用舉例給定時器賦初值的語句可以采用如下方法: TH0=(65536-2000)/256; TL0=(65536-2000)%256;或 TH0=-2000/256; TL0=-2000%256;F41x_Timer0_8bitReloadTimer.c#include / SFR decla

37、rations#define SYSCLK 24500000/8 #define TIMER_PRESCALER 48 #define TIMER_TICKS_PER_MS SYSCLK/TIMER_PRESCALER/1000#define AUX1 TIMER_TICKS_PER_MS#define AUX2 -AUX1#define LED_TOGGLE_RATE 100 / LED toggle rate in milliseconds#define TIMER0_RELOAD_HIGH AUX2 / Reload value for Timer0 high bytesbit LED

38、= P21; / LEDvoid main (void)PCA0MD &= 0 x40; OSCICN |= 0 x04; / Force Internal Osc. 1:8 prescalerwhile (OSCICN & 0 x40 ) = 0); / Wait until stableTimer0_Init (); / Initialize the Timer0Port_Init (); / Init PortsEA = 1; / Enable global interruptswhile (1); / Loop foreverF41x_Timer0_8bitReloadTimer.cv

39、oid Port_Init (void)XBR1 = 0 x40; / Enable crossbarP2MDOUT = 0 x02; / Enable LEDvoid Timer0_Init(void)TH0 = TIMER0_RELOAD_HIGH; / Init Timer0 High registerTL0 = TH0; / Set the intial Timer0 valueTMOD = 0 x02; / Timer0 in 8-bit reload modeCKCON = 0 x02; / Timer0 uses a 1:48 prescalerET0=1; / Timer0 i

40、nterrupt enabledTCON = 0 x10; / Timer0 ONvoid Timer0_ISR (void) interrupt 1 /interrupt aproximately one time every 1msecstatic int counter = 0;if(counter+) = LED_TOGGLE_RATE)LED = LED; / Toggle the LEDcounter = 0;使用查詢的方法重新編寫F41x_Timer0_8bitReloadTimer.cfor(; ;) TH1=-50000/256; /T1初值 TL1=-50000%256;

41、Do while(!TF0); /查詢等待TF0置位, TF0=0; if (counter+) = LED_TOGGLE_RATE) LED = LED; / Toggle the LED counter = 0; 定時器2(3)是一個16位的計數器/定時器,由兩個8位的寄存器組成:TMR2L和TMR2H( 或TMR3L和TMR3H )(類似與TL0,TH0)。定時器2 (3)可以工作在16位自動重裝載方式、8位自動重裝載方式(兩個8位定時器),由T2(3)控制寄存器TMR2CN( 或TMR3CN )設置。時鐘源可以是系統時鐘、系統時鐘/12或外部振蕩源時鐘/8,與T0、T1一樣,由時鐘控制

42、寄存器CKCON設置。9.5.3 定時器/計數器T2、T3CKCON:時鐘控制寄存器TMR2CN:定時器2控制寄存器當T2SPLIT位(或T3SPLIT )被設置為邏輯0時,定時器2(3)工作在自動重裝載的16位定時器方式。當16位定時器寄存器發生溢出(從0 xFFFF到0 x0000)時,定時器2(3)重載寄存器(TMR2(3)RLH和TMR2(3)RLL)中的16位計數初值被自動裝入到T2寄存器,并將T2高字節溢出標志TF2H置1。如果定時器2(3)中斷被允許,每次溢出都將產生中斷。1、16位自動重裝載方式F41x_Timer2_16bitReloadTimer.c#include #de

43、fine SYSCLK 24500000/8 #define TIMER_PRESCALER 12 #define LED_TOGGLE_RATE 50 #define TIMER_TICKS_PER_MS SYSCLK/TIMER_PRESCALER/1000#define AUX1 TIMER_TICKS_PER_MS*LED_TOGGLE_RATE#define AUX2 -AUX1#define TIMER2_RELOAD AUX2 / Reload value for Timer2sbit LED = P21; / LED=1 means ONsfr16 TMR2RL = 0 xCA

44、; / Timer2 Reload Registersfr16 TMR2 = 0 xCC; / Timer2 Registervoid main (void)PCA0MD &= 0 x40; / Clear watchdog timer enableOSCICN |= 0 x04; / Force Internal Osc. 1:8 prescalerwhile (OSCICN & 0 x40 ) = 0); / Wait until stableTimer2_Init (); / Initialize the Timer2Port_Init (); / Init PortsEA = 1; /

45、 Enable global interruptswhile (1); / Loop foreverF41x_Timer2_16bitReloadTimer.cvoid Port_Init (void)XBR1 = 0 x40; / Enable crossbarP2MDOUT = 0 x02; / Set LED to push-pullvoid Timer2_Init(void)CKCON &= 0 x60; / Timer2 uses SYSCLK/12TMR2CN &= 0 x01;TMR2RL = TIMER2_RELOAD; / Reload value to be used in

46、 Timer2TMR2 = TMR2RL; / Init the Timer2 registerTMR2CN = 0 x04; / Enable Timer2 in auto-reload modeET2 = 1; / Timer2 interrupt enabledvoid Timer2_ISR (void) interrupt 5LED = LED; / Toggle the LEDTF2H = 0; / Reset Interrupt2、8位自動重裝載方式 當T2SPLIT位(或T3SPLIT )被置1時,T2(3)工作在雙8位定時器方式(TMR2H和TMR2L或TMR3H和TMR3L

47、)。這兩個8位定時器/計數器都工作在自動重裝載方式 。 每個8位定時器/計數器都可以被配置為使用SYSCLK、SYSCLK/12或外部時鐘/8作為其時鐘源。T2(3)時鐘選擇位T2MH和T2ML(或T3MH和T3ML )選擇SYSCLK或由T2(3)外部時鐘選擇位(TMR2CN中的T2XCLK或TMR3CN中的T3XCLK )定義的時鐘源。T2MH/T2MLT2XCLKTMR2H/TMR時鐘源00SYSCLK/1201外部時鐘/81SYSCLKT2的時鐘源選擇當TMR2H發生溢出時(從0 xFF到0 x00),TF2H被置1;當TMR2L發生溢出時(從0 xFF到0 x00),TF2L被置1。

48、如果T2中斷被允許,則每次TMR2H溢出時都將產生一個中斷。如果T2中斷被允許并且TF2LEN位(TMR2CN.5)被置1,則每當TMR2L或TMR2H發生溢出時將產生一個中斷。在TF2LEN位被置1的情況下,軟件應檢查TF2H和TF2L標志,以確定中斷的來源。TF2H和TF2L標志不能被硬件自動清除,必須通過軟件清除。 T3也一樣。3、外部smaRTClock捕捉方式 定時器每8個外部時鐘周期或每8個smaRTClock時鐘周期捕捉一次,捕捉外部時鐘還是smaRTClock時鐘取決于T2RCLK的設置。當捕捉事件發生時,T2的內容(TMR2H:TMR2L)被裝入T2重裝載寄存器(TMR2RL

49、H:TMR2RLL),TF2H標志被置位。通過計算兩個連續的定時器捕捉值的差值,可以確定外部時鐘或smaRTClock時鐘的周期(相對于T2時鐘)。為獲得精確的測量值,T2的時鐘頻率應遠大于捕捉時鐘的頻率。當使用捕捉方式時,T2應被配置為16位自動重裝載方式。9.6 可編程定時器/計數器陣列(PCA) 8051F41x1個內部可編程定時器/計數器陣列(Programmable Counter/Timer Array,PCA)。 PCA由一個專用的16位定時器/計數器和6個16位捕捉/比較模塊組成。 每個捕捉/比較模塊有自己的I/O口線(CEXn),可通過交叉開關連到端口。 定時器/計數器由一個

50、可編程的時基信號驅動,時基信號可以在7個時鐘源中選擇:系統時鐘、系統時鐘/4、系統時鐘/12、外部時鐘/8、smaRTClock時鐘/8、定時器/計數器T0溢出或ECI輸入引腳上的外部時鐘信號。 每個捕捉/比較模塊都有6種工作方式:邊沿觸發捕捉、軟件定時器、高速輸出、頻率輸出、8位PWM和16位PWM。每個捕捉/比較模塊的工作方式都可以被獨立配置。 9.6.1 PCA定時器/計數器 16位的PCA定時器/計數器由兩個8位的SFR組成:PCA0L和PCA0H 讀PCA0H或PCA0L不影響計數器工作。 當定時器/計數器溢出時,PCA0MD中的計數器溢出標志(CF)被置為1,并產生一個中斷請求(若

51、CF中斷被允許)。CIDLWDTEWDLCKCPS2CPS1CPS0ECFPCA方式寄存器PCA0MD( 地址:0 xD9)CIDL為PCA定時器/計數器等待控制,用于設置CPU在空閑方式下PCA工作方式。0表示PCA繼續工作,1表示PCA停止工作。WDTE為看門狗定時器使能位,0表示禁止,1表示允許。WSLCK為看門狗定時器鎖定位,0表示未鎖定,1表示鎖定。ECF為PCA定時器/計數器溢出中斷允許位,0表示禁止,1表示允許。CPS2CPS0為PCA定時器/計數器時鐘選擇位CPS2CPS1CPS0時鐘源000系統時鐘/12001系統時鐘/4010定時器/計數器T0溢出011ECI負跳變(最大速

52、率=系統時鐘頻率/4)100系統時鐘101外部時鐘/8110smaRTClock/8111保留9.6.2 捕捉/比較模塊 每個捕捉/比較模塊都可被配置為獨立工作,有6種工作方式:邊沿觸發捕捉、軟件定時器、高速輸出、頻率輸出、8位脈寬調制器和16位脈寬調制器。PCA0中斷配置(1)邊沿觸發的捕捉方式 在該方式,CEXn引腳上出現的電平跳(低電平到高電平(正沿)、高電平到低電平(負沿)或任何跳變(正沿或負沿)變導致PCA捕捉PCA定時器/計數器的值并將其裝入對應模塊的16位捕捉/比較寄存器(PCA0CPLn和PCA0CPHn)。當捕捉發生時,PCA0CN中的捕捉/比較標志(CCFn)被置為1并產生

53、一個中斷請求(若CCF中斷被允許)。 CEXn輸入信號必須在高電平或低電平期間至少保持兩個系統時鐘周期,以保證能夠被硬件識別(2)軟件定時器方式 在該方式,PCA將定時器/計數器的計數值與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)進行比較。當發生匹配時,PCA0CN中的捕捉/比較標志(CCFn)被置為1并產生一個中斷請求(如果CCF中斷被允許)。(3)高速輸出方式 在高速輸出方式,每當PCA定時器/計數器與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)發生匹配時,模塊的CEXn引腳上的邏輯電平將發生變化。(4)頻率輸出方式 頻率輸出方式可在CEXn引

54、腳產生可編程頻率的方波。捕捉/比較模塊的高字節保持輸出電平改變前要計的PCA時鐘數。所產生的方波的頻率為:(5)8位脈寬調制器方式 PWM輸出的頻率取決于PCA定時器/計數器的時基。使用模塊的捕捉/比較寄存器PCA0CPLn改變PWM輸出信號的占空比。當PCA定時器/計數器的低字節(PCA0L)與PCA0CPLn中的值相等時,CEXn引腳上的輸出被置1;當PCA0L中的計數值溢出時,CEXn輸出被復位。當定時器/計數器的低字節PCA0L溢出時(從0 xFF到0 x00),保存在PCA0CPHn中的值被自動裝入PCA0CPLn,不需軟件干預。 (6)16位脈寬調制器方式 在該方式下,16位捕捉/

55、比較模塊定義PWM信號低電平時間的PCA時鐘數。當PCA定時器/計數器與模塊的值匹配時,CEXn的輸出被置為高電平;當計數器溢出時,CEXn輸出被置為低電平。9.6.3 看門狗定時器方式 通過PCA的模塊5可以實現可編程看門狗定時器(WDT)功能。如果兩次對WDT更新寄存器(PCA0CPH5)的寫操作相隔的時間超過規定的極限,WDT將產生一次復位。與8051的串行口基本相同不同點: (1)寄存器差別,名稱變化,SBUF0,SCON0,帶后綴0; (2)只實現了8051的方式1和方式3; (3)有增強的波特率發生器,有多個時鐘源可用于產生標準波特率; (4)接收數據緩沖機制。允許UART0在軟件

56、尚未讀取前一個字節的情況下開始接收第二個輸入的數據字節。1、C8051F410串行口的特點:9.7 C8051F41x的串行口9.7.1 通用串行口UART02、SCON0寄存器沒有8051中的方式0(移位寄存器方式)和方式2(波特率Fosc/64或32)(1)8 位UART 每個數據字節共使用10位:一個起始位、8個數據位(LSB 在先)和一個停止位。當軟件向SBUF0寫入一個字節時開始數據發送。在發送結束時發送中斷標志TI0被置1。在接收允許位REN0被置1后,數據接收可以在任何時刻開始。收到停止位后,如果滿足下述條件則數據字節將被裝入到接收寄存器SBUF0。 (2)9 位 UART 每個

57、數據字節共使用11位:一個起始位、8個數據位(LSB在先)、一個可編程的第九位和一個停止位。 當執行一條向SBUF0 寄存器寫一個數據字節的指令時開始數據發送。在發送結束時(停止位開始)發送中斷標志TI0被置1。 在接收允許位 REN0 被置 1 后,數據接收可以在任何時刻開始。收到停止位后如果滿足下述條件則數據字節將被裝入到接收寄存器 SBUF0。 如果中斷被允許,在 TI0 或RI0 置位時將產生中斷。3、異步串行通信口的原理 兩個特殊功能寄存器:串行控制寄存器SCON0和串行數據緩沖器SBUF0。 用同一個SBUF0 地址可以訪問發送寄存器和接收寄存器。寫SBUF0時自動訪問發送寄存器;

58、讀SBUF0時自動訪問接收寄存器。 如果 UART0 中斷被允許,則每次發送完成TI0 位被置1或接收到數據字節RI0位被置1時將產生一個中斷。 當 CPU轉向中斷服務程序時硬件不清除UART0 中斷標志。中斷標志必須用軟件清除,這就允許軟件查詢 UART0 中斷。4、C8051F410串行口的特點增強的波特率發生器UART0波特率由定時器1工作在8位自動重裝載方式產生。定時器1應被配置為方式2,即8位自動重裝方式。定時器1的重載值應設置為使其溢出頻率為所期望的UART波特率頻率的2倍。注意定時器1的時鐘可以在6個時鐘源中選擇UART0的波特率計算公式:波特率使用內部振蕩器時的波特率內部振蕩2

59、4.5MHzOSCICN:IFCN振蕩器分頻定時器分頻CKCON :T1M、SCAT1時鐘系統時鐘T1定時溢出溢出T1:方式2波特率2T1時鐘CKCON:時鐘控制寄存器9.7.2 增強型串行口(SPI0) C8051F410增強型串行口(SPI0)提供了訪問一個全雙工同步串行總線的能力。SPI0可以作為主器件或從器件工作,可以使用3線或4線方式,并可在同一總線上支持多個主器件和從器件。 9.7.3 SMBus接口 SMBus接口是一個雙線的雙向串行總線。SMBus完全符合系統管理總線規范2.0版,與I2C串行總線兼容 。9.8 模數轉換器ADC9.8.1 12位ADC結構 C8051F410的

60、ADC0子系統集成了一個27通道的模擬多路選擇器(AMUX0)和一個200ksps的12位逐次逼近寄存器(SAR)型ADC,ADC中集成了跟蹤保持電路、可編程窗口檢測器和硬件累加器 。9.8.2 ADC工作方式在一個典型系統中,用下面的步驟來配置ADC0: 選擇轉換啟動源; 選擇正常方式或突發方式; 如果使用突發方式,選擇ADC0空閑電源狀態并設置上電時間; 選擇跟蹤方式,注意,預跟蹤方式只能用于正常轉換方式; 計算需要的建立時間,并用AD0TK位設置轉換啟動后的跟蹤時間; 選擇重復次數; 選擇輸出字對齊方式(右對齊或左對齊); 使能或禁止轉換結束及窗口比較中斷。1轉換啟動方式 有4種A/D轉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論