




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單片機部分內(nèi)功能部件介紹第1頁,共185頁,2023年,2月20日,星期四定時器/計數(shù)器
定時和計數(shù)功能最終都是通過計數(shù)實現(xiàn)的,若計數(shù)的事件源是周期固定的脈沖,則可以實現(xiàn)定時功能,否則只能實現(xiàn)計數(shù)功能。因此可以將定時和計數(shù)功能由一個部件實現(xiàn)。實現(xiàn)定時和計數(shù)的方法一般有軟件、專用硬件電路和可編程定時器/計數(shù)器三種方法。采用軟件只能定時,且占用CPU時間,降低了CPU的使用效率。專用硬件電路可實現(xiàn)精確的定時和計數(shù),但參數(shù)調(diào)節(jié)不便??删幊潭〞r器/計數(shù)器,不占用CPU時間,能與CPU并行工作,實現(xiàn)精確的定時和計數(shù),又可以通過編程設(shè)置其工作方式和其它參數(shù),因此使用方便。
第2頁,共185頁,2023年,2月20日,星期四定時器/計數(shù)器C8051F020內(nèi)部有T0~T4共5個16位定時器/計數(shù)器,其中T0~T2與MCS-51中的定時器/計數(shù)器兼容,還有兩個16位自動重裝初值的定時器T3
和T4既可以作為通用定時器使用,也可以用于ADC和SMBus。
表4-1C8051F020定時器/計數(shù)器的工作方式
第3頁,共185頁,2023年,2月20日,星期四4.1.1定時器的一般結(jié)構(gòu)和工作原理
方式選擇計數(shù)器定時器啟/??刂茍?zhí)行機構(gòu)減1計數(shù):如Intel8253加1計數(shù):如T0~T4溢出標(biāo)志查詢中斷第4頁,共185頁,2023年,2月20日,星期四最大定時時間TMAX=2n×T計數(shù)式中n由工作方式?jīng)Q定,T計數(shù)為定時器/計數(shù)器的計數(shù)脈沖周期時間,由C8051F的主脈沖或主脈沖經(jīng)12分頻提供,是否需要12分頻取決于對時鐘控制寄存器CKCON的設(shè)定(提供12分頻選項是為了與標(biāo)準(zhǔn)8051兼容)。
T0~T4均為加1計數(shù)器第5頁,共185頁,2023年,2月20日,星期四時鐘控制寄存器CKCON位7:未用。讀=0b,寫=忽略。位6-3:T4M-T0M:T4到T0的時鐘選擇(不包含T3,T3的時鐘選擇由T3控制寄存器TMR3CN的第0位T3XCLK決定)。
0:定時器按系統(tǒng)時鐘的12分頻計數(shù)
1:定時器按系統(tǒng)時鐘頻率計數(shù)位2-0:保留。讀=000b,寫入值必須是000b。
第6頁,共185頁,2023年,2月20日,星期四1.定時、計數(shù)方式
定時方式:每一個計數(shù)周期(T計數(shù))計數(shù)器加1,直至計滿溢出(從全1到全0)產(chǎn)生中斷請求。對于一個N位的加1計數(shù)器,若T計數(shù)是已知的,則從初值a開始加1計數(shù)至溢出所占用的時間為:當(dāng)N=8、a=0時,最大定時時間為:T=256×T計數(shù)計數(shù)方式:外部輸入信號的下降沿觸發(fā)計數(shù),計數(shù)器在每個時鐘周期或時鐘周期的12分頻采樣外部輸入信號,若一個周期的采樣值為1,下一個周期的采樣值為0,則計數(shù)器加1,故識別一個從1到0的跳變需2個周期,所以,對外部輸入信號最高的計數(shù)速率是時鐘頻率的1/2或1/24(取決于是否12分頻)。同時,外部輸入信號的高電平與低電平保持時間均需大于一個周期。第7頁,共185頁,2023年,2月20日,星期四定時器/計數(shù)器T0和T1
對定時器/計數(shù)器T0和T1的訪問和控制是通過操作SFR實現(xiàn)的。T0和T1都是16位的加1計數(shù)器,訪問時以兩個字節(jié)的形式出現(xiàn):TL0+TH0、TL1+TH1TCON用于允許/禁止定時器0和定時器1并指示它們的工作狀態(tài)。T0和T1都有四種工作方式,可以TMOD中的方式選擇位M1-M0進(jìn)行選擇。第8頁,共185頁,2023年,2月20日,星期四1、方式寄存器TMOD
T0M0T0M1C/T0GATE0T1M0T1M1C/T1GATE1TMOD字節(jié)地址89HD7D6D5D4D3D2D1D0控制T0控制T1方式選擇00:方式001:方式110:方式211:方式3定時/計數(shù)選擇0:定時器1:計數(shù)器門控位第9頁,共185頁,2023年,2月20日,星期四2、控制寄存器TCON
IT0IE0IT1IE1TR0TF0TR1TF1TCON字節(jié)地址88H
D7D6D5D4D3D2D1D0控制外部中斷控制T1、T0啟/停控制GATE=0時O:停1:啟溢出標(biāo)志1:溢出0:不溢出第10頁,共185頁,2023年,2月20日,星期四3.T0和T1的工作方式和計數(shù)器結(jié)構(gòu)
表4-2定時器T0、T1的工作方式第11頁,共185頁,2023年,2月20日,星期四(1)工作方式0
13位計數(shù)器啟/停控制TR0=1啟動計數(shù)GATE0=0時:GATE0=1時:TR0=1且INT0=1啟動計數(shù)時基選擇定時/計數(shù)選擇第12頁,共185頁,2023年,2月20日,星期四(1)工作方式0若T0工作于方式0的定時器模式,計數(shù)初值為a,則T0從初值a加1計數(shù)至溢出所需的時間為:
式中fOSC為系統(tǒng)時鐘頻率,T0M為T0的時鐘選擇位。如果fOSC=12MHz,則T0M=0時,T=(213-a)μs;T0M=1時,T=(213-a)/12μs。第13頁,共185頁,2023年,2月20日,星期四(2)工作方式1和方式0的差別僅僅在于計數(shù)器的位數(shù)不同,方式1為16位的定時器/計數(shù)器。T0工作于方式1時,由TH0作為高8位,TL0作為低8位,構(gòu)成一個16位計數(shù)器。若T0工作于方式1定時,計數(shù)初值為a,fOSC=12MHz,則T0從計數(shù)初值a加1計數(shù)到溢出的定時時間為:
T=(216-a)μs或T=(216-a)/12μs。第14頁,共185頁,2023年,2月20日,星期四(3)工作方式28位自動重裝初值第15頁,共185頁,2023年,2月20日,星期四(3)工作方式2適用于需要重復(fù)定時或計數(shù)的場合。定時精度比較高,但定時時間較短。定時時間可用下式計算:
第16頁,共185頁,2023年,2月20日,星期四(4)工作方式3只適用于T0,若T1設(shè)置為方式3,則停止計數(shù)。
兩個獨立8位計數(shù)器借用T1的資源第17頁,共185頁,2023年,2月20日,星期四4.T0和T1的初始化
初始化步驟
初始化TMOD根據(jù)需要初始化CKCON裝入初值中斷設(shè)置(IE、IP)啟動定時/計數(shù)器(TCON)計數(shù)器方式初值的計算
TC=M-C
M為計數(shù)器的模,與工作方式有關(guān),C為需要的計數(shù)值定時器方式初值的計算T=(M-TC)×T計數(shù)
T計數(shù)=TCLK或12TCLK
TC=M-T/T計數(shù)
第18頁,共185頁,2023年,2月20日,星期四4.T0和T1的初始化最大定時時間(fOSC=12MHz、T0M=0
):方式0:
TMAX=213×1μs=8.192ms方式1:
TMAX=216×1μs=65.536ms方式2、3: TMAX=28×1μs=0.256ms第19頁,共185頁,2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例
例4.1
若fOSC=12MHz,用系統(tǒng)時鐘的十二分頻作為計數(shù)源,請計算定時2ms所需的初值,并給出初始化程序。解:∵fOSC=12MHz,用系統(tǒng)時鐘的十二分頻作為計數(shù)源時,方式2、3的最大定時時間只有0.256ms,因此要想獲得2ms的定時時間,必須用方式0或方式1。方式0TC=213-2ms/1us=6192=1830H
即:TH0=0C1H;TL0=10H(高三位為0)
方式1TC=216-2ms/1us=63536=F830H
即:TH0=0F8H;TL0=30H第20頁,共185頁,2023年,2月20日,星期四初始化程序
voidT0_mode1_2ms_init(){ CKCON&=0xf7; //T0計數(shù)源選擇系統(tǒng)脈沖的12分頻
TMOD=0x01; //T0,方式1 TH0=0xf8; //初值
TL0=0x30; TCON|=0x10; //啟動T0,可用TR0=1代替
}5.T0和T1的應(yīng)用舉例
第21頁,共185頁,2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例給定時器賦初值的語句也可以采用如下方法:
TH0=(65536-2000)/256;TL0=(65536-2000)%256;或
TH0=-2000/256;TL0=-2000%256;第22頁,共185頁,2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例例4.2
若fOSC=12MHz,T1工作于方式1,產(chǎn)生50ms的定時中斷,TF1為高級中斷源。試編寫主程序和中斷服務(wù)程序,使P1.0產(chǎn)生周期為1s的方波。
解:讓P1.0每500ms取反一次即可實現(xiàn)。定時器的單次定時時間不可能達(dá)到500ms,可讓定時器多次定時產(chǎn)生500ms的定時時間,如讓T1工作在方式1,單次定時時間為50ms,那么T1中斷10次就是500ms的時間。(1)確定定時常數(shù)假設(shè)使用fOSC的12分頻作為計數(shù)源,則T計數(shù)=12/fOSC
=12/(12×106)=1μs由公式TC=M-T/T計數(shù),可知TC=216-50×103=15536=3CB0H∴TH1=0x3c,TL0=0xb0。
第23頁,共185頁,2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例(2)初始化程序包括T1初始化和中斷系統(tǒng)初始化,主要是對IP、IE、CKCON、TCON、TMOD的相應(yīng)位進(jìn)行正確的設(shè)置,并將時間常數(shù)送入T1。本例中將初始化操作放在主程序中完成,當(dāng)程序規(guī)模較大時,應(yīng)編寫單獨的初始化程序,以利于程序的模塊化設(shè)計。(3)中斷服務(wù)程序中斷服務(wù)程序除了完成要求的方波產(chǎn)生這一工作之外,還要注意將時間常數(shù)重新送入T1中,為下一次產(chǎn)生中斷作準(zhǔn)備。第24頁,共185頁,2023年,2月20日,星期四程序清單如下(主程序):
#include<c8051f020.h>sbitP1_0=P1^0;intcount=10; //10次T1中斷為500msvoidmain(void){ CKCON&=0xef; //T1的計數(shù)源選擇系統(tǒng)脈沖的12分頻
TMOD=0x10; //T1方式1 P1_0=0;TH1=0x3c; //初值
TL1=0xb0;IE|=0x88; //允許T1中斷
IP|=0x08; //TF1中斷為高級中斷
TCON|=0x20; //啟動T1while(1); //死循環(huán),等待中斷,產(chǎn)生方波}第25頁,共185頁,2023年,2月20日,星期四程序清單如下(中斷服務(wù)程序):voidTimer1_ISR(void)interrupt3{TH1=0x3c; //重裝初值
TL1|=0xb0;count--; //中斷計數(shù)
if(count==0) //500ms到,重賦計數(shù)初值,P1.0取反
{count=10;P1_0=!P1_0;}}問題:為什么用TL1|=0xb0;而非TL1=0xb0?第26頁,共185頁,2023年,2月20日,星期四程序清單如下(查詢式程序):#include<c8051f020.h> sbitP1_0=P1^0; voidmain() { intcount=10; //10次T1中斷為500ms CKCON&=0xef; //T1的計數(shù)源選擇系統(tǒng)脈沖的12分頻
TMOD=0x10; //T1方式1 P1_0=0; TR1=1; //啟動T1第27頁,共185頁,2023年,2月20日,星期四For(;;) //死循環(huán),產(chǎn)生方波
{TH1=-50000/256; //T1初值
TL1=-50000%256;
Do{}while(!TF1); //查詢等待TF1置位,
TF1=0;If(count!=0)count--;else{count=10;P1_0=!P1_0;}}}
第28頁,共185頁,2023年,2月20日,星期四定時器/計數(shù)器T2
T2為16位定時/計數(shù)器,由TL2(低字節(jié))和TH2(高字節(jié))組成。C/T2=0(定時)時,系統(tǒng)時鐘作為定時器的輸入(由CKCON的T2M位指定不分頻或12分頻)。C/T2=1(計數(shù))時,T2輸入引腳上的負(fù)跳變使計數(shù)器加“1”。T2還可以用于啟動ADC數(shù)據(jù)轉(zhuǎn)換。三種工作方式(由T2CON中的配置位選擇):自動重裝初值的16位定時器/計數(shù)器方式、帶捕捉的16位定時器/計數(shù)器方式和波特率發(fā)生器方式。第29頁,共185頁,2023年,2月20日,星期四1.T2控制寄存器T2CON
位7(TF2):T2溢出標(biāo)志位T2溢出時由硬件置位。允許T2中斷時,使CPU轉(zhuǎn)向T2的中斷服務(wù)程序。不能由硬件自動清0,必須用軟件清0。RCLK0或TCLK0為1時(波特率發(fā)生器方式),TF2不會被置1。位6(EXF2):T2外部中斷標(biāo)志位EXEN2為“1”時,當(dāng)T2EX輸入引腳發(fā)生負(fù)跳變時,由硬件置位。允許T2中斷時,使CPU轉(zhuǎn)向T2的中斷服務(wù)程序。不能由硬件自動清0,必須用軟件清0。CP/RL2C/T2TR2EXEN2TCLK0RCLK0EXF2TF2字節(jié)地址C8H
D7D6D5D4D3D2D1D0第30頁,共185頁,2023年,2月20日,星期四1.T2控制寄存器T2CON位5(RCLK0):UART0接收時鐘選擇標(biāo)志位0:T1溢出作為接收時鐘。1:T2溢出作為接收時鐘。位4(TCLK0):UART0發(fā)送時鐘選擇標(biāo)志位0:T1溢出作為發(fā)送時鐘。1:T2溢出作為發(fā)送時鐘。位3(EXEN2):T2外部允許標(biāo)志位0:T2EX上的負(fù)跳變被忽略。1:T2EX上的負(fù)跳變導(dǎo)致一次捕捉或重載。位2(TR2):T2啟/??刂莆?:停止。1:啟動。第31頁,共185頁,2023年,2月20日,星期四1.T2控制寄存器T2CON位1(C/T2):定時器/計數(shù)器功能選擇位0:定時器功能,由T2M(CKCON.5)定義的時鐘加“1”。1:計數(shù)器功能,由外部輸入引腳(T2)的負(fù)跳變加“1”。位0(CP/RL2):捕捉/重載選擇位EXEN2必須為1才能使T2EX上的負(fù)跳變能夠被識別并觸發(fā)捕捉和重載。當(dāng)RCLK0或TCLK0為“1”時,該位被忽略,T2將工作在自動重裝載方式。0:T2溢出或T2EX上發(fā)生負(fù)跳變時將自動重裝載1:T2EX發(fā)生負(fù)跳變時捕捉。第32頁,共185頁,2023年,2月20日,星期四2.T2的工作方式和計數(shù)器結(jié)構(gòu)
(1)方式0:自動重裝初值的16位定時器/計數(shù)器方式原理框圖如圖4-5所示。TH2、TL2構(gòu)成16位加“1”計數(shù)器。RCAP2H、RCAP2L構(gòu)成16位初值寄存器,EXEN2=1時,當(dāng)T2EX上有負(fù)跳變或T2溢出時,將RCAP2H、RCAP2L中預(yù)置的初值自動重新裝入TH2、TL2,T2重新開始計數(shù),并置位中斷標(biāo)志EXF2或TF2,向CPU申請中斷。EXEN2=0時,T2EX上的負(fù)跳變被忽略,只有當(dāng)T2溢出時才重載初值并向CPU申請中斷。
表4-3T2的方式選擇
RCLK0+TCLK0CP/RL2工作方式00自動重裝載的16位定時器/計數(shù)器01帶捕捉的16位定時器/計數(shù)器1×UART0波特率發(fā)生器方式第33頁,共185頁,2023年,2月20日,星期四(1)方式0:16位自動重裝初值方式自動重裝初值兩中斷標(biāo)志為0時忽略T2EX負(fù)跳變,不產(chǎn)生EXF2中斷第34頁,共185頁,2023年,2月20日,星期四(2)方式1:16位帶捕捉方式RCLK0=0、TCLK0=0、CP/RL2=1時,T2工作在此方式EXEN2=1時為允許捕捉方式,T2EX引腳上的負(fù)跳變將TH2、TL2的當(dāng)前值捕捉到RCAP2H、RCAP2L寄存器,同時置EXF2=1,發(fā)出中斷請求。EXEN2=0時,RCAP2H、PCAP2L不起作用,此時T2與T1、T0的方式1完全相同。即:C/T2=0時為16位定時器方式,C/T2=1時為16位計數(shù)器方式,計數(shù)溢出時TF2=1,發(fā)送中斷請求信號。原理框圖如圖4-6所示。第35頁,共185頁,2023年,2月20日,星期四(2)方式1:16位帶捕捉方式是否捕捉捕捉并產(chǎn)生EXF2中斷第36頁,共185頁,2023年,2月20日,星期四(3)方式2:波特率發(fā)生器方式
RCLK或TCLK置1時,T2工作于波特率發(fā)生器方式。與自動重裝載方式相似。但不置位TF2,也不產(chǎn)生中斷。溢出事件用作UART0的移位時鐘輸入。T2溢出可用于產(chǎn)生獨立的發(fā)送或接收波特率,也可同時產(chǎn)生發(fā)送和接收波特率,取決于T2CON的設(shè)置。T2的計數(shù)源可以是系統(tǒng)時鐘的二分頻,也可以是T2引腳上的輸入,取決與C/T2的設(shè)置。
如果EXEN2為1,則T2EX引腳上的負(fù)跳變將置位EXF2標(biāo)志,并產(chǎn)生一個T2中斷(如果允許)。因此,T2EX輸入可以被用作額外的外部中斷源。原理框圖如圖4-7所示。第37頁,共185頁,2023年,2月20日,星期四(3)方式2:波特率發(fā)生器方式做UART0波特率發(fā)生器T1作UART0波特率發(fā)生器產(chǎn)生外部中斷時基選擇第38頁,共185頁,2023年,2月20日,星期四(3)方式2:波特率發(fā)生器方式當(dāng)選擇系統(tǒng)時鐘的二分頻做計數(shù)源時,T2為UART0提供的波特率可以用如下公式計算:當(dāng)選擇外部引腳T2上的輸入作為時基時,T2為UART0提供的波特率可以用如下公式計算:第39頁,共185頁,2023年,2月20日,星期四定時器/計數(shù)器T31.定時器T3的結(jié)構(gòu)16位定時/計數(shù)器,由TMR3L(低字節(jié))和TMR3H(高字節(jié))組成T3的時鐘輸入可以通過程序選擇為外部振蕩器的8分頻、系統(tǒng)時鐘或系統(tǒng)時鐘的12分頻。T3只有自動重裝初值一種工作方式,初值保存在TMR3RLL(低字節(jié))和TMR3RLH(高字節(jié))兩個SFR中,T3沒有計數(shù)器方式。除作為通用定時/計數(shù)器使用外,T3還可以用于啟動ADC數(shù)據(jù)轉(zhuǎn)換、SMBus定時等。
原理框圖如圖4-8所示。第40頁,共185頁,2023年,2月20日,星期四1.定時器T3的結(jié)構(gòu)時基選擇僅此一種方式啟動ADC第41頁,共185頁,2023年,2月20日,星期四2.定時器3控制寄存器TMR3CN
位7(TF3):T3溢出標(biāo)志位溢出時置1,不能由硬件自動清0,必須用軟件清0
位6-3:未用。讀=0000b,寫=忽略位2(TR3):T3運行控制位0:停止。1:啟動。位1(T3M):T3時鐘選擇位0:T3使用系統(tǒng)時鐘的12分頻。1:T3使用系統(tǒng)時鐘。位0(T3XCLK):T3外部時鐘選擇位0:由T3M定義。1:外部振蕩器輸入的8分頻。T3XCLKT3MTR3----TF3字節(jié)地址C8H
D7D6D5D4D3D2D1D0第42頁,共185頁,2023年,2月20日,星期四3.T3應(yīng)用舉例
例4.3
假設(shè)C8051F020的并行口P2、P3連接16個LED指示燈,試編寫程序使P3口所接的LED燈循環(huán)點亮,P2口所接的LED燈實現(xiàn)走馬燈效果。(實驗四)解:要實現(xiàn)題目要求的效果,只需要定期更新P2、P3口的狀態(tài)即可。這里可以使用T3定時器再加軟件計數(shù)的方法達(dá)到所要求的時間,假設(shè)T3定時0.1秒產(chǎn)生中斷,則軟件計數(shù)器每0.1秒加1,讓計數(shù)器加到5時,改變P2、P3口的狀態(tài),就可以實現(xiàn)每秒2次刷新LED燈的狀態(tài)。第43頁,共185頁,2023年,2月20日,星期四3.T3應(yīng)用舉例#include<c8051f020.h>sfr16TMR3RL=0x92; //16位SFRsfr16TMR3=0x94;#defineSYSCLK2000000 //系統(tǒng)時鐘使用2MHz//函數(shù)聲明voidPORT_Init(void);voidTimer3_Init(intcounts);voidTimer3_ISR(void);//P2口8個LED(共陰極)產(chǎn)生走馬燈效果所需的數(shù)據(jù)
unsignedintxdatap2led[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};第44頁,共185頁,2023年,2月20日,星期四3.T3應(yīng)用舉例voidmain(void){ WDTCN=0xde; //禁止看門狗定時器
WDTCN=0xad; PORT_Init(); //端口初始化
Timer3_Init(SYSCLK/12/10); //T3初始化,產(chǎn)生0.1秒的定時中斷
EA=1; //開中斷
while(1); //循環(huán)等待T3中斷,產(chǎn)生走馬燈效果}voidPORT_Init(void){ XBR2=0x40; //使能交叉開關(guān)}第45頁,共185頁,2023年,2月20日,星期四3.T3應(yīng)用舉例voidTimer3_Init(intcounts){TMR3CN=0x00;TMR3RL=-counts; //T3賦初值,也可以采用8位SFR方式,向例4.2那樣
TMR3=0xffff; //立即重載
EIE2|=0x01; //開T3中斷,P42EIE2格式
TMR3CN|=0x04; //啟動T3}第46頁,共185頁,2023年,2月20日,星期四3.T3應(yīng)用舉例voidTimer3_ISR(void)interrupt14{
staticintcount;staticinti=9,j=0;staticintled=0xff; //P3口LED燈的初始狀態(tài)
TMR3CN&=~(0x80); //清TF3count++;if(count==5) //T3中斷5次更新一次LED燈狀態(tài)
{ count=0; P3=led; P2=p2led[j]; //查表
led=led<<1;i--; j++; if(j==8)j=0; //P2口LED燈循環(huán)一個周期
if(i==0){i=9;led=0xff;} //P3口LED燈循環(huán)一個周期
}}
第47頁,共185頁,2023年,2月20日,星期四4.1.5定時器/計數(shù)器T4
16位的定時器/計數(shù)器,由TL4(低字節(jié))和TH4(高字節(jié))組成。T4還可以用于啟動ADC數(shù)據(jù)轉(zhuǎn)換。T4與T2的功能和結(jié)構(gòu)類似,與T2有區(qū)別的是,T4可以作為UART1的波特率發(fā)生器。UART1波特率發(fā)生器方式×1帶捕捉的16位定時器/計數(shù)器10自動重裝載的16位定時器/計數(shù)器00工作方式CP/RL4RCLK1+TCLK1表4-4定時器T4的方式選擇
第48頁,共185頁,2023年,2月20日,星期四T4CON的格式:
位7(TF4):T4溢出標(biāo)志位T4溢出時由硬件置位。允許T4中斷時,使CPU轉(zhuǎn)向T4的中斷服務(wù)程序。不能由硬件自動清0,必須用軟件清0。RCLK0或TCLK0為1時(波特率發(fā)生器方式),TF4不會被置1。位6(EXF4):T4外部中斷標(biāo)志位EXEN4為“1”時,當(dāng)T4EX輸入引腳發(fā)生負(fù)跳變時,由硬件置位。允許T4中斷時,使CPU轉(zhuǎn)向T4的中斷服務(wù)程序。不能由硬件自動清0,必須用軟件清0。CP/RL4C/T4TR4EXEN4TCLK1RCLK1EXF4TF4字節(jié)地址C9H
D7D6D5D4D3D2D1D0第49頁,共185頁,2023年,2月20日,星期四T4CON的格式:位5(RCLK1):UART1接收時鐘選擇標(biāo)志位0:T1溢出作為接收時鐘。1:T4溢出作為接收時鐘。位4(TCLK1):UART1發(fā)送時鐘選擇標(biāo)志位0:T1溢出作為發(fā)送時鐘。1:T4溢出作為發(fā)送時鐘。位3(EXEN2):T4外部允許標(biāo)志位0:忽T2EX上的負(fù)跳變被略。1:T2EX上的負(fù)跳變導(dǎo)致一次捕捉或重載。位2(TR4):T4運行控制位0:禁止T4。1:允許T4。第50頁,共185頁,2023年,2月20日,星期四T4CON的格式:位1(C/T4):定時器/計數(shù)器功能選擇位0:定時器功能:T4由T4M(CKCON.6)定義的時鐘加“1”。1:計數(shù)器功能:T4由外部輸入引腳(T4)的負(fù)跳變加“1”。位0(CP/RL4):捕捉/重載選擇位該位選擇T4為捕捉還是自動重裝載方式。EXEN4必須為1才能使T4EX上的負(fù)跳變能夠被識別并觸發(fā)捕捉和重載。當(dāng)RCLK0或TCLK0為“1”時,T4將工作在自動重裝載方式。0:當(dāng)T4溢出或T4EX上發(fā)生負(fù)跳變時將自動重裝載1:在T4EX發(fā)生負(fù)跳變時捕捉。第51頁,共185頁,2023年,2月20日,星期四
可編程計數(shù)器陣列
可編程計數(shù)器陣列(ProgrammableCounterArray)提供了增強的定時器功能,與標(biāo)準(zhǔn)8051的定時器/計數(shù)器相比,需要的CPU干預(yù)更少。C8051F020內(nèi)部集成有一個可編程計數(shù)器陣列,稱為PCA0。包含一個專用的16位定時器/計數(shù)器和5個16位捕捉/比較模塊。每個捕捉/比較模塊有自己的I/O線(CEXn)。通過配置交叉開關(guān),可以將I/O線連接到并行I/O端口。定時/計數(shù)器有六個計數(shù)源:系統(tǒng)時鐘、系統(tǒng)時鐘/4、系統(tǒng)時鐘/12、外部振蕩器時鐘源8分頻、定時器0溢出、ECI線上的外部時鐘信號。每個捕捉/比較模塊可獨立工作在6種工作方式之一。第52頁,共185頁,2023年,2月20日,星期四可編程計數(shù)器陣列6種時鐘源捕捉/比較模塊第53頁,共185頁,2023年,2月20日,星期四PCA定時器/計數(shù)器
16位PCA定時/計數(shù)器由PCA0L(低字節(jié))和PCA0H(高字節(jié))組成。在讀PCA0L的同時自動鎖存PCA0H的值。讀PCA0H或PCA0L不影響計數(shù)器工作。原理框圖如圖4-10所示。PCA0MD寄存器中的CPS2-CPS0位用于選擇PCA定時/計數(shù)器的計數(shù)脈沖源,如下表所示。CPS2CPS1CPS0計數(shù)脈沖源000系統(tǒng)時鐘的12分頻001系統(tǒng)時鐘的4分頻010定時器0溢出011ECI負(fù)跳變(最大速率=系統(tǒng)時鐘頻率/4)100系統(tǒng)時鐘101外部振蕩源8分頻第54頁,共185頁,2023年,2月20日,星期四PCA定時器/計數(shù)器讀PCA0L時鎖存PCA0H第55頁,共185頁,2023年,2月20日,星期四4.2.1PCA定時器/計數(shù)器定時/計數(shù)器溢出時(從0xFFFF加1到0x0000),PCA0MD中的CF置1,如果允許CF中斷,則可以產(chǎn)生一個中斷請求。PCA0MD中的ECF位置1即可允許CF中斷,但要使CF中斷得到響應(yīng),必須先總體允許PCA0中斷(通過將EA位(IE.7)和EPCA0位(EIE1.3)置1可總體允許PCA0中斷)。CF位不能由硬件自動清除,必須用軟件清0。PCA0中斷配置的詳細(xì)信息如圖4-11所示。清除PCA0MD寄存器中的CIDL位則允許PCA在微控制器內(nèi)核處于等待方式時繼續(xù)正常工作。第56頁,共185頁,2023年,2月20日,星期四PCA定時器/計數(shù)器將PCA0MD中的ECF位置1即可允許CF中斷各模塊中斷控制總控開關(guān)第57頁,共185頁,2023年,2月20日,星期四PCA捕捉/比較模塊
5個捕捉/比較模塊都可獨立工作在六種工作方式(由PCA0CPMn設(shè)置),如下表所示:PWM16ECOMCAPPCAPNMATTOGPWM工作方式XX10000用CEXn的正沿觸發(fā)捕捉XX01000用CEXn的負(fù)沿觸發(fā)捕捉XX11000用CEXn的電平改變觸發(fā)捕捉X100100軟件定時器X100110高速輸出X100X11頻率輸出0100X018位脈沖寬度調(diào)制器1100X0116位脈沖寬度調(diào)制器第58頁,共185頁,2023年,2月20日,星期四1.邊沿觸發(fā)的捕捉方式CEXn引腳上有效的電平變化(CEXn輸入信號的高、低電平至少要持續(xù)兩個系統(tǒng)時鐘周期)可以捕捉PCA0定時/計數(shù)器的值,將其裝入到對應(yīng)模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)進(jìn)行比較。當(dāng)發(fā)生匹配時,PCA0CN中的捕捉/比較標(biāo)志(CCFn)置1,如果允許CCF中斷,則可產(chǎn)生一個中斷請求。CCFn位不能由硬件自動清除,必須用軟件清0。原理框圖如圖4-12所示。第59頁,共185頁,2023年,2月20日,星期四1.邊沿觸發(fā)的捕捉方式正/負(fù)跳變捕捉中斷捕捉第60頁,共185頁,2023年,2月20日,星期四2.軟件定時(比較)器方式
置1PCA0CPMn寄存器中的ECOMn和MATn位可將PCA0設(shè)置在軟件定時器方式。該方式將PCA0定時/計數(shù)器與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)進(jìn)行比較。匹配時,PCA0CN中的捕捉/比較標(biāo)志(CCFn)置1,如果允許CCF中斷,則可產(chǎn)生一個中斷請求。CCFn位不能由硬件自動清除,必須用軟件清0。注意:向PCA0的捕捉/比較寄存器寫入一個16位值時,應(yīng)先寫低字節(jié),后寫高字節(jié)。對PCA0CPLn的寫入操作將清ECOMn位;PCA0CPHn寫入時將置1ECOMn位。原理框圖如圖4-13所示。第61頁,共185頁,2023年,2月20日,星期四2.軟件定時(比較)器方式寫PCA0CPLn
、PCA0CPHn對ECOMn的影響匹配允許開關(guān)中斷比較第62頁,共185頁,2023年,2月20日,星期四3.高速輸出方式
該方式下,每當(dāng)PCA的計數(shù)器與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)發(fā)生匹配時,模塊的CEXn引腳上的邏輯電平將發(fā)生改變。置1PCA0CPMn寄存器中的TOGn、MATn和ECOMn位可將PCA0設(shè)置為該方式。與軟件定時器方式一樣應(yīng)注意,當(dāng)向PCA0的捕捉/比較寄存器寫入一個16位數(shù)值時,應(yīng)先寫低字節(jié),后寫高字節(jié)。原理框圖如圖4-14所示。第63頁,共185頁,2023年,2月20日,星期四3.高速輸出方式同上設(shè)置此3位即為該方式匹配后電平發(fā)生改變第64頁,共185頁,2023年,2月20日,星期四4.頻率輸出方式
該方式在對應(yīng)的CEXn引腳產(chǎn)生可編程頻率的方波。捕捉/比較寄存器的高字節(jié)保持著輸出電平改變前要計的PCA時鐘數(shù)。所產(chǎn)生的方波的頻率由下式定義:
FPCA是由PCA方式寄存器PCA0MD中的GPS2-0位選擇的PCA時鐘頻率。第65頁,共185頁,2023年,2月20日,星期四4.頻率輸出方式捕捉/比較模塊的低字節(jié)與PCA0計數(shù)器的低字節(jié)比較,兩者匹配時,CEXn的電平發(fā)生改變,高字節(jié)中的偏移值加到PCA0CPLn。注意:在該方式下如果允許模塊匹配(CCFn)中斷,則發(fā)生中斷的速率為2FCEXn。置位PCA0CPMn寄存器中ECOMn、TOGn和PWMn位可將PCA0設(shè)置為頻率輸出方式。第66頁,共185頁,2023年,2月20日,星期四4.頻率輸出方式匹配時,電平改變,PCA0CPHn加到PCA0CPLn第67頁,共185頁,2023年,2月20日,星期四5.8位脈寬調(diào)制器方式
該方式下,每個模塊都可以獨立地產(chǎn)生脈寬調(diào)制(PWM)輸出。PWM的頻率取決于PCA0定時/計數(shù)器的計數(shù)時鐘源。使用模塊的捕捉/比較寄存器PCA0CPLn可以改變PWM輸出信號的占空比。當(dāng)PCA0定時器/計數(shù)器的低字節(jié)(PCA0L)與PCA0CPLn中的值相等時,CEXn輸出高電平,當(dāng)PCA0L中的計數(shù)值溢出時,CEXn輸出低電平。當(dāng)定時器/計數(shù)器的低字節(jié)PCA0L溢出時(從0xFF到0x00),保存在PCA0CPHn中的值自動裝入PCA0CPLn,不需軟件干預(yù)。置1PCA0CPMn寄存器中的ECOMn和PWMn位可將PCA0設(shè)置為8位脈沖寬度調(diào)制器方式。第68頁,共185頁,2023年,2月20日,星期四5.8位脈寬調(diào)制器方式8位PWM方式的占空比由下面方程給出:
可見,最大占空比為100%(PCA0CPHn=0),最小占空比為0.39%(PCA0CPHn=0xFF)??梢酝ㄟ^清0ECOMn位產(chǎn)生0%的占空比。第69頁,共185頁,2023年,2月20日,星期四5.8位脈寬調(diào)制器方式匹配時置1溢出時置0并將PCA0CPHn裝入PCA0CPLn第70頁,共185頁,2023年,2月20日,星期四6.16位脈寬調(diào)制器方式16位方式,其余與8位方式相同第71頁,共185頁,2023年,2月20日,星期四PCA特殊功能寄存器1、PCA控制寄存器PCA0CNCCF0CCF1CCF2CCF3CCF4-CRCF字節(jié)地址D8H
D7D6D5D4D3D2D1D0位7(CF):PCA定時器/計數(shù)器溢出標(biāo)志位PCA0定時/計數(shù)器溢出時由硬件置位。如允許CF中斷,將使CPU轉(zhuǎn)向CF中斷服務(wù)程序。不能由硬件自動清0,必須用軟件清0。位6(CR):PCA0定時/計數(shù)器運行控制位0:停止計數(shù)1:啟動計數(shù)位5:未用。讀=0b,寫=忽略。位4-位0(CCF4-CCF0):PCA0模塊4-模塊0捕捉/比較標(biāo)志位匹配或捕捉時由硬件置位。允許CCF中斷時,將使CPU轉(zhuǎn)向CCF中斷服務(wù)程序。不能由硬件自動清0,必須用軟件清0。第72頁,共185頁,2023年,2月20日,星期四2、PCA0方式選擇寄存器PCA0MD位7(CIDL):PCA0定時/計數(shù)器等待控制位0:當(dāng)CPU處于等待方式時,PCA0繼續(xù)正常工作。1:當(dāng)CPU處于等待方式時,PCA0停止工作。位6-4:未用。讀=000b,寫=忽略。位3-1(CPS2-CPS0):PCA0定時器/計數(shù)器計數(shù)時鐘源選擇位這些位選擇PCA0計數(shù)器的計數(shù)時鐘源,如表4-5所示。位0(ECF)PCA0定時器/計數(shù)器溢出中斷允許位0:禁止CF中斷。1:允許CF中斷。ECFCPS0CPS1CPS2---CIDL字節(jié)地址D9H
D7D6D5D4D3D2D1D0第73頁,共185頁,2023年,2月20日,星期四3、PCA0捕捉/比較寄存器PCA0CPMn
PCA0CPMn地址:
PCA0CPM0=0xDA(n=0)、PCA0CPMl=0xDB(n=1)PCA0CPM2=0xDC(n=2)、PCA0CPM3=0xDD(n=3)PCA0CPM4=0xDE(n=4)位7:PWMl6n:16位脈沖寬度調(diào)制允許位當(dāng)工作在脈沖寬度調(diào)制方式時(PWMn=1),該位選擇16位PWM方式。
0:選擇8位PWM。1:選擇16位PWM。ECCFnPWMnTOGnMATnCAPNnCAPPnECOMnPWM16n字節(jié)地址0DA-0DEH
D7D6D5D4D3D2D1D0第74頁,共185頁,2023年,2月20日,星期四位6(ECOMn):比較器功能允許位0:禁止。1:允許。位5(CAPPn):正沿捕捉功能允許位0:禁止。1:允許。位4(CAPNn):負(fù)沿捕捉功能允許位0:禁止。1:允許。位3(MATn):匹配功能允許位0:禁止。1:允許。位2(TOGn):電平切換功能允許位
0:禁止。1:允許。位1(PWMn):脈寬凋制方式允許位
0:禁止。1:允許。位0(ECCFn):捕捉/比較標(biāo)志中斷允許位0:禁止CCFn中斷1:當(dāng)CCFn位置1時,允許捕捉/比較標(biāo)志的中斷請求。3、PCA0捕捉/比較寄存器PCA0CPMn
第75頁,共185頁,2023年,2月20日,星期四PCA應(yīng)用舉例例4.4
對液體流量進(jìn)行測量的流量計是通過對脈沖進(jìn)行計數(shù)實現(xiàn)的,某應(yīng)用系統(tǒng)中需要對2路液體的流量進(jìn)行測量。系統(tǒng)中使用PCA0工作在上升沿捕捉方式對脈沖進(jìn)行計數(shù),試編寫實現(xiàn)該功能的程序。解:實現(xiàn)該功能的程序如下:#include"c8051f020.h"unsignedlongxdataPlus_NUM[2]={0x0l,0x0l};//用于脈沖計數(shù)voidPORT_Init(void) //端口初始化{ XBR0=0x10; //CEX0、CEX1配置到P0.0、0.1 XBR2=0x40; //允許交叉開關(guān)
P0MDOUT=0x00; //P0為開漏輸出
}第76頁,共185頁,2023年,2月20日,星期四PCA應(yīng)用舉例voidSYSCLK_Init(void) //時鐘初始化{inti; OSCXCN=0x67;//外部晶振22.1184MHz for(i=0;i<256;i++); //延時
while(!(OSCXCN&0x80));//等待外部晶振穩(wěn)定
OSCICN=0x88;//選擇外部晶振作系統(tǒng)時鐘源,允許時鐘丟失檢測
}voidInit_PCA0(void) //PCA0初始化{PCA0MD=0x08; //PCA0采用系統(tǒng)時鐘,禁止PCA0溢出中斷
EIE1|=0x08; //允許PCA0中斷
PCA0CPM0=0x21; //模塊0上升沿中斷允許
PCA0CPM1=0x21; //模塊1CR=0; //關(guān)PCA0}第77頁,共185頁,2023年,2月20日,星期四PCA應(yīng)用舉例voidPCA0_ISR(void)interrupt9//PCA0中斷服務(wù)程序{EA=0; //關(guān)中斷
if(CCF0==1) //模塊0對第一路液體脈沖計數(shù)
{ CCF0=0; //清CCF中斷標(biāo)志
Plus_NUM[0]++; //脈沖計數(shù)
} if(CCF1==1) //模塊1{ CCF1=0;Plus_NUM[1]++; } EA=1; //開中斷}第78頁,共185頁,2023年,2月20日,星期四PCA應(yīng)用舉例voidmain(void) //主程序{ WDTCN=0xde; //關(guān)看門狗
WDTCN=0xad; SYSCLK_Init(); //初始化時鐘
PORT_Init(); //初始化IO口
Init_PCA0(); //初始化PCA0 CR=1; //啟動PCA0 EA=1; //開中斷
while(1); //等待中斷}
第79頁,共185頁,2023年,2月20日,星期四UART通信接口C8051F具有豐富的串行通信接口。包括2個UART通信接口、一個與I2C兼容的SMBus接口和一個SPI接口。UART串行接口是全雙工串行通信接口,即能同時進(jìn)行串行發(fā)送和接收。它可以作UART(通用異步接收和發(fā)送器)用,也可以作同步位移寄存器用。應(yīng)用UART串行接口可以實現(xiàn)C8051F單片機系統(tǒng)之間點對點的單機通信、多機通信以及C8051F與系統(tǒng)機(如IBM-PC機等)的單機或多機通信。第80頁,共185頁,2023年,2月20日,星期四4.3.1串行通信及基礎(chǔ)知識
1.?dāng)?shù)據(jù)通信的概念
并行通信和串行通信并行通信是指數(shù)據(jù)的各位同時進(jìn)行傳送(發(fā)送或接收)的通信方式。其優(yōu)點是傳遞速度快;缺點是數(shù)據(jù)有多少位,就需要多少根傳送線。并行通信在位數(shù)多、傳送距離又遠(yuǎn)時就不太適宜。串行通信指數(shù)據(jù)是一位一位按順序傳送的通信方式,它的突出優(yōu)點是只需一對傳送線(利用電話線就可作為傳送線),這樣就大大降低了傳送成本,特別適用于遠(yuǎn)距離通信。其缺點是傳送速度較低。第81頁,共185頁,2023年,2月20日,星期四2.串行通信的傳送方向
三種:一種為單工(或單向)配置,只允許數(shù)據(jù)向一個方向進(jìn)行傳送;另一種是半雙工(或半雙向)配置,允許數(shù)據(jù)向兩個方向中的任何一個方向傳送,但一次只能有一個發(fā)送,一個接收;第三種傳送方式是全雙工(或全雙向)配置,允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單工配置,它要求兩端的通信設(shè)備都具有完整和獨立的發(fā)送和接收能力。第82頁,共185頁,2023年,2月20日,星期四3.異步通信和同步通信
(1)異步通信異步通信用起始位0表示字符的開始,然后從低位到高位逐位傳送數(shù)據(jù),最后用停止位1表示字符結(jié)束,如圖4-18所示。一個字符又稱一幀信息。圖4-18a中,一幀信息包括1位起始位、8位數(shù)據(jù)位和1位停止位,圖4-18b中,數(shù)據(jù)位增加到9位。在C8051F單片機系統(tǒng)中,第9位數(shù)據(jù)D8可以用作奇偶校驗位,也可以用作地址/數(shù)據(jù)幀的標(biāo)識位,D8=1表示該幀信息傳送的是地址,D8=0表示傳送的是數(shù)據(jù)。兩幀信息之間可以無間隔,也可以有間隔,且間隔時間可任意改變,間隔用空閑位“1”來填充。第83頁,共185頁,2023年,2月20日,星期四異步通信
圖4-18異步通信數(shù)據(jù)格式
第84頁,共185頁,2023年,2月20日,星期四(2)同步通信
在同步通信中,每一數(shù)據(jù)塊開頭時發(fā)送一個或兩個同步字符,使發(fā)送與接收雙方取得同步。數(shù)據(jù)塊的各個字符間取消了起始位和停止位,所以通信速度得以提高,如圖4-19所示。同步通信時,如果發(fā)送的數(shù)據(jù)塊之間有間隔時間,則發(fā)送同步字符填充。
圖4-19同步通信數(shù)據(jù)格式
第85頁,共185頁,2023年,2月20日,星期四
串行接口的組成和特性
1.UART的組成C8051F的UART可以實現(xiàn)同時發(fā)送和接收數(shù)據(jù)的全雙工通信。串行口的內(nèi)部有獨立的數(shù)據(jù)接收緩沖器和數(shù)據(jù)發(fā)送緩沖器。這兩個數(shù)據(jù)緩沖器都用符號SBUF0來表示(UART1的數(shù)據(jù)緩沖器用SBUF1表示)的,地址都是99H(SBUF1的地址是F2H)。CPU對特殊功能寄存器SBUF0或SBUF1執(zhí)行寫操作,就是將數(shù)據(jù)寫入發(fā)送緩沖器;對SBUF0或SBUF1的讀操作,就是讀出接收緩沖器的內(nèi)容。第86頁,共185頁,2023年,2月20日,星期四1.UART的組成UART的原理框圖如圖4-20所示。由原理圖可知,發(fā)送電路由發(fā)送SBUF、零檢測器和發(fā)送控制器等組成。接收電路由接收SBUF、接收移位寄存器和接收控制器等組成。除發(fā)送和接收電路以外,還有波特率發(fā)生器、錯誤校驗電路、多機通信控制電路和交叉開關(guān)等組成,交叉開關(guān)可將接收與發(fā)送引腳配置到P0到P3的任意口線。
第87頁,共185頁,2023年,2月20日,星期四UART的組成—發(fā)送部分寫SBUF有三個作用發(fā)送結(jié)束,置TI標(biāo)志第88頁,共185頁,2023年,2月20日,星期四UART的組成—接收部分起始位檢測接收完一字節(jié),裝SBUFRB8=1時,檢測地址,多機通信第89頁,共185頁,2023年,2月20日,星期四2.串行口控制寄存器SCON位7-5:該三位的功能由PCON中的SSTAT0位決定SSTAT0=1時,用于UART0的出錯狀態(tài)指示位。FE0=1為幀格式錯,即收到的停止位為0;RXOV0=1為接收覆蓋錯誤,即前一個字節(jié)還沒有取走,接收器又鎖存了一個新字節(jié);TXCOL0=1為發(fā)送沖突錯誤,即前一個字節(jié)還沒有發(fā)送完又往SBUF寫入一新字節(jié)。SSTAT0=0時,SM00、SM10按表4-7選擇UART0的工作方式。
RI0
TI0
RB80
TB80
REN0
SM20/TXCOL0
SM10/RXOV0
SM00/FE0字節(jié)地址98H
D7D6D5D4D3D2D1D0第90頁,共185頁,2023年,2月20日,星期四2.串行口控制寄存器SCONSM00SM10方式功能說明000同步方式(擴展移位寄存器方式,用于I/O口擴展),波特率固定(fosc/12)0118位UART,波特率可變(由T1或T2溢出率決定)1029位UART,波特率固定(fosc/64或fosc/32)1139位UART,波特率可變(由T1或T2溢出率決定)表4-7UART0的方式選擇位
第91頁,共185頁,2023年,2月20日,星期四2.串行口控制寄存器SCONSM20為多處理器通信允許位方式0時該位無作用。方式1時用于檢查有效停止位。0:忽略對停止位的檢測。1:只有接收到有效的停止位時才置位RI0。方式2和方式3時為多機通信允許位0:忽略對第九位的檢測。1:只有當(dāng)?shù)诰盼粸椤?”并且接收到的地址與UART0的地址或廣播地址匹配時才置位RI0并產(chǎn)生中斷。
第92頁,共185頁,2023年,2月20日,星期四2.串行口控制寄存器SCON位4(REN0):接收允許位0:禁止UART0接收1:允許UART0接收位3(TB80):第9發(fā)送位對于方式2和方式3,是發(fā)送的第9位數(shù)據(jù)??筛鷵?jù)需要時由軟件置位或復(fù)位。在方式0和1中未用。位2(RB80):第9接收位對于方式2和方式3,是接收到的第9位數(shù)據(jù)。對于方式1,如SM20=0,RB80是接收到的停止位。對于方式0,不使用RB80。第93頁,共185頁,2023年,2月20日,星期四2.串行口控制寄存器SCON位1(TI0):發(fā)送中斷標(biāo)志位由硬件在方式0串行發(fā)送第8位結(jié)束時置位,或在其它方式串行發(fā)送停止位的開始時置位。當(dāng)允許UART0中斷時,置1該位將使CPU轉(zhuǎn)到UART0中斷服務(wù)程序。該位必須由軟件清0。位0(RI0):接收中斷標(biāo)志位由硬件在方式0接收到第8位結(jié)束時置位,或在其它方式接收到停止位的中間時置位。當(dāng)允許UART0中斷時,置1該位將使CPU轉(zhuǎn)到UART0中斷服務(wù)程序。該位必須由軟件清0。
第94頁,共185頁,2023年,2月20日,星期四3.特殊功能寄存器PCON
位7(SMOD0):UART0波特率系數(shù)控制位0:UART0的波特率不加倍。1:UART0的波特率加倍。位6(SSTAT0):UART0增強狀態(tài)方式選擇位0:讀/寫SCON0.5~7時訪問UART0方式設(shè)置位SM20-SM00。1:讀/寫SCON0.5~7時訪問幀格式錯誤(FE0)、接收覆蓋錯誤(RXOV0)和發(fā)送沖突錯誤(TXCOL0)狀態(tài)位。IDLE
STOP
-
SSTAT1
SMOD1
-
SSTAT0
SMOD0
字節(jié)地址87H
D7D6D5D4D3D2D1D0第95頁,共185頁,2023年,2月20日,星期四3.特殊功能寄存器PCON位5:保留。讀出值無定義,必須寫入0。位4(SMOD1):UART1波特率系數(shù)控制位0:UART1的波特率不加倍。1:UART1的波特率加倍。位3(SSTAT1):UART1增強狀態(tài)方式選擇。0:讀/寫SCON1.5~7時訪問UART1方式設(shè)置位SM21-SM01。1:讀/寫SCON1.5~7時訪問幀格式錯誤(FE1)、接收覆蓋錯誤(RXOV1)和發(fā)送沖突錯誤(TXCOL1)狀態(tài)位。位2:保留。讀出值無定義,必須寫入0。位1-位0:見2.6節(jié)電源管理方式。第96頁,共185頁,2023年,2月20日,星期四串行接口的工作方式
1.方式0
方式0是擴展移位寄存器的工作方式,用以擴展并行I/O接口。串行發(fā)送,發(fā)送SBUF相當(dāng)于一個并入串出移位寄存器,由C8051F的內(nèi)部總線并行接收8位數(shù)據(jù),并從RXD線串行輸出。串行接收,接收SBUF相當(dāng)于一個串入并出的移位寄存器,從RXD線接收一幀串行數(shù)據(jù),并把它并行地送到內(nèi)部總線。由RXD串行輸入/輸出數(shù)據(jù),TXD輸出移位脈沖。波特率固定為fosc/12
。
第97頁,共185頁,2023年,2月20日,星期四(1)方式0輸出
串口外接74LSl64串入并出移位寄存器的接口邏輯如圖4-21所示。TXD輸出移位脈沖,RXD輸出數(shù)據(jù)移入74LSl64。CPU寫發(fā)送SBUF,啟動串行口從低位開始發(fā)送,經(jīng)過8個發(fā)送周期,發(fā)送SBUF的內(nèi)容移入74LSl64,并置位TI,完成一字節(jié)輸出。若fosc=12MHz,則串行輸出一位的時間是1μs,傳輸一個字節(jié)需8μs。從低位開始串行輸出,數(shù)據(jù)的低位在右高位在左,在具體應(yīng)用中應(yīng)加以注意。方式0輸出時,可以串接多個移位寄存器。第98頁,共185頁,2023年,2月20日,星期四(1)方式0輸出圖4-21
第99頁,共185頁,2023年,2月20日,星期四(1)方式0輸出74LS16474LS164真值表第100頁,共185頁,2023年,2月20日,星期四例4-5編程使下圖中L0~L3、L8、L10、L12、L14亮,其余滅MRMR解SCON0=0x00;//UART0初始化,方式0,禁止接收SBUF0=0x0f;//發(fā)送一字節(jié)while(!TI0);//等待發(fā)送完畢TI0=0;//清除發(fā)送結(jié)束標(biāo)志SBUF0=0x55;//繼續(xù)發(fā)下一字節(jié)while(!TI0);TI0=0;……;//其他操作(1)方式0輸出舉例第101頁,共185頁,2023年,2月20日,星期四(2)方式0輸入
方式0輸入,RXD--數(shù)據(jù)輸入線,TXD--移位脈沖,串行口與外接的并入串出的移位寄存器74LSl66的接口邏輯如圖4-23所示。
圖4-23方式0輸入時移位寄存器的連接第102頁,共185頁,2023年,2月20日,星期四74LS165并入串出移位寄存器(74LS166與之類似)74LS16574LS165真值表(2)方式0輸入舉例第103頁,共185頁,2023年,2月20日,星期四
例:根據(jù)下圖編寫程序,當(dāng)開關(guān)K合上時,采集8位開關(guān)量,根據(jù)開關(guān)的不同狀態(tài)進(jìn)行不同處理。(2)方式0輸入舉例第104頁,共185頁,2023年,2月20日,星期四程序如下:
START:JBP1.0,$;開關(guān)K未合上,等待
CLRP1.1;74LS165并行輸入數(shù)據(jù)
SETBP1.1;開始串行移位
MOVSCON,#10H;串行口方式0并啟動接收
JNBRI,$CLRRIMOVA,SBUF;輸入數(shù)據(jù);根據(jù)A處理不同任務(wù)
SJMPSTART;準(zhǔn)備下一次接收。
…(2)方式0輸入舉例第105頁,共185頁,2023年,2月20日,星期四2.方式1方式1是8位異步串行通信方式,TXD為數(shù)據(jù)輸出線,RXD為數(shù)據(jù)輸入線。傳送一幀信息的數(shù)據(jù)格式如下圖所示,一幀為10位:1位起始位,8位數(shù)據(jù)位(先低位后高位)和1位停止位。第106頁,共185頁,2023年,2月20日,星期四2.方式1(1)方式1輸出CPU向發(fā)送SBUF寫入一個數(shù)據(jù),即啟動發(fā)送,從TXD端輸出一幀信息,先發(fā)送起始位0,接著從低位開始依次輸出8位數(shù)據(jù),最后輸出停止位1,并置1發(fā)送中斷標(biāo)志TI。CPU查詢TI=1后,清TI,再向SBUF寫入數(shù)據(jù),啟動下一字符發(fā)送。也可以采用中斷方式,TI=1時向CPU產(chǎn)生中斷請求。第107頁,共185頁,2023年,2月20日,星期四(2)方式1輸入REN置1允許接收器接收。接收器以所選波特率的16倍的速率采樣RXD端的電平。當(dāng)檢測到RXD端輸入電平發(fā)生負(fù)跳變時,復(fù)位內(nèi)部的十六分頻計數(shù)器。計數(shù)器的16個狀態(tài)把傳送一位數(shù)據(jù)的時間分為16等分,在每位中心,即7、8、9這三個計數(shù)狀態(tài),位檢測器采樣RXD的輸入電平,接收的值是三次采樣中至少是兩次相同的值,這樣處理可以防止干擾。如果在第1位時間接收到的值(起始位)不是0,則起始位無效,復(fù)位接收電路,重新搜索RXD端上的負(fù)跳變。接收到停止位為1時,將接收到的8位數(shù)據(jù)裝入接收數(shù)據(jù)緩沖器SBUF,置位RI,供CPU查詢或向CPU請求中斷。第108頁,共185頁,2023年,2月20日,星期四3.方式2和方式3
方式2和方式3是9位異步串行通信方式,TXD為數(shù)據(jù)發(fā)送端,RXD為數(shù)據(jù)接收端。方式2的波特率固定為振蕩器頻率的1/64或1/32,而方式3的波特率由定時器T1或T2的溢出率確定(UART1方式3的波特率由定時器T1或T4的溢出率確定)。在方式2和方式3中,一幀信息為11位:1位起始位,8位數(shù)據(jù)位(先低位后高位),1位附加的第9位數(shù)據(jù)(發(fā)送時為SCON中的TB8,接收時為SCO
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 刀具進(jìn)口合同范本
- 出租鋼管書架合同范本
- 2025年吉林貨運從業(yè)資格證怎么考試
- 代租場地合同范本
- 公路施工項目合同范本
- 農(nóng)田收回合同范本
- 北京市合同范本密碼
- 亞馬遜員工合同范本
- 制作推廣合同范本
- rpo服務(wù)合同范本
- 2024中智集團(tuán)招聘重要崗位高頻難、易錯點500題模擬試題附帶答案詳解
- 高鈣血癥護(hù)理查房課件
- 《2024版 CSCO非小細(xì)胞肺癌診療指南》解讀
- 圍填海項目生態(tài)保護(hù)修復(fù)方案編制技術(shù)指南(試行)
- 2024年工業(yè)和信息化部應(yīng)急通信保障中心招聘高頻500題難、易錯點模擬試題附帶答案詳解
- 物體打擊傷亡事故應(yīng)急處置卡
- 2024-2030年中國飛機AFP和ATL復(fù)合材料行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 《祝?!饭_課一等獎創(chuàng)新教學(xué)設(shè)計 統(tǒng)編版高中語文必修下冊-1
- 20兆瓦光伏漁光互補電站項目可行性研究報告
- 新疆維吾爾自治區(qū)2024年中考英語真題【附真題答案】
- 七年級英語上冊(人教版2024)新教材解讀課件
評論
0/150
提交評論