《單片機(jī)原理及應(yīng)用》課件-第8章 定時器_第1頁
《單片機(jī)原理及應(yīng)用》課件-第8章 定時器_第2頁
《單片機(jī)原理及應(yīng)用》課件-第8章 定時器_第3頁
《單片機(jī)原理及應(yīng)用》課件-第8章 定時器_第4頁
《單片機(jī)原理及應(yīng)用》課件-第8章 定時器_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

單片機(jī)原理及應(yīng)用(8)-11/18內(nèi)容提綱一STC8A8K64S4A12單片機(jī)的定時/計數(shù)器結(jié)構(gòu)二STC8A8K64S4A12的定時/計數(shù)器相關(guān)寄存器2/18目標(biāo)理解STC8A8K64S4A12的定時/計數(shù)器的結(jié)構(gòu)及工作原理、熟悉相關(guān)寄存器。3/18STC8A8K64S4A12的定時/計數(shù)器結(jié)構(gòu)一4/181.定時/計數(shù)器的一般結(jié)構(gòu)定時/計數(shù)器的核心是一個加1計數(shù)器,加1計數(shù)器的脈沖有兩個來源,一個是外部脈沖源Tx,另一個是系統(tǒng)的時鐘振蕩器OSC。計數(shù)器對兩個脈沖源之一進(jìn)行輸入計數(shù),每輸入一個脈沖,計數(shù)值加1。當(dāng)計數(shù)到計數(shù)器為全1時,再輸入一個脈沖就使計數(shù)值回零,同時從最高位溢出一個脈沖使溢出標(biāo)志位TFx置1,該位同時作為計數(shù)器的溢出中斷標(biāo)志。當(dāng)脈沖源為定時時鐘振蕩器OSC(等間隔脈沖序列)時為定時功能。當(dāng)脈沖源為間隔不等的外部脈沖發(fā)生器時,在Tx端有一個1→0的跳變時加1,就是外部事件的計數(shù)器,因此為計數(shù)功能。5/18STC8A8K64S4A12集成了5個16位的通用定時/計數(shù)器T0、T1、T2、T3和T4,分別由兩個8位的特殊功能寄存器THn和TLn組成(n=0、1、2、3、4)。單片機(jī)中的微處理器、定時器相關(guān)特殊功能寄存器之間的關(guān)系框圖。2.單片機(jī)CPU和定時器相關(guān)寄存器的關(guān)系作為定時器使用時,STC8A8K64S4A12的定時/計數(shù)器脈沖源可以選擇是否12分頻,定時器/計數(shù)器T0、T1及T2分別由輔助寄存器AUXR中的T0x12、T1x12和T2x12三個控制位進(jìn)行設(shè)置,定時器/計數(shù)器T3、T4由特殊功能寄存器T4T3M中的T3x12和T4x12兩個控制位進(jìn)行設(shè)置。6/182.定時/計數(shù)器的工作方式STC8A8K64S4A12的定時器/計數(shù)器T0有4種工作模式:模式0(16位自動重裝載模式)模式1(16位不可重裝載模式)模式2(8位自動重裝模式)模式3(不可屏蔽中斷的16位自動重裝載模式)。定時器/計數(shù)器T1除模式3外,其他工作模式與定時器/計數(shù)器0相同。T1在模式3時無效,停止計數(shù)。定時器T2、T3和T4的工作模式固定為16位自動重裝載模式,它們可以當(dāng)定時器使用,也可以當(dāng)串口的波特率發(fā)生器和可編程時鐘輸出。為了便于與定時器0和1統(tǒng)一描述,將產(chǎn)品手冊中的T2L和T2H分別用TL2和TH2表示,T3L和T3H分別用TL3和TH3表示,T4L和T4H分別用TL4和TH4表示。

7/18T0和T1工作方式0的原理圖T0和T1工作方式0的原理圖(n=0,1)8/18

9/18定時器T2的原理圖T3和T4的原理圖與T2類似。T2、T3和T4的工作方式與T0的工作方式0類似,可參考T2的原理圖以及上述內(nèi)容自行學(xué)習(xí)。10/18STC8A8K64S4A12的定時/計數(shù)器相關(guān)寄存器二11/18與定時/計數(shù)器相關(guān)的特殊功能寄存器有TMOD、TCON、AUXR、INTCLKO、T4T3M。其中,TMOD用于控制定時/計數(shù)器的工作方式;TCON用于控制T0、T1的啟動和停止,并包含了定時器的狀態(tài);AUXR用于設(shè)置定時器T0、T1、T2的速度和T2的功能選擇和啟動/停止控制;T4T3M用于設(shè)置T4和T3的功能、速度和啟動/停止控制。1.定時器工作方式控制寄存器(TMOD)位號b7b6b5b4b3b2b1b0位名稱定時器1定時器0GATEM1M0GATEM1M0M1M0工作方式功能說明00016位自動重載模式01116位不自動重載模式1028位自動重載模式113定時器0:16位自動重載模式,產(chǎn)生不可屏蔽中斷定時器1:停止工作1)M1和M0:

12/182.定時器控制寄存器(TCON)1)TF1:定時器1溢出中斷標(biāo)志。當(dāng)定時器1溢出時,由內(nèi)部硬件置位,當(dāng)單片機(jī)轉(zhuǎn)向中斷服務(wù)程序時,由內(nèi)部硬件清除。2)TR1:定時器1運行控制位。1:啟動定時器1; 0:停止定時器1。3)TF0:定時器0溢出中斷標(biāo)志。當(dāng)定時器0溢出時由內(nèi)部硬件置位,當(dāng)單片機(jī)進(jìn)入中斷服務(wù)程序時,由內(nèi)部硬件清除。4)TR0:定時器0運行控制位。1:啟動定時器0; 0:停止定時器0。TCON的0~3位與外部中斷有關(guān)。位號b7b6b5b4b3b2b1b0位名稱TF1TR1TF0TR0IE1IT1IE0IT013/183.輔助寄存器(AUXR)AUXR主要用來設(shè)置T0和T1的速度、T2的功能以及串口UART的波特率控制等。1)T0x12:T0速度控制位。0:12分頻(FOSC/12);1:不分頻(FOSC)。2)T1x12:T1速度控制位。0:12分頻(FOSC/12);1:不分頻(FOSC)。如果UART串口用T1作為波特率發(fā)生器,T1x12位決定UART串口是12T還是1T。3)TR2:定時器2的運行控制位。0:定時器2停止計數(shù); 1:定時器2開始計數(shù)。4)T2_C/T:控制T2用作定時器或計數(shù)器。0:T2用作定時器;1:T2用作計數(shù)器。5)T2x12:T2速度控制位。0:T2每12個時鐘計數(shù)一次;1:T2每1個時鐘計數(shù)一次。T2除了作為一般定時器使用外,主要用于串行口的波特率發(fā)生器。如果UART用T2作為波特率發(fā)生器,T2x12位決定UART串口是12T還是1T。UART_M0x6用于控制UART串口的速度。S1ST2為串口1波特率發(fā)生器選擇位。具體內(nèi)容請參見第9章。EXTRAM用于設(shè)置是否允許使用內(nèi)部8192B的擴(kuò)展RAM。地址b7b6b5b4b3b2b1b08EHT0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMS1ST214/184.中斷與時鐘輸出控制寄存器(INTCLKO)地址b7b6b5b4b3b2b1b08FH-EX4EX3EX2-T2CLKOT1CLKOT0CLKO1)T2CLKO:定時器2時鐘輸出控制。0:關(guān)閉T2時鐘輸出;1:使能T2時鐘輸出功能。當(dāng)T2計數(shù)發(fā)生溢出時,P1.3口的電平自動發(fā)生翻轉(zhuǎn)。2)T1CLKO:定時器1時鐘輸出控制。0:關(guān)閉T1時鐘輸出;1:使能T1時鐘輸出功能。當(dāng)T1計數(shù)發(fā)生溢出時,P3.4口的電平自動發(fā)生翻轉(zhuǎn)。3)T0CLKO:定時器0時鐘輸出控制。0:關(guān)閉T0時鐘輸出;1:使能T0時鐘輸出功能。當(dāng)T0計數(shù)發(fā)生溢出時,P3.5口的電平自動發(fā)生翻轉(zhuǎn)。15/185.T4/T3控制寄存器(T4T3M)

地址b7b6b5b4b3b2b1b0D1HT4RT4_C/TT4x12T4CLKOT3RT3_C/TT3x12T3CLKO1)T4R:T4的運行控制位。

0:T4停止計數(shù); 1:允許T4計數(shù)。2)T4_C/T:控制T4用作定時器或計數(shù)器。0:T4用作定時器;1:T4用作計數(shù)器。3)T4x12:定時器4速度控制位。0:12分頻(FOSC/12);1:不分頻(FOSC)。4)T4CLKO:T4時鐘輸出控制。0:關(guān)閉T4時鐘輸出;1:使能T4時鐘輸出功能(由P0.7輸出)。5)T3R:T3的運行控制位。

0:T3停止計數(shù); 1:允許T3計數(shù)。6)T3_C/T:控制T3用作定時器或計數(shù)器。0:T3用作定時器;1:T3用作計數(shù)器。7)T3x12:定時器3速度控制位。0:12分頻(FOSC/12);1:不分頻(FOSC)。8)T3CLKO:T3時鐘輸出控制。0:關(guān)閉T3時鐘輸出;1:使能T3時鐘輸出功能(由P0.5輸出)。16/18除了上述特殊功能寄存器外,還有各個定時器的重裝載寄存器,這些寄存器復(fù)位值均為00H,包括:T0重裝值寄存器高字節(jié)TH0(地址為8CH)、T0重裝值寄存器低字節(jié)TL0(地址為8AH)T1重裝值寄存器高字節(jié)TH1(地址為8DH)、T1重裝值寄存器低字節(jié)TL1(地址為8BH)T2重裝值寄存器高字節(jié)TH2(地址為D6H)、T2重裝值寄存器低字節(jié)TL2(地址為D7H)T3重裝值寄存器高字節(jié)TH3(地址為D4H)、T3重裝值寄存器低字節(jié)TL3(地址為D5H)T4重裝值寄存器高字節(jié)TH4(地址為D2H)、T4重裝值寄存器低字節(jié)TL4(地址為D3H)。與定時器中斷相關(guān)的寄存器在第7章中已有詳細(xì)描述,在此不再贅述。17/18下一講內(nèi)容STC8A8K64S4A12的定時/計數(shù)器應(yīng)用舉例18/18單片機(jī)原理及應(yīng)用(8)-219/16內(nèi)容提綱STC8A8K64S4A12的定時/計數(shù)器應(yīng)用舉例20/16目標(biāo)掌握STC8A8K64S4A12的定時/計數(shù)器的應(yīng)用開發(fā)方法。21/161.定時/計數(shù)器量程的擴(kuò)展(1)定時器的最大定時能力

當(dāng)工作于定時狀態(tài)時,定時/計數(shù)器的計數(shù)脈沖是對系統(tǒng)振蕩器時鐘OSC或者OSC/12。若晶振頻率為11.0592MHz,12分頻,則

定時時間為:TC=XTP。其中,TP為計數(shù)周期,TC為定時時間。

則應(yīng)裝入計數(shù)/定時器的初值為(注:M=2n,n為定時器的位數(shù),TP為計數(shù)周期,TC為定時時間)

例如:若TP=1μs,要求定時TC=1ms,則對16位的定時器,應(yīng)裝入的時間常數(shù)為:216-1000=64536。設(shè)系統(tǒng)時鐘頻率為11.0592MHz,則定時器的最大定時能力為:T=(216-0)×12000000/11059200μs≈71111μs=71.111ms22/16(2)定時器定時量程的擴(kuò)展定時器定時量程的擴(kuò)展可分為軟件擴(kuò)展和硬件擴(kuò)展兩種方法。1)軟件擴(kuò)展方法軟件擴(kuò)展方法是在定時器中斷服務(wù)程序中對定時器中斷請求進(jìn)行計數(shù),當(dāng)中斷請求的次數(shù)達(dá)到要求的值時才進(jìn)行相應(yīng)的處理。例如,某事件的處理周期為1s,由于受到最大定時時間的限制,無法一次完成定時,此時可以將定時器的定時時間設(shè)為以10ms為一個單位,啟動定時器后的每一次定時器溢出中斷產(chǎn)生10ms的定時,進(jìn)入中斷服務(wù)程序后,對定時器的中斷次數(shù)進(jìn)行統(tǒng)計,每100次定時器溢出中斷進(jìn)行一次事件的處理,然后再以同樣的方式進(jìn)入下一個周期的事件處理。2)硬件擴(kuò)展方法硬件擴(kuò)展方法可以使用外接通用定時器芯片對單片機(jī)的定時能力進(jìn)行擴(kuò)展,如使用定時/計數(shù)器芯片8253,也可以利用單片機(jī)兩個定時器串聯(lián)起來實現(xiàn)對定時能力進(jìn)行擴(kuò)展。具體方法,請讀者自行思考。采用硬件擴(kuò)展方法時,占用較多的硬件或者CPU資源,因此,在工程應(yīng)用中通常采用軟件擴(kuò)展的方法。23/16定時/計數(shù)器是一種可編程器部件,在開始工作之前,CPU必須將一些命令(稱為控制字)寫入定時/計數(shù)器。將控制字寫入定時/計數(shù)器的過程稱為定時/計數(shù)器初始化。在初始化過程中,要將工作方式控制字寫入方式寄存器,賦定時/計數(shù)初值,啟動或停止定時器。定時/計數(shù)器的應(yīng)用編程主要有兩點:一是能正確初始化,包括寫入控制字,進(jìn)行時間常數(shù)的計算并裝入;二是中斷服務(wù)程序的編寫,即在中斷服務(wù)程序中編寫實現(xiàn)需要定時完成的任務(wù)代碼。一般情況下,定時/計數(shù)器初始化部分的步驟大致如下:1)設(shè)置工作方式,將控制字寫入方式寄存器。2)把定時/計數(shù)初值裝入TLn、THn寄存器。3)置位TRn以啟動定時/計數(shù)。4)置位ETn允許定時/計數(shù)器中斷(如果需要)。5)置位EA使CPU開放中斷。2.定時/計數(shù)器應(yīng)用舉例24/16

25/16匯編語言程序清單如下(此處演示了T0的用法,T1的用法與此類似): ORG0000H LJMPMAIN ;轉(zhuǎn)主程序 ORG000BH ;定時器T0中斷服務(wù)程序入口地址 LJMPT0_ISR ;轉(zhuǎn)中斷服務(wù)程序 ORG 0100H ;主程序的存放起始地址MAIN:MOV SP,#60H;給棧指針賦初值 MOV A,#0FFH MOV TMOD,#04H ;定時器T0工作于計數(shù)方式0 MOV TL0,#0FFH ;送時間常數(shù) MOV TH0,#0FFH SETB TR0 ;啟動T0計數(shù)器 SETBET0 ;允許T0中斷 SETBEA ;CPU開中斷 HERE: LJMP HERE ;等待 T0_ISR:DEC A ;T0中斷服務(wù)程序 MOV P2,A ;累加器A內(nèi)容減1送P2口 RETI END26/16對應(yīng)的C語言版程序如下:#include“stc8.h”unsignedcharcnt;voidmain(void){ cnt=0xff; TMOD=0x04; //定時器0工作于計數(shù)方式0 TL0=0xff; TH0=0xff; TR0=1; ET0=1; EA=1; while(1); //等待中斷}voidT0_ISR(void)interrupt1{ //T0中斷函數(shù)

cnt=cnt--; //在C語言程序中,使用變量cnt代替匯編語言中的累加器AP2=cnt;}27/16【例8-2】設(shè)系統(tǒng)時鐘頻率為11.0592MHz,利用定時器T0定時,每隔0.5s將P2.0的狀態(tài)取反。解:由于所要求的定時時間0.5s遠(yuǎn)遠(yuǎn)超過了定時器的定時能力(16位定時器的最長定時時間約為71.111ms),所以無法采用定時器直接實現(xiàn)0.5s的定時。這時可以將定時器的定時時間設(shè)為50ms,在中斷服務(wù)程序中對定時器溢出中斷請求進(jìn)行計數(shù),當(dāng)計夠10次時,將P2.0的狀態(tài)取反,否則直接返回主程序。選擇定時器T0的工作方式:軟件啟動、定時方式、16位定時器,方式字為00H。系統(tǒng)時鐘頻率為11.0592MHz,定時器T0的裝入初值為28/16為了便于計算初值,STC-ISP軟件中集成了定時器計算器,可直接生成定時器初始化程序。29/16匯編語言程序代碼如下:ORG 0000HLJMP MAIN ;轉(zhuǎn)主程序ORG 000BH ;T0中斷服務(wù)程序入口地址LJMP T0_ISRORG 0100HMAIN:MOV SP,#60H ;設(shè)置堆棧指針LCALL TIMER0INIT ;調(diào)用T0初始化子程序MOV A,#10 ;累加器A置10SETBET0 ;允外T0中斷SETBEA ;CPU開中斷SJMP$ ;等待TIMER0INIT: ;50毫秒@11.0592MHz

ANL AUXR,#7FH ;定時器時鐘12T模式

ANL TMOD,#0F0H ;設(shè)置定時器模式MOV TL0,#000H ;設(shè)置定時初值

MOV TH0,#04CH ;設(shè)置定時初值

CLR TF0 ;清除TF0標(biāo)志

SETB TR0 ;定時器0開始計時

RETT0_ISR:DECA ;累加器A內(nèi)容減1JNZ EXIT CPL P2.0MOV A,#10 ;累加器A重載10EXIT:RETI

END30/16對應(yīng)的C語言版程序如下:#include“stc8.h” //包含stc8單片機(jī)的頭文件unsignedchari; //聲明計數(shù)變量。在C語言程序中,不要使用ACCvoidTimer0Init(void); //定時器0初始化函數(shù)voidmain(void){ Timer0Init(); i=10; //計數(shù)變量賦初值 ET0=1; //允許T0中斷 EA=1; //開放總的中斷 while(1); //等待中斷}voidTimer0Init(void) //50毫秒@11.0592MHz{ AUXR&=0x7F; //定時器時鐘12T模式 TMOD&=0xF0; //設(shè)置定時器模式 TL0=0x00; //設(shè)置定時初值 TH0=0x4C; //設(shè)置定時初值 TF0=0; //清除TF0標(biāo)志 TR0=1; //定時器0開始計時}//定時器T0中斷函數(shù)voidT0_ISR(void)interrupt1{ i--; //計數(shù)變量減1 if(i==0){ //若減到0,則將P2.0取反 P20=~P20; i=10;//重新給計數(shù)變量賦值}}請看演示?。?!31/16

32/16定時器2、3、4的使用方法與定時器0和1類似,唯一需要注意的是大多寄存器不能使用位尋址,設(shè)置或修改內(nèi)容時,請使用相關(guān)的字節(jié)操作方式進(jìn)行設(shè)置。請自行進(jìn)行學(xué)習(xí)。33/16下一講內(nèi)容

1、STC8A8K64S4A12的PCA結(jié)構(gòu)

2、STC8A8K64S4A12的PCA相關(guān)寄存器

3、STC8A8K64S4A12的PCA的工作模式34/16單片機(jī)原理及應(yīng)用(8)-335/24內(nèi)容提綱一STC8A8K64S4A12的PCA結(jié)構(gòu)二STC8A8K64S4A12的PCA相關(guān)寄存器三STC8A8K64S4A12的PCA的工作模式36/24目標(biāo)了解STC8A8K64S4A12的PCA的結(jié)構(gòu)及工作模式,掌握工作模式的設(shè)置使用方法。37/24STC8A8K64S4A12的PCA結(jié)構(gòu)一38/241.STC8A8K64S4A12單片機(jī)可編程計數(shù)器陣列(PCA)模塊簡介STC8A8K64S4A12單片機(jī)集成了4組可編程計數(shù)器陣列(PCA)模塊??捎糜谲浖〞r器、外部脈沖的捕捉、高速脈沖輸出以及PWM脈寬調(diào)制輸出。PCA內(nèi)部含有一個特殊的16位計數(shù)器,4組PCA模塊均與之相連接,如圖8-7所示。4組PCA模塊可以通過設(shè)置P_SW1寄存器以組為單位([ECI/CCP0/CCP1/CCP2/CCP3]為一組)在[P1.2/P1.7/P1.6/P1.5/P1.4]、[P2.2/P2.3/P2.4/P2.5/P2.6]、[P7.4/P7.0/P7.1/P7.2/P7.3]、[P3.5/P3.3/P3.2/P3.1/P3.0]這4組之間進(jìn)行任意切換。39/242.STC8A8K64S4A12單片機(jī)可編程計數(shù)器陣列(PCA)模塊結(jié)構(gòu)16位PCA定時器/計數(shù)器是4個模塊的公共時間基準(zhǔn),其結(jié)構(gòu)如圖8-8所示。圖8-8PCA定時器/計數(shù)器結(jié)構(gòu)寄存器CH和CL的內(nèi)容是自動遞增計數(shù)的16位PCA定時器的值。PCA定時器的時鐘源有以下幾種:1/12振蕩頻率、1/8振蕩頻率、1/6振蕩頻率、1/4振蕩頻率、1/2振蕩頻率、振蕩頻率、定時器0溢出或ECI腳的輸入。定時器的計數(shù)源通過設(shè)置特殊功能寄存器CMOD的CPS2、CPS1和CPS0位選擇其中一種。40/24CMOD中的CIDL位用于控制空閑模式下是否允許停止PCA;ECF位用于中斷控制,置位時,使能PCA中斷。當(dāng)PCA定時器溢出時,PCA計數(shù)溢出標(biāo)志CF置位。CCON中的CR位是PCA的運行控制位。CR=1時,運行PCA。CR=0時,關(guān)閉PCA。CCON中還包含PCA定時器標(biāo)志(CF)以及各個模塊的標(biāo)志(CCF3/CCF2/CCF1/CCF0)。當(dāng)PCA計數(shù)器溢出時,CF位置位,如果CMOD寄存器的ECF位置位,就產(chǎn)生中斷。CF位只能通過軟件清除。CCON寄存器中的CCF0是PCA模塊0的標(biāo)志,CCF1是模塊1的標(biāo)志,CCF2是PCA模塊2的標(biāo)志,CCF3是模塊3的標(biāo)志。當(dāng)發(fā)生匹配或比較時由硬件置位。這些標(biāo)志也只能通過軟件清除。所有模塊共用一個中斷向量,可以在中斷服務(wù)程序中判斷CCF0、CCF1、CCF2和CCF3,以確定到底是哪個模塊產(chǎn)生了中斷。41/24STC8A8K64S4A12的PCA相關(guān)寄存器二42/241.PCA工作模式寄存器(CMOD)位號b7b6b5b4b3b2b1b0位名稱CIDL---CPS2CPS1CPS0ECF1)CIDL:空閑模式下是否停止PCA計數(shù)的控制位。0:繼續(xù)計數(shù);1:停止計數(shù)。2)CPS2、CPS1、CPS0:PCA計數(shù)脈沖源選擇控制位。PCA計數(shù)脈沖選擇見表8-2。3)ECF:PCA計數(shù)器溢出中斷使能位。1:允許CF位的中斷;0:禁止CF位的中斷。表8-2PCA計數(shù)脈沖源選擇CPS2CPS1CPS0PCA時鐘源輸入選擇000系統(tǒng)時鐘/12,F(xiàn)OSC/12001系統(tǒng)時鐘/2,F(xiàn)OSC/2010定時器0溢出脈沖。由于定時器0可以工作在1T方式,所以可以達(dá)到計一個時鐘就溢出,從而達(dá)到最高頻率CPU工作時鐘FOSC,通過改變定時器0的溢出率,可以實現(xiàn)可調(diào)頻率的PWM輸出011ECI/P1.2(或P2.2或P7.4或P3.5)腳輸入的外部時鐘(最大速率=CPU工作時鐘/2)100系統(tǒng)時鐘,F(xiàn)OSC101系統(tǒng)時鐘/4,F(xiàn)OSC/4110系統(tǒng)時鐘/6,F(xiàn)OSC/6111系統(tǒng)時鐘/8,F(xiàn)OSC/843/242.PCA控制寄存器(CCON)位號b7b6b5b4b3b2b1b0位名稱CFCR--CCF3CCF2CCF1CCF01)CF:PCA計數(shù)器溢出標(biāo)志位。當(dāng)PCA計數(shù)器溢出時,CF位由硬件置位。如果CMOD寄存器的ECF位置位,CF標(biāo)志可用來產(chǎn)生中斷。CF位可通過硬件或軟件置位,但只能通過軟件清零。2)CR:PCA計數(shù)器的運行控制位。置位CR位時,啟動PCA計數(shù)器計數(shù);清零CR位時,關(guān)閉PCA計數(shù)器。3)CCFn(n=0,1,2,3):PCA模塊的中斷標(biāo)志(CCF0對應(yīng)模塊0,CCF1對應(yīng)模塊1,CCF2對應(yīng)模塊2,CCF3對應(yīng)模塊3)。當(dāng)發(fā)生匹配或捕獲時由硬件置位。這些標(biāo)志位必須通過軟件清除。44/243.PCA比較/捕獲寄存器CCAPMn(n=0,1,2,3,下同。地址分別對應(yīng)0DAH、0DBH、0DCH、0DDH,復(fù)位值均為x0000000B),各位的定義如下:位號b7b6b5b4b3b2b1b0位名稱-ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn1)ECOMn:允許比較器功能控制位。ECOMn=1時,允許比較器功能。2)CAPPn:正捕獲控制位。CAPPn=1時,允許上升沿捕獲。3)CAPNn:負(fù)捕獲控制位。CAPNn=1時,允許下降沿捕獲。如果CAPPn=1,同時CAPNn=1,則允許上升沿和下降沿都捕獲。4)MATn:匹配控制位。如果MATn=1,則PCA計數(shù)值與模塊的比較/捕獲寄存器的值匹配時,將置位CCON寄存器的中斷標(biāo)志位CCFn。5)TOGn:翻轉(zhuǎn)控制位。當(dāng)TOGn=1時,PCA工作于高速輸出模式,PCA計數(shù)器的值與模塊的比較/捕獲寄存器的值匹配時,將使CCPn腳翻轉(zhuǎn)。6)PWMn:脈寬調(diào)制模式。當(dāng)PWMn=1時,CCPn腳用作脈寬調(diào)制輸出。7)ECCFn:使能CCFn中斷。使能寄存器CCON的比較/捕獲標(biāo)志CCFn,用來產(chǎn)生中斷。45/244.PCA模塊PWM寄存器PCA_PWMn其中,n=0,1,2,3,分別對應(yīng)模塊0、模塊1、模塊2和模塊3。位號b7b6b5b4b3b2b1b0位名稱EBSn[1:0]XCCAPnH[1:0]XCCAPnL[1:0]EPCnHEPCnL1)EBSn[1:0]:PCA模塊n的PWM位數(shù)控制。EBSn[1:0]PWM位數(shù)重載值比較值008位PWM{EPCnH,CCAPnH[7:0]}{EPCnL,CCAPnL[7:0]}017位PWM{EPCnH,CCAPnH[6:0]}{EPCnL,CCAPnL[6:0]}106位PWM{EPCnH,CCAPnH[5:0]}{EPCnL,CCAPnL[5:0]}1110位PWM{EPCnH,XCCAPnH[1:0],CCAPnH[7:0]}{EPCnL,XCCAPnL[1:0],CCAPnL[7:0]}2)XCCAPnH[1:0]:10位PWM的第9位和第10位的重載值。3)XCCAPnL[1:0]:10位PWM的第9位和第10位的比較值。4)EPCnH:在PWM模式下,重載值的最高位(8位PWM的第9位,7位PWM的第8位,6位PWM的第7位,10位PWM的第11位)。5)EPCnL:在PWM模式下,比較值的最高位(8位PWM的第9位,7位PWM的第8位,6位PWM的第7位,10位PWM的第11位)。注意:在更新10位PWM的重載值時,必須先寫高兩位XCCAPnH[1:0],再寫低8位CCAPnH[7:0]。46/245.PCA的16位計數(shù)器--低8位CL和高8位CH(地址分別為0E9H和0F9H,復(fù)位值均為00H)。它們用于保存PCA的裝載值。6.PCA捕捉/比較寄存器——CCAPnL(低位字節(jié))和CCAPnH(高位字節(jié))(其中,n=0,1,2,3)當(dāng)PCA模塊捕獲功能使能時,CCAPnL和CCAPnH用于保存發(fā)生捕獲時的PCA的計數(shù)值(CL和CH);當(dāng)PCA模塊比較功能使能時,PCA控制器會將當(dāng)前CL和CH中的計數(shù)值與保存在CCAPnL和CCAPnH中的值進(jìn)行比較,并給出比較結(jié)果;當(dāng)PCA模塊匹配功能使能時,PCA控制器會將當(dāng)前CL和CH中的計數(shù)值與保存在CCAPnL和CCAPnH中的值進(jìn)行比較,看是否匹配(相等),并給出匹配結(jié)果。7.PCA模塊引腳切換寄存器P_SW1PCA模塊引腳切換寄存器P_SW1(地址為0A2H,復(fù)位值為nn00000xB)用于選擇CCP輸出、SPI接口和串口1所用的引腳在單片機(jī)的位置,各位定義請參見第三章。47/24STC8A8K64S4A12的PCA的工作模式三48/24通過設(shè)置PCA比較/捕獲寄存器CCAPMn

,PCA模塊的工作模式設(shè)定見表8-4。表8-4PCA模塊的工作模式設(shè)定ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn可設(shè)數(shù)值模塊功能000000000H無此操作100001042HPWM模式,無中斷110001163HPWM模式,產(chǎn)生上升沿中斷101001153HPWM模式,產(chǎn)生下降沿中斷111001173HPWM模式,上升沿和下降沿均可產(chǎn)生中斷010000X21H16位上升沿捕獲模式,由CCPn的上升沿觸發(fā)001000X11H16位下降沿捕獲模式,由CCPn的下降沿觸發(fā)011000X31H16位邊沿捕獲模式,由CCPn的跳變觸發(fā)100100X49H16位軟件定時器100110X4DH16位高速脈沖輸出49/241.捕獲模式要使一個PCA模塊工作在捕獲模式,寄存器CCAPMn中的CAPNn和CAPPn至少有一位必須置1(也可兩位都置1),ECOMn為0。PCA模塊工作于捕獲模式時,對模塊的外部引腳CCP0/CCP1/CCP2/CCP3的輸入跳變進(jìn)行采樣。當(dāng)采樣到有效跳變時,PCA控制器立即將PCA計數(shù)器CH和CL中的計數(shù)值裝載到模塊的捕獲寄存器中CCAPnL和CCAPnH,同時將CCON寄存器中相應(yīng)的CCFn置1。若CCAPMn中的ECCFn位被設(shè)置為1,將產(chǎn)生中斷。由于所有PCA模塊的中斷入口地址是共享的,所以需要在中斷服務(wù)程序中判斷是哪一個模塊產(chǎn)生了中斷,并注意需要用軟件清零中斷標(biāo)志位。50/242.16位軟件定時器模式通過置位CCAPMn寄存器的ECOMn和MATn位,可使PCA模塊用作軟件定時器。PCA的計數(shù)器值CL和CH與模塊捕獲寄存器的值CCAPnL和CCAPnH相比較,當(dāng)兩者相等時,CCON中的CCFn會被置1,若CCAPMn中的ECCFn被設(shè)置為1時將產(chǎn)生中斷。CCFn標(biāo)志位需要用軟件清零。圖8-10PCA模塊的16位軟件定時器模式/PCA比較模式結(jié)構(gòu)51/24[CH,CL]每隔一定的時間自動加1,時間間隔取決于選擇的時鐘源。例如,當(dāng)選擇的時鐘源為FOSC/12時,每12個時鐘周期[CH,CL]加1。當(dāng)[CH,CL]增加到等于[CCAPnH,CCAPnL]時,CCFn=1,產(chǎn)生中斷請求。如果每次PCA模塊中斷后,在中斷服務(wù)程序中給[CCAPnH,CCAPnL]增加一個相同的數(shù)值,那么下一次中斷來臨的間隔時間T也是相同的,從而實現(xiàn)了定時功能。定時時間的長短,取決于時鐘源的選擇以及PCA計數(shù)器計數(shù)值的設(shè)置。下面舉例說明PCA計數(shù)器計數(shù)值的計算方法。假設(shè),時鐘頻率FOSC=11.0592MHz,選擇的時鐘源為FOSC/12,定時時間T為5ms,則PCA計數(shù)器計數(shù)值為:PCA計數(shù)器的計數(shù)值=T/((1/FOSC)×12)=0.005/((1/11059200)×12)=4608(10進(jìn)制數(shù))=1200H(16進(jìn)制數(shù))也就是說,PCA計數(shù)器計數(shù)1200H次,定時時間才是5ms。這也就是每次給[CCAPnH,CCAPnL]增加的數(shù)值(步長)。52/243.高速輸出模式要激活高速輸出模式,CCAPMn寄存器的TOGn、MATn和ECOMn位必須都置位。當(dāng)PCA計數(shù)器的計數(shù)值與模塊捕獲寄存器的值相匹配時,PCA模塊的輸出CCPn將發(fā)生翻轉(zhuǎn)。CCAPnL中的值決定了PCA模塊n輸出脈沖的頻率。當(dāng)PCA時鐘源是Fosc/2時,輸出脈沖的頻率f為:f=FOSC/(4×CCAPnL)由此,可以得到CCAPnL的值CCAPnL=FOSC/(4×f)。將計算出的結(jié)果進(jìn)行四舍五入取整,即CCAPnL=INT(FOSC/(4×f)+0.5)其中,INT()為取整數(shù)運算,直接去掉小數(shù)。例如,假設(shè)FOSC=11.0592MHz,要求PCA高速脈沖輸出125KHz的方波,則CCAPnL中的值應(yīng)為:CCAPnL=INT(11059200/4/125000+0.5)=INT(22+0.5)=22=16H53/244.脈寬調(diào)節(jié)模式脈寬調(diào)制(PulseWidthModulation,PWM)是一種使用程序來控制波形占空比、周期、相位波形的技術(shù),在三相電機(jī)驅(qū)動、D/A轉(zhuǎn)換等場合有廣泛的應(yīng)用。STC8系列單片機(jī)的PCA模塊可以通過設(shè)定各自的PCA_PWMn寄存器使其工作于8位PWM、7位PWM、6位PWM或10位PWM模式。要使能PCA模塊的PWM功能,模塊寄存器CCAPMn的PWMn和ECOMn位必須置1。當(dāng)PCA模塊工作于PWM模式時,所有模塊共用一個PCA計數(shù)器,它們的輸出頻率相同。54/241)8位PWM模式PCA_PWMn寄存器中的EBSn[1:0]設(shè)置為00時,PCA模塊n工作于8位PWM模式。此時將{0,CL[7:0]}與捕獲寄存器{EPCnL,CCAPnL[7:0]}進(jìn)行比較。

當(dāng)PCA模塊工作于8位PWM模式時,各個模塊的輸出占空比使用寄存器{EPCnL,CCAPnL[7:0]}進(jìn)行設(shè)置。當(dāng){0,CL[7:0]}的值小于{EPCnL,CCAPnL[7:0]}時,輸出為低電平;當(dāng){0,CL[7:0]}的值等于或大于{EPCnL,CCAPnL[7:0]}時,輸出為高電平。當(dāng)CL[7:0]的值由FF變?yōu)?0溢出時,{EPCnH,CCAPnH[7:0]}的內(nèi)容重新裝載到{EPCnL,CCAPnL[7:0]}中。這樣就可實現(xiàn)無干擾地更新PWM。在8位PWM模式下,PWM的頻率由下式確定:55/242)10位PWM模式PCA_PWMn寄存器中的EBSn[1:0]設(shè)置為11時,PCA模塊n工作于10位PWM模式。此時將{CH[1:0],CL[7:0]}與捕獲寄存器{EPCnL,XCCAPnL[1:0],CCAPnL[7:0]}進(jìn)行比較。當(dāng)PCA模塊工作于10位PWM模式時,各個模塊的輸出占空比使用寄存器{EPCnL,XCCAPnL[1:0],CCAPnL[7:0]}進(jìn)行設(shè)置。當(dāng){CH[1:0],CL[7:0]}的值小于{EPCnL,XCCAPnL[1:0],CCAPnL[7:0]}時,輸出為低電平;當(dāng){CH[1:0],CL[7:0]}的值等于或大于{EPCnL,XCCAPnL[1:0],CCAPnL[7:0]}時,輸出為高電平。當(dāng){CH[1:0],CL[7:0]}的值由3FF變?yōu)?0溢出時,{EPCnH,XCCAPnH[1:0],CCAPnH[7:0]}的內(nèi)容重新裝載到{EPCnL,XCCAPnL[1:0],CCAPnL[7:0]}中。這樣就可實現(xiàn)無干擾地更新PWM。在10位PWM模式下,PWM的頻率由下式確定:56/24如果要實現(xiàn)可調(diào)頻率的PWM輸出,可選擇定時器0的溢出或者ECI腳的輸入作為PCA的時鐘輸入源:當(dāng)EPCnL=0且CCAPnL=00H時,PWM固定輸出高;當(dāng)EPCnL=1且CCAPnL=0FFH時,PWM固定輸出低。當(dāng)某個I/O口作為PWM使用時,該口的狀態(tài)見表8-5。表8-5I/O口作為PWM使用時的狀態(tài)PWM之前的狀態(tài)PWM輸出時的狀態(tài)弱上拉/準(zhǔn)雙向口強(qiáng)推挽輸出/強(qiáng)上拉輸出,要加輸出限流電阻1KΩ-10KΩ強(qiáng)推挽輸出/強(qiáng)上拉輸出強(qiáng)推挽輸出/強(qiáng)上拉輸出,要加輸出限流電阻1KΩ-10KΩ僅為輸入/高阻PWM無效開漏開漏PWM的一個典型應(yīng)用就是用于D/A輸出,典型應(yīng)用電路如圖8-14所示。圖8-14PWM用于D/A時的典型電路其中,R1、C1和R2、C2構(gòu)成濾波電路,對單片機(jī)輸出的PWM波形進(jìn)行平滑濾波,從而在D/A輸出端得到穩(wěn)定的電壓。57/24下一講內(nèi)容STC8A8K64S4A12的PCA模塊的應(yīng)用舉例58/24單片機(jī)原理及應(yīng)用(8)-459/20內(nèi)容提綱STC8A8K64S4A12的PCA模塊的應(yīng)用舉例60/20目標(biāo)掌握STC8A8K64S4A12的可編程時鐘和可編程計數(shù)器陣列(PCA)的應(yīng)用設(shè)計方法。61/20與定時器的使用方法類似,PCA模塊的應(yīng)用編程主要有兩點:一是正確初始化,包括寫入控制字、捕捉常數(shù)的設(shè)置等;二是中斷服務(wù)程序的編寫,在中斷服務(wù)程序中編寫需要完成的任務(wù)代碼,注意中斷請求標(biāo)志的清零。PCA模塊的初始化部分大致如下:(1)設(shè)置PCA模塊的工作方式,將控制字寫入CMOD、CCON和CCAPMn寄存器。(2)設(shè)置捕捉寄存器CCAPnL(低位字節(jié))和CCAPnH(高位字節(jié))初值。(3)根據(jù)需要,開放PCA中斷,將ECF置1,并將EA置1。(4)啟動PCA計數(shù)器(CH,CL)計數(shù)(使CR=1)。1.PCA模塊的應(yīng)用編程要點62/20【例8-4】利用PCA模塊擴(kuò)展外部中斷。將P1.7(PCA模塊0的外部輸入)擴(kuò)展為下降沿觸發(fā)的外部中斷,將P1.6(PCA模塊1的外部輸入)擴(kuò)展為上升沿/下降沿都可觸發(fā)的外部中斷。當(dāng)P1.7出現(xiàn)下降沿時產(chǎn)生中斷,對P6.0取反;當(dāng)P1.6出現(xiàn)下降沿或上升沿時都產(chǎn)生中斷,對P6.1取反。(P6.0和P6.1可連接LED指示燈指示狀態(tài)。)解:當(dāng)PCA模塊工作在捕獲模式時,對外部輸入CCPn的跳變進(jìn)行采樣。當(dāng)采樣到有效跳變時,PCA硬件將PCA計數(shù)器陣列寄存器(CH和CL)的值裝載到捕獲寄存器(CCAPnH和CCAPnL)中。如果CCON中的CCFn位和CCAPMn中的ECCFn位被置位,將產(chǎn)生中斷。由此,可以將PCA模塊作為擴(kuò)展外部中斷使用。按照要求,設(shè)置控制字時,PCA模塊0應(yīng)設(shè)為下降沿捕獲(即CAPP0=0并且CAPN0=1),PCA模塊1應(yīng)設(shè)為上升沿和下降沿都能捕獲的方式(即CAPP1=1并且CAPN1=1)。2.PCA模塊的應(yīng)用開發(fā)舉例63/20匯編語言程序清單如下:

$INCLUDE(STC8.INC);包含STC8寄存器定義文件LED_PCA0EQUP6.0LED_PCA1EQUP6.1

ORG0000H LJMPMAIN ;轉(zhuǎn)主程序ORG003BH ;PCA中斷LJMPPCA_ISRORG0050HMAIN: MOVSP,#70H;初始化PCAMOVP_SW1,#00HMOVCMOD,#10000000B;空閑模式下停止PCA計數(shù)器工作

;PCA時鐘源為FOSC/12,禁止PCA計數(shù)器溢出時中斷MOVCCON,#00H;清零CF和CCFn;CR=0,不允許PCA計數(shù)器計數(shù)MOVCL,#00H;清零PCA計數(shù)器MOVCH,#00HMOVCCAPM0,#11H;設(shè)置PCA模塊0下降沿觸發(fā)捕捉功能,

ECCF0=1MOVCCAPM1,#31H;模塊1上升/下降沿均可觸發(fā)捕捉功能,

ECCF1=1SETBEA;開整個單片機(jī)所有中斷共享的總中斷控制位SETBCR;啟動PCA計數(shù)器(CH,CL)計數(shù)SJMP$;循環(huán)等待中斷;--------------PCA中斷服務(wù)程序-------------------------64/20PCA_ISR:JNBCCF0,Not_PCA0 ;如果CCF0不等于1,則不是PCA模塊0中斷;直接去判是否是PCA模塊1中斷;PCA模塊0中斷服務(wù)程序

CPLLED_PCA0;LED_PCA0取反,表示PCA模塊0發(fā)生了一次中斷CLRCCF0;清PCA模塊0中斷標(biāo)志LJMP PCA_ExitNot_PCA0:JNBCCF1,PCA_Exit;CCF1不等于1,不是PCA模塊1中斷,直接退出

;PCA模塊1中斷服務(wù)程序CPLLED_PCA1;LED_PCA1取反,表示PCA模塊1發(fā)生了一次中斷CLRCCF1

;清PCA模塊1中斷標(biāo)志PCA_Exit:RETIEND65/20C語言版本的程序如下:#include“stc8.h”//包含STC8寄存器定義文件sbitLED_PCA0=P6^0;sbitLED_PCA1=P6^1;voidmain(void){ P_SW1=0x00; CMOD=0x80; //空閑模式下停止PCA計數(shù)器工作

//PCA時鐘源為FOSC/12,禁止PCA計數(shù)器溢出時中斷

CCON=0; //清CF和CCFn;CR=0,不允許PCA計數(shù)器計數(shù) CL=0; //PCA計數(shù)器清零 CH=0; CCAPM0=0x11; //設(shè)置PCA模塊0下降沿觸發(fā)捕捉功能 CCAPM1=0x31; //設(shè)置PCA模塊1上升/下降沿均可觸發(fā)捕捉功能 EA=1; //開整個單片機(jī)所有中斷共享的總中斷控制位 CR=1; //啟動PCA計數(shù)器(CH,CL)計數(shù)

while(1); //等待中斷}66/20voidPCA_ISR(void)interrupt7//PCA中斷服務(wù)程序{if(CCF0)//PCA模塊0中斷服務(wù)程序{ LED_PCA0=!LED_PCA0;//LED_PCA0取反,表示PCA模塊0發(fā)生了中斷CCF0=0;//清PCA模塊0中斷標(biāo)志}elseif(CCF1)//PCA模塊1中斷服務(wù)程序{LED_PCA1=!LED_PCA1;//LED_PCA1取反,表示PCA模塊1發(fā)生了中斷CCF1=0; //清PCA模塊1中斷標(biāo)志}}67/20【例8-5】利用PCA模塊做定時器使用。利用PCA模塊的軟件定時功能,實現(xiàn)在P6.1輸出脈沖寬度為1s的方波。假設(shè)晶振頻率fOSC=11.0592MHz。解:在此選擇PCA模塊0實現(xiàn)定時功能。通過置位CCAPM0寄存器的ECOM位和MAT位,使PCA模塊0工作于軟件定時器模式。定時時間的長短,取決于時鐘源的選擇以及PCA計數(shù)器計數(shù)值的設(shè)置。本例中,時鐘頻率fOSC=11.0592MHz,可以選擇PCA模塊的時鐘源為fOSC/12,基本定時時間單位T為5ms,對5ms計數(shù)200次以后,即可實現(xiàn)1s的定時。通過計算,PCA計數(shù)器計數(shù)值為1200H,可在中斷服務(wù)程序中,將該值賦給[CCAP0H,CCAP0L]。匯編語言程序清單如下:

$INCLUDE(STC8.inc);包含STC8寄存器定義文件COUNTEREQU30H;聲明一個計數(shù)器,用來計數(shù)中斷的次數(shù)LED_1sEQUP6.1

ORG0000H LJMPMAIN ;轉(zhuǎn)主程序ORG003BH ;PCA中斷入口地址LJMPPCA_ISRORG0050HMAIN:MOVSP,#70HMOVCOUNTER,#200;設(shè)置COUNTER計數(shù)器初值;初始化PCA模塊MOVCMOD,#10000000B;空閑模式下停止PCA計數(shù)器工作

;選擇PCA的時鐘源為fOSC/12,禁止PCA計數(shù)器溢出時中斷MOVCCON,#00H;清零PCA計數(shù)器溢出中斷請求標(biāo)志位CF;CR=0,不允許PCA計數(shù)器計數(shù);清零PCA各模塊中斷請求標(biāo)志位CCFn68/20MOVCL,#00H;清零PCA計數(shù)器MOVCH,#00HMOVCCAP0L,#00H ;給PCA模塊0的CCAP0L置初值MOVCCAP0H,#12H;給PCA模塊0的CCAP0H置初值MOVCCAPM0,#49H;設(shè)置PCA模塊0為16位軟件定時器;ECCF0=1允許PCA模塊0中斷

;當(dāng)[CH,CL]=[CCAP0H,CCAP0L]時,產(chǎn)生中斷請求,CCF0=1,請求中斷SETBEA;開整個單片機(jī)所有中斷共享的總中斷控制位SETBCR;啟動PCA計數(shù)器(CH,CL)計數(shù)SJMP$;循環(huán)等待中斷PCA_ISR:;PCA中斷服務(wù)程序PUSHACC ;保護(hù)現(xiàn)場PUSHPSWCLRCCF0;清PCA模塊0中斷標(biāo)志;每5mS中斷一次MOVA,#00H ;給[CCAP0H,CCAP0L]增加一個數(shù)值A(chǔ)DDA,CCAP0LMOVCCAP0L,AMOVA,#12HADDCA,CCAP0HMOVCCAP0H,ADJNZ COUNTER,PCA_EXIT ;中斷計數(shù)沒有減到0,直接退出MOV COUNTER,#200 ;恢復(fù)中斷計數(shù)初值CPLLED_1s;LED_1S輸出脈沖寬度為1秒鐘的方波PCA_EXIT:POPPSW;恢復(fù)現(xiàn)場POPACCRETIEND69/20對應(yīng)的C語言程序如下:#include“stc8.h”//包含STC8寄存器定義文件sbitLED_1s=P6^1;unsignedcharcnt;//中斷計數(shù)變量voidmain(void){ cnt=200;//設(shè)置COUNTER計數(shù)器初值CMOD=0x80;//#10000000B空閑模式下停止PCA計數(shù)器工作

//選擇PCA時鐘源為FOSC/12,禁止PCA計數(shù)器溢出時中斷CCON=0;//清零PCA計數(shù)器溢出中斷請求標(biāo)志位CF

//CR=0,不允許PCA計數(shù)器計數(shù);清零PCA各模塊中斷請求標(biāo)志位CCFnCL=0;//清零PCA計數(shù)器CH=0;CCAP0L=0x00; //給PCA模塊0的CCAP0L置初值CCAP0H=0x12;//給PCA模塊0的CCAP0H置初值CCAPM0=0x49;//設(shè)置PCA模塊0為16位軟件定時器//ECCF0=1允許PCA模塊0中斷

//當(dāng)[CH,CL]=[CCAP0H,CCAP0L]時,CCF0=1,產(chǎn)生中斷請求EA=1;//開整個單片機(jī)所有中斷共享的總中斷控制位CR=1;//啟動PCA計數(shù)器(CH,CL)計數(shù) while(1);

//等待中斷}70/20voidPCA_ISR(void)interrupt7//PCA中斷服務(wù)程序{ union{//定義一個聯(lián)合,以進(jìn)行16位加法

unsignedintnum; struct{//在聯(lián)合中定義一個結(jié)構(gòu)

unsignedcharHi,Lo;}Result;}temp;CCF0=0;//清PCA模塊0中斷標(biāo)志 //每5ms中斷一次

temp.num=(unsignedint)(CCAP0H<<8)+CCAP0L+0x1200;CCAP0L=temp.Result.Lo;//取計算結(jié)果的低8位

CCAP0H=temp.Result.Hi;//取計算結(jié)果的高8位

cnt--; //修改中斷計數(shù)

if(cnt==0){cnt=200;//恢復(fù)中斷計數(shù)初值LED_1s=!LED_1s;//在P6.1輸出脈沖寬度為1秒鐘的方波}}71/20【例8-6】利用PCA模塊進(jìn)行PWM輸出。PWM脈沖由P1.

溫馨提示

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

評論

0/150

提交評論