單片機(jī)部分內(nèi)功能部件介紹_第1頁(yè)
單片機(jī)部分內(nèi)功能部件介紹_第2頁(yè)
單片機(jī)部分內(nèi)功能部件介紹_第3頁(yè)
單片機(jī)部分內(nèi)功能部件介紹_第4頁(yè)
單片機(jī)部分內(nèi)功能部件介紹_第5頁(yè)
已閱讀5頁(yè),還剩175頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)部分內(nèi)功能部件介紹第1頁(yè),共185頁(yè),2023年,2月20日,星期四定時(shí)器/計(jì)數(shù)器

定時(shí)和計(jì)數(shù)功能最終都是通過(guò)計(jì)數(shù)實(shí)現(xiàn)的,若計(jì)數(shù)的事件源是周期固定的脈沖,則可以實(shí)現(xiàn)定時(shí)功能,否則只能實(shí)現(xiàn)計(jì)數(shù)功能。因此可以將定時(shí)和計(jì)數(shù)功能由一個(gè)部件實(shí)現(xiàn)。實(shí)現(xiàn)定時(shí)和計(jì)數(shù)的方法一般有軟件、專(zhuān)用硬件電路和可編程定時(shí)器/計(jì)數(shù)器三種方法。采用軟件只能定時(shí),且占用CPU時(shí)間,降低了CPU的使用效率。專(zhuān)用硬件電路可實(shí)現(xiàn)精確的定時(shí)和計(jì)數(shù),但參數(shù)調(diào)節(jié)不便。可編程定時(shí)器/計(jì)數(shù)器,不占用CPU時(shí)間,能與CPU并行工作,實(shí)現(xiàn)精確的定時(shí)和計(jì)數(shù),又可以通過(guò)編程設(shè)置其工作方式和其它參數(shù),因此使用方便。

第2頁(yè),共185頁(yè),2023年,2月20日,星期四定時(shí)器/計(jì)數(shù)器C8051F020內(nèi)部有T0~T4共5個(gè)16位定時(shí)器/計(jì)數(shù)器,其中T0~T2與MCS-51中的定時(shí)器/計(jì)數(shù)器兼容,還有兩個(gè)16位自動(dòng)重裝初值的定時(shí)器T3

和T4既可以作為通用定時(shí)器使用,也可以用于ADC和SMBus。

表4-1C8051F020定時(shí)器/計(jì)數(shù)器的工作方式

第3頁(yè),共185頁(yè),2023年,2月20日,星期四4.1.1定時(shí)器的一般結(jié)構(gòu)和工作原理

方式選擇計(jì)數(shù)器定時(shí)器啟/停控制執(zhí)行機(jī)構(gòu)減1計(jì)數(shù):如Intel8253加1計(jì)數(shù):如T0~T4溢出標(biāo)志查詢(xún)中斷第4頁(yè),共185頁(yè),2023年,2月20日,星期四最大定時(shí)時(shí)間TMAX=2n×T計(jì)數(shù)式中n由工作方式?jīng)Q定,T計(jì)數(shù)為定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)脈沖周期時(shí)間,由C8051F的主脈沖或主脈沖經(jīng)12分頻提供,是否需要12分頻取決于對(duì)時(shí)鐘控制寄存器CKCON的設(shè)定(提供12分頻選項(xiàng)是為了與標(biāo)準(zhǔn)8051兼容)。

T0~T4均為加1計(jì)數(shù)器第5頁(yè),共185頁(yè),2023年,2月20日,星期四時(shí)鐘控制寄存器CKCON位7:未用。讀=0b,寫(xiě)=忽略。位6-3:T4M-T0M:T4到T0的時(shí)鐘選擇(不包含T3,T3的時(shí)鐘選擇由T3控制寄存器TMR3CN的第0位T3XCLK決定)。

0:定時(shí)器按系統(tǒng)時(shí)鐘的12分頻計(jì)數(shù)

1:定時(shí)器按系統(tǒng)時(shí)鐘頻率計(jì)數(shù)位2-0:保留。讀=000b,寫(xiě)入值必須是000b。

第6頁(yè),共185頁(yè),2023年,2月20日,星期四1.定時(shí)、計(jì)數(shù)方式

定時(shí)方式:每一個(gè)計(jì)數(shù)周期(T計(jì)數(shù))計(jì)數(shù)器加1,直至計(jì)滿(mǎn)溢出(從全1到全0)產(chǎn)生中斷請(qǐng)求。對(duì)于一個(gè)N位的加1計(jì)數(shù)器,若T計(jì)數(shù)是已知的,則從初值a開(kāi)始加1計(jì)數(shù)至溢出所占用的時(shí)間為:當(dāng)N=8、a=0時(shí),最大定時(shí)時(shí)間為:T=256×T計(jì)數(shù)計(jì)數(shù)方式:外部輸入信號(hào)的下降沿觸發(fā)計(jì)數(shù),計(jì)數(shù)器在每個(gè)時(shí)鐘周期或時(shí)鐘周期的12分頻采樣外部輸入信號(hào),若一個(gè)周期的采樣值為1,下一個(gè)周期的采樣值為0,則計(jì)數(shù)器加1,故識(shí)別一個(gè)從1到0的跳變需2個(gè)周期,所以,對(duì)外部輸入信號(hào)最高的計(jì)數(shù)速率是時(shí)鐘頻率的1/2或1/24(取決于是否12分頻)。同時(shí),外部輸入信號(hào)的高電平與低電平保持時(shí)間均需大于一個(gè)周期。第7頁(yè),共185頁(yè),2023年,2月20日,星期四定時(shí)器/計(jì)數(shù)器T0和T1

對(duì)定時(shí)器/計(jì)數(shù)器T0和T1的訪問(wèn)和控制是通過(guò)操作SFR實(shí)現(xiàn)的。T0和T1都是16位的加1計(jì)數(shù)器,訪問(wèn)時(shí)以?xún)蓚€(gè)字節(jié)的形式出現(xiàn):TL0+TH0、TL1+TH1TCON用于允許/禁止定時(shí)器0和定時(shí)器1并指示它們的工作狀態(tài)。T0和T1都有四種工作方式,可以TMOD中的方式選擇位M1-M0進(jìn)行選擇。第8頁(yè),共185頁(yè),2023年,2月20日,星期四1、方式寄存器TMOD

T0M0T0M1C/T0GATE0T1M0T1M1C/T1GATE1TMOD字節(jié)地址89HD7D6D5D4D3D2D1D0控制T0控制T1方式選擇00:方式001:方式110:方式211:方式3定時(shí)/計(jì)數(shù)選擇0:定時(shí)器1:計(jì)數(shù)器門(mén)控位第9頁(yè),共185頁(yè),2023年,2月20日,星期四2、控制寄存器TCON

IT0IE0IT1IE1TR0TF0TR1TF1TCON字節(jié)地址88H

D7D6D5D4D3D2D1D0控制外部中斷控制T1、T0啟/停控制GATE=0時(shí)O:停1:?jiǎn)⒁绯鰳?biāo)志1:溢出0:不溢出第10頁(yè),共185頁(yè),2023年,2月20日,星期四3.T0和T1的工作方式和計(jì)數(shù)器結(jié)構(gòu)

表4-2定時(shí)器T0、T1的工作方式第11頁(yè),共185頁(yè),2023年,2月20日,星期四(1)工作方式0

13位計(jì)數(shù)器啟/??刂芓R0=1啟動(dòng)計(jì)數(shù)GATE0=0時(shí):GATE0=1時(shí):TR0=1且INT0=1啟動(dòng)計(jì)數(shù)時(shí)基選擇定時(shí)/計(jì)數(shù)選擇第12頁(yè),共185頁(yè),2023年,2月20日,星期四(1)工作方式0若T0工作于方式0的定時(shí)器模式,計(jì)數(shù)初值為a,則T0從初值a加1計(jì)數(shù)至溢出所需的時(shí)間為:

式中fOSC為系統(tǒng)時(shí)鐘頻率,T0M為T(mén)0的時(shí)鐘選擇位。如果fOSC=12MHz,則T0M=0時(shí),T=(213-a)μs;T0M=1時(shí),T=(213-a)/12μs。第13頁(yè),共185頁(yè),2023年,2月20日,星期四(2)工作方式1和方式0的差別僅僅在于計(jì)數(shù)器的位數(shù)不同,方式1為16位的定時(shí)器/計(jì)數(shù)器。T0工作于方式1時(shí),由TH0作為高8位,TL0作為低8位,構(gòu)成一個(gè)16位計(jì)數(shù)器。若T0工作于方式1定時(shí),計(jì)數(shù)初值為a,fOSC=12MHz,則T0從計(jì)數(shù)初值a加1計(jì)數(shù)到溢出的定時(shí)時(shí)間為:

T=(216-a)μs或T=(216-a)/12μs。第14頁(yè),共185頁(yè),2023年,2月20日,星期四(3)工作方式28位自動(dòng)重裝初值第15頁(yè),共185頁(yè),2023年,2月20日,星期四(3)工作方式2適用于需要重復(fù)定時(shí)或計(jì)數(shù)的場(chǎng)合。定時(shí)精度比較高,但定時(shí)時(shí)間較短。定時(shí)時(shí)間可用下式計(jì)算:

第16頁(yè),共185頁(yè),2023年,2月20日,星期四(4)工作方式3只適用于T0,若T1設(shè)置為方式3,則停止計(jì)數(shù)。

兩個(gè)獨(dú)立8位計(jì)數(shù)器借用T1的資源第17頁(yè),共185頁(yè),2023年,2月20日,星期四4.T0和T1的初始化

初始化步驟

初始化TMOD根據(jù)需要初始化CKCON裝入初值中斷設(shè)置(IE、IP)啟動(dòng)定時(shí)/計(jì)數(shù)器(TCON)計(jì)數(shù)器方式初值的計(jì)算

TC=M-C

M為計(jì)數(shù)器的模,與工作方式有關(guān),C為需要的計(jì)數(shù)值定時(shí)器方式初值的計(jì)算T=(M-TC)×T計(jì)數(shù)

T計(jì)數(shù)=TCLK或12TCLK

TC=M-T/T計(jì)數(shù)

第18頁(yè),共185頁(yè),2023年,2月20日,星期四4.T0和T1的初始化最大定時(shí)時(shí)間(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頁(yè),共185頁(yè),2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例

例4.1

若fOSC=12MHz,用系統(tǒng)時(shí)鐘的十二分頻作為計(jì)數(shù)源,請(qǐng)計(jì)算定時(shí)2ms所需的初值,并給出初始化程序。解:∵fOSC=12MHz,用系統(tǒng)時(shí)鐘的十二分頻作為計(jì)數(shù)源時(shí),方式2、3的最大定時(shí)時(shí)間只有0.256ms,因此要想獲得2ms的定時(shí)時(shí)間,必須用方式0或方式1。方式0TC=213-2ms/1us=6192=1830H

即:TH0=0C1H;TL0=10H(高三位為0)

方式1TC=216-2ms/1us=63536=F830H

即:TH0=0F8H;TL0=30H第20頁(yè),共185頁(yè),2023年,2月20日,星期四初始化程序

voidT0_mode1_2ms_init(){ CKCON&=0xf7; //T0計(jì)數(shù)源選擇系統(tǒng)脈沖的12分頻

TMOD=0x01; //T0,方式1 TH0=0xf8; //初值

TL0=0x30; TCON|=0x10; //啟動(dòng)T0,可用TR0=1代替

}5.T0和T1的應(yīng)用舉例

第21頁(yè),共185頁(yè),2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例給定時(shí)器賦初值的語(yǔ)句也可以采用如下方法:

TH0=(65536-2000)/256;TL0=(65536-2000)%256;或

TH0=-2000/256;TL0=-2000%256;第22頁(yè),共185頁(yè),2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例例4.2

若fOSC=12MHz,T1工作于方式1,產(chǎn)生50ms的定時(shí)中斷,TF1為高級(jí)中斷源。試編寫(xiě)主程序和中斷服務(wù)程序,使P1.0產(chǎn)生周期為1s的方波。

解:讓P1.0每500ms取反一次即可實(shí)現(xiàn)。定時(shí)器的單次定時(shí)時(shí)間不可能達(dá)到500ms,可讓定時(shí)器多次定時(shí)產(chǎn)生500ms的定時(shí)時(shí)間,如讓T1工作在方式1,單次定時(shí)時(shí)間為50ms,那么T1中斷10次就是500ms的時(shí)間。(1)確定定時(shí)常數(shù)假設(shè)使用fOSC的12分頻作為計(jì)數(shù)源,則T計(jì)數(shù)=12/fOSC

=12/(12×106)=1μs由公式TC=M-T/T計(jì)數(shù),可知TC=216-50×103=15536=3CB0H∴TH1=0x3c,TL0=0xb0。

第23頁(yè),共185頁(yè),2023年,2月20日,星期四5.T0和T1的應(yīng)用舉例(2)初始化程序包括T1初始化和中斷系統(tǒng)初始化,主要是對(duì)IP、IE、CKCON、TCON、TMOD的相應(yīng)位進(jìn)行正確的設(shè)置,并將時(shí)間常數(shù)送入T1。本例中將初始化操作放在主程序中完成,當(dāng)程序規(guī)模較大時(shí),應(yīng)編寫(xiě)單獨(dú)的初始化程序,以利于程序的模塊化設(shè)計(jì)。(3)中斷服務(wù)程序中斷服務(wù)程序除了完成要求的方波產(chǎn)生這一工作之外,還要注意將時(shí)間常數(shù)重新送入T1中,為下一次產(chǎn)生中斷作準(zhǔn)備。第24頁(yè),共185頁(yè),2023年,2月20日,星期四程序清單如下(主程序):

#include<c8051f020.h>sbitP1_0=P1^0;intcount=10; //10次T1中斷為500msvoidmain(void){ CKCON&=0xef; //T1的計(jì)數(shù)源選擇系統(tǒng)脈沖的12分頻

TMOD=0x10; //T1方式1 P1_0=0;TH1=0x3c; //初值

TL1=0xb0;IE|=0x88; //允許T1中斷

IP|=0x08; //TF1中斷為高級(jí)中斷

TCON|=0x20; //啟動(dòng)T1while(1); //死循環(huán),等待中斷,產(chǎn)生方波}第25頁(yè),共185頁(yè),2023年,2月20日,星期四程序清單如下(中斷服務(wù)程序):voidTimer1_ISR(void)interrupt3{TH1=0x3c; //重裝初值

TL1|=0xb0;count--; //中斷計(jì)數(shù)

if(count==0) //500ms到,重賦計(jì)數(shù)初值,P1.0取反

{count=10;P1_0=!P1_0;}}問(wèn)題:為什么用TL1|=0xb0;而非TL1=0xb0?第26頁(yè),共185頁(yè),2023年,2月20日,星期四程序清單如下(查詢(xún)式程序):#include<c8051f020.h> sbitP1_0=P1^0; voidmain() { intcount=10; //10次T1中斷為500ms CKCON&=0xef; //T1的計(jì)數(shù)源選擇系統(tǒng)脈沖的12分頻

TMOD=0x10; //T1方式1 P1_0=0; TR1=1; //啟動(dòng)T1第27頁(yè),共185頁(yè),2023年,2月20日,星期四For(;;) //死循環(huán),產(chǎn)生方波

{TH1=-50000/256; //T1初值

TL1=-50000%256;

Do{}while(!TF1); //查詢(xún)等待TF1置位,

TF1=0;If(count!=0)count--;else{count=10;P1_0=!P1_0;}}}

第28頁(yè),共185頁(yè),2023年,2月20日,星期四定時(shí)器/計(jì)數(shù)器T2

T2為16位定時(shí)/計(jì)數(shù)器,由TL2(低字節(jié))和TH2(高字節(jié))組成。C/T2=0(定時(shí))時(shí),系統(tǒng)時(shí)鐘作為定時(shí)器的輸入(由CKCON的T2M位指定不分頻或12分頻)。C/T2=1(計(jì)數(shù))時(shí),T2輸入引腳上的負(fù)跳變使計(jì)數(shù)器加“1”。T2還可以用于啟動(dòng)ADC數(shù)據(jù)轉(zhuǎn)換。三種工作方式(由T2CON中的配置位選擇):自動(dòng)重裝初值的16位定時(shí)器/計(jì)數(shù)器方式、帶捕捉的16位定時(shí)器/計(jì)數(shù)器方式和波特率發(fā)生器方式。第29頁(yè),共185頁(yè),2023年,2月20日,星期四1.T2控制寄存器T2CON

位7(TF2):T2溢出標(biāo)志位T2溢出時(shí)由硬件置位。允許T2中斷時(shí),使CPU轉(zhuǎn)向T2的中斷服務(wù)程序。不能由硬件自動(dòng)清0,必須用軟件清0。RCLK0或TCLK0為1時(shí)(波特率發(fā)生器方式),TF2不會(huì)被置1。位6(EXF2):T2外部中斷標(biāo)志位EXEN2為“1”時(shí),當(dāng)T2EX輸入引腳發(fā)生負(fù)跳變時(shí),由硬件置位。允許T2中斷時(shí),使CPU轉(zhuǎn)向T2的中斷服務(wù)程序。不能由硬件自動(dòng)清0,必須用軟件清0。CP/RL2C/T2TR2EXEN2TCLK0RCLK0EXF2TF2字節(jié)地址C8H

D7D6D5D4D3D2D1D0第30頁(yè),共185頁(yè),2023年,2月20日,星期四1.T2控制寄存器T2CON位5(RCLK0):UART0接收時(shí)鐘選擇標(biāo)志位0:T1溢出作為接收時(shí)鐘。1:T2溢出作為接收時(shí)鐘。位4(TCLK0):UART0發(fā)送時(shí)鐘選擇標(biāo)志位0:T1溢出作為發(fā)送時(shí)鐘。1:T2溢出作為發(fā)送時(shí)鐘。位3(EXEN2):T2外部允許標(biāo)志位0:T2EX上的負(fù)跳變被忽略。1:T2EX上的負(fù)跳變導(dǎo)致一次捕捉或重載。位2(TR2):T2啟/??刂莆?:停止。1:?jiǎn)?dòng)。第31頁(yè),共185頁(yè),2023年,2月20日,星期四1.T2控制寄存器T2CON位1(C/T2):定時(shí)器/計(jì)數(shù)器功能選擇位0:定時(shí)器功能,由T2M(CKCON.5)定義的時(shí)鐘加“1”。1:計(jì)數(shù)器功能,由外部輸入引腳(T2)的負(fù)跳變加“1”。位0(CP/RL2):捕捉/重載選擇位EXEN2必須為1才能使T2EX上的負(fù)跳變能夠被識(shí)別并觸發(fā)捕捉和重載。當(dāng)RCLK0或TCLK0為“1”時(shí),該位被忽略,T2將工作在自動(dòng)重裝載方式。0:T2溢出或T2EX上發(fā)生負(fù)跳變時(shí)將自動(dòng)重裝載1:T2EX發(fā)生負(fù)跳變時(shí)捕捉。第32頁(yè),共185頁(yè),2023年,2月20日,星期四2.T2的工作方式和計(jì)數(shù)器結(jié)構(gòu)

(1)方式0:自動(dòng)重裝初值的16位定時(shí)器/計(jì)數(shù)器方式原理框圖如圖4-5所示。TH2、TL2構(gòu)成16位加“1”計(jì)數(shù)器。RCAP2H、RCAP2L構(gòu)成16位初值寄存器,EXEN2=1時(shí),當(dāng)T2EX上有負(fù)跳變或T2溢出時(shí),將RCAP2H、RCAP2L中預(yù)置的初值自動(dòng)重新裝入TH2、TL2,T2重新開(kāi)始計(jì)數(shù),并置位中斷標(biāo)志EXF2或TF2,向CPU申請(qǐng)中斷。EXEN2=0時(shí),T2EX上的負(fù)跳變被忽略,只有當(dāng)T2溢出時(shí)才重載初值并向CPU申請(qǐng)中斷。

表4-3T2的方式選擇

RCLK0+TCLK0CP/RL2工作方式00自動(dòng)重裝載的16位定時(shí)器/計(jì)數(shù)器01帶捕捉的16位定時(shí)器/計(jì)數(shù)器1×UART0波特率發(fā)生器方式第33頁(yè),共185頁(yè),2023年,2月20日,星期四(1)方式0:16位自動(dòng)重裝初值方式自動(dòng)重裝初值兩中斷標(biāo)志為0時(shí)忽略T2EX負(fù)跳變,不產(chǎn)生EXF2中斷第34頁(yè),共185頁(yè),2023年,2月20日,星期四(2)方式1:16位帶捕捉方式RCLK0=0、TCLK0=0、CP/RL2=1時(shí),T2工作在此方式EXEN2=1時(shí)為允許捕捉方式,T2EX引腳上的負(fù)跳變將TH2、TL2的當(dāng)前值捕捉到RCAP2H、RCAP2L寄存器,同時(shí)置EXF2=1,發(fā)出中斷請(qǐng)求。EXEN2=0時(shí),RCAP2H、PCAP2L不起作用,此時(shí)T2與T1、T0的方式1完全相同。即:C/T2=0時(shí)為16位定時(shí)器方式,C/T2=1時(shí)為16位計(jì)數(shù)器方式,計(jì)數(shù)溢出時(shí)TF2=1,發(fā)送中斷請(qǐng)求信號(hào)。原理框圖如圖4-6所示。第35頁(yè),共185頁(yè),2023年,2月20日,星期四(2)方式1:16位帶捕捉方式是否捕捉捕捉并產(chǎn)生EXF2中斷第36頁(yè),共185頁(yè),2023年,2月20日,星期四(3)方式2:波特率發(fā)生器方式

RCLK或TCLK置1時(shí),T2工作于波特率發(fā)生器方式。與自動(dòng)重裝載方式相似。但不置位TF2,也不產(chǎn)生中斷。溢出事件用作UART0的移位時(shí)鐘輸入。T2溢出可用于產(chǎn)生獨(dú)立的發(fā)送或接收波特率,也可同時(shí)產(chǎn)生發(fā)送和接收波特率,取決于T2CON的設(shè)置。T2的計(jì)數(shù)源可以是系統(tǒng)時(shí)鐘的二分頻,也可以是T2引腳上的輸入,取決與C/T2的設(shè)置。

如果EXEN2為1,則T2EX引腳上的負(fù)跳變將置位EXF2標(biāo)志,并產(chǎn)生一個(gè)T2中斷(如果允許)。因此,T2EX輸入可以被用作額外的外部中斷源。原理框圖如圖4-7所示。第37頁(yè),共185頁(yè),2023年,2月20日,星期四(3)方式2:波特率發(fā)生器方式做UART0波特率發(fā)生器T1作UART0波特率發(fā)生器產(chǎn)生外部中斷時(shí)基選擇第38頁(yè),共185頁(yè),2023年,2月20日,星期四(3)方式2:波特率發(fā)生器方式當(dāng)選擇系統(tǒng)時(shí)鐘的二分頻做計(jì)數(shù)源時(shí),T2為UART0提供的波特率可以用如下公式計(jì)算:當(dāng)選擇外部引腳T2上的輸入作為時(shí)基時(shí),T2為UART0提供的波特率可以用如下公式計(jì)算:第39頁(yè),共185頁(yè),2023年,2月20日,星期四定時(shí)器/計(jì)數(shù)器T31.定時(shí)器T3的結(jié)構(gòu)16位定時(shí)/計(jì)數(shù)器,由TMR3L(低字節(jié))和TMR3H(高字節(jié))組成T3的時(shí)鐘輸入可以通過(guò)程序選擇為外部振蕩器的8分頻、系統(tǒng)時(shí)鐘或系統(tǒng)時(shí)鐘的12分頻。T3只有自動(dòng)重裝初值一種工作方式,初值保存在TMR3RLL(低字節(jié))和TMR3RLH(高字節(jié))兩個(gè)SFR中,T3沒(méi)有計(jì)數(shù)器方式。除作為通用定時(shí)/計(jì)數(shù)器使用外,T3還可以用于啟動(dòng)ADC數(shù)據(jù)轉(zhuǎn)換、SMBus定時(shí)等。

原理框圖如圖4-8所示。第40頁(yè),共185頁(yè),2023年,2月20日,星期四1.定時(shí)器T3的結(jié)構(gòu)時(shí)基選擇僅此一種方式啟動(dòng)ADC第41頁(yè),共185頁(yè),2023年,2月20日,星期四2.定時(shí)器3控制寄存器TMR3CN

位7(TF3):T3溢出標(biāo)志位溢出時(shí)置1,不能由硬件自動(dòng)清0,必須用軟件清0

位6-3:未用。讀=0000b,寫(xiě)=忽略位2(TR3):T3運(yùn)行控制位0:停止。1:?jiǎn)?dòng)。位1(T3M):T3時(shí)鐘選擇位0:T3使用系統(tǒng)時(shí)鐘的12分頻。1:T3使用系統(tǒng)時(shí)鐘。位0(T3XCLK):T3外部時(shí)鐘選擇位0:由T3M定義。1:外部振蕩器輸入的8分頻。T3XCLKT3MTR3----TF3字節(jié)地址C8H

D7D6D5D4D3D2D1D0第42頁(yè),共185頁(yè),2023年,2月20日,星期四3.T3應(yīng)用舉例

例4.3

假設(shè)C8051F020的并行口P2、P3連接16個(gè)LED指示燈,試編寫(xiě)程序使P3口所接的LED燈循環(huán)點(diǎn)亮,P2口所接的LED燈實(shí)現(xiàn)走馬燈效果。(實(shí)驗(yàn)四)解:要實(shí)現(xiàn)題目要求的效果,只需要定期更新P2、P3口的狀態(tài)即可。這里可以使用T3定時(shí)器再加軟件計(jì)數(shù)的方法達(dá)到所要求的時(shí)間,假設(shè)T3定時(shí)0.1秒產(chǎn)生中斷,則軟件計(jì)數(shù)器每0.1秒加1,讓計(jì)數(shù)器加到5時(shí),改變P2、P3口的狀態(tài),就可以實(shí)現(xiàn)每秒2次刷新LED燈的狀態(tài)。第43頁(yè),共185頁(yè),2023年,2月20日,星期四3.T3應(yīng)用舉例#include<c8051f020.h>sfr16TMR3RL=0x92; //16位SFRsfr16TMR3=0x94;#defineSYSCLK2000000 //系統(tǒng)時(shí)鐘使用2MHz//函數(shù)聲明voidPORT_Init(void);voidTimer3_Init(intcounts);voidTimer3_ISR(void);//P2口8個(gè)LED(共陰極)產(chǎn)生走馬燈效果所需的數(shù)據(jù)

unsignedintxdatap2led[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};第44頁(yè),共185頁(yè),2023年,2月20日,星期四3.T3應(yīng)用舉例voidmain(void){ WDTCN=0xde; //禁止看門(mén)狗定時(shí)器

WDTCN=0xad; PORT_Init(); //端口初始化

Timer3_Init(SYSCLK/12/10); //T3初始化,產(chǎn)生0.1秒的定時(shí)中斷

EA=1; //開(kāi)中斷

while(1); //循環(huán)等待T3中斷,產(chǎn)生走馬燈效果}voidPORT_Init(void){ XBR2=0x40; //使能交叉開(kāi)關(guān)}第45頁(yè),共185頁(yè),2023年,2月20日,星期四3.T3應(yīng)用舉例voidTimer3_Init(intcounts){TMR3CN=0x00;TMR3RL=-counts; //T3賦初值,也可以采用8位SFR方式,向例4.2那樣

TMR3=0xffff; //立即重載

EIE2|=0x01; //開(kāi)T3中斷,P42EIE2格式

TMR3CN|=0x04; //啟動(dòng)T3}第46頁(yè),共185頁(yè),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)一個(gè)周期

if(i==0){i=9;led=0xff;} //P3口LED燈循環(huán)一個(gè)周期

}}

第47頁(yè),共185頁(yè),2023年,2月20日,星期四4.1.5定時(shí)器/計(jì)數(shù)器T4

16位的定時(shí)器/計(jì)數(shù)器,由TL4(低字節(jié))和TH4(高字節(jié))組成。T4還可以用于啟動(dòng)ADC數(shù)據(jù)轉(zhuǎn)換。T4與T2的功能和結(jié)構(gòu)類(lèi)似,與T2有區(qū)別的是,T4可以作為UART1的波特率發(fā)生器。UART1波特率發(fā)生器方式×1帶捕捉的16位定時(shí)器/計(jì)數(shù)器10自動(dòng)重裝載的16位定時(shí)器/計(jì)數(shù)器00工作方式CP/RL4RCLK1+TCLK1表4-4定時(shí)器T4的方式選擇

第48頁(yè),共185頁(yè),2023年,2月20日,星期四T4CON的格式:

位7(TF4):T4溢出標(biāo)志位T4溢出時(shí)由硬件置位。允許T4中斷時(shí),使CPU轉(zhuǎn)向T4的中斷服務(wù)程序。不能由硬件自動(dòng)清0,必須用軟件清0。RCLK0或TCLK0為1時(shí)(波特率發(fā)生器方式),TF4不會(huì)被置1。位6(EXF4):T4外部中斷標(biāo)志位EXEN4為“1”時(shí),當(dāng)T4EX輸入引腳發(fā)生負(fù)跳變時(shí),由硬件置位。允許T4中斷時(shí),使CPU轉(zhuǎn)向T4的中斷服務(wù)程序。不能由硬件自動(dòng)清0,必須用軟件清0。CP/RL4C/T4TR4EXEN4TCLK1RCLK1EXF4TF4字節(jié)地址C9H

D7D6D5D4D3D2D1D0第49頁(yè),共185頁(yè),2023年,2月20日,星期四T4CON的格式:位5(RCLK1):UART1接收時(shí)鐘選擇標(biāo)志位0:T1溢出作為接收時(shí)鐘。1:T4溢出作為接收時(shí)鐘。位4(TCLK1):UART1發(fā)送時(shí)鐘選擇標(biāo)志位0:T1溢出作為發(fā)送時(shí)鐘。1:T4溢出作為發(fā)送時(shí)鐘。位3(EXEN2):T4外部允許標(biāo)志位0:忽T2EX上的負(fù)跳變被略。1:T2EX上的負(fù)跳變導(dǎo)致一次捕捉或重載。位2(TR4):T4運(yùn)行控制位0:禁止T4。1:允許T4。第50頁(yè),共185頁(yè),2023年,2月20日,星期四T4CON的格式:位1(C/T4):定時(shí)器/計(jì)數(shù)器功能選擇位0:定時(shí)器功能:T4由T4M(CKCON.6)定義的時(shí)鐘加“1”。1:計(jì)數(shù)器功能:T4由外部輸入引腳(T4)的負(fù)跳變加“1”。位0(CP/RL4):捕捉/重載選擇位該位選擇T4為捕捉還是自動(dòng)重裝載方式。EXEN4必須為1才能使T4EX上的負(fù)跳變能夠被識(shí)別并觸發(fā)捕捉和重載。當(dāng)RCLK0或TCLK0為“1”時(shí),T4將工作在自動(dòng)重裝載方式。0:當(dāng)T4溢出或T4EX上發(fā)生負(fù)跳變時(shí)將自動(dòng)重裝載1:在T4EX發(fā)生負(fù)跳變時(shí)捕捉。第51頁(yè),共185頁(yè),2023年,2月20日,星期四

可編程計(jì)數(shù)器陣列

可編程計(jì)數(shù)器陣列(ProgrammableCounterArray)提供了增強(qiáng)的定時(shí)器功能,與標(biāo)準(zhǔn)8051的定時(shí)器/計(jì)數(shù)器相比,需要的CPU干預(yù)更少。C8051F020內(nèi)部集成有一個(gè)可編程計(jì)數(shù)器陣列,稱(chēng)為PCA0。包含一個(gè)專(zhuān)用的16位定時(shí)器/計(jì)數(shù)器和5個(gè)16位捕捉/比較模塊。每個(gè)捕捉/比較模塊有自己的I/O線(CEXn)。通過(guò)配置交叉開(kāi)關(guān),可以將I/O線連接到并行I/O端口。定時(shí)/計(jì)數(shù)器有六個(gè)計(jì)數(shù)源:系統(tǒng)時(shí)鐘、系統(tǒng)時(shí)鐘/4、系統(tǒng)時(shí)鐘/12、外部振蕩器時(shí)鐘源8分頻、定時(shí)器0溢出、ECI線上的外部時(shí)鐘信號(hào)。每個(gè)捕捉/比較模塊可獨(dú)立工作在6種工作方式之一。第52頁(yè),共185頁(yè),2023年,2月20日,星期四可編程計(jì)數(shù)器陣列6種時(shí)鐘源捕捉/比較模塊第53頁(yè),共185頁(yè),2023年,2月20日,星期四PCA定時(shí)器/計(jì)數(shù)器

16位PCA定時(shí)/計(jì)數(shù)器由PCA0L(低字節(jié))和PCA0H(高字節(jié))組成。在讀PCA0L的同時(shí)自動(dòng)鎖存PCA0H的值。讀PCA0H或PCA0L不影響計(jì)數(shù)器工作。原理框圖如圖4-10所示。PCA0MD寄存器中的CPS2-CPS0位用于選擇PCA定時(shí)/計(jì)數(shù)器的計(jì)數(shù)脈沖源,如下表所示。CPS2CPS1CPS0計(jì)數(shù)脈沖源000系統(tǒng)時(shí)鐘的12分頻001系統(tǒng)時(shí)鐘的4分頻010定時(shí)器0溢出011ECI負(fù)跳變(最大速率=系統(tǒng)時(shí)鐘頻率/4)100系統(tǒng)時(shí)鐘101外部振蕩源8分頻第54頁(yè),共185頁(yè),2023年,2月20日,星期四PCA定時(shí)器/計(jì)數(shù)器讀PCA0L時(shí)鎖存PCA0H第55頁(yè),共185頁(yè),2023年,2月20日,星期四4.2.1PCA定時(shí)器/計(jì)數(shù)器定時(shí)/計(jì)數(shù)器溢出時(shí)(從0xFFFF加1到0x0000),PCA0MD中的CF置1,如果允許CF中斷,則可以產(chǎn)生一個(gè)中斷請(qǐng)求。PCA0MD中的ECF位置1即可允許CF中斷,但要使CF中斷得到響應(yīng),必須先總體允許PCA0中斷(通過(guò)將EA位(IE.7)和EPCA0位(EIE1.3)置1可總體允許PCA0中斷)。CF位不能由硬件自動(dòng)清除,必須用軟件清0。PCA0中斷配置的詳細(xì)信息如圖4-11所示。清除PCA0MD寄存器中的CIDL位則允許PCA在微控制器內(nèi)核處于等待方式時(shí)繼續(xù)正常工作。第56頁(yè),共185頁(yè),2023年,2月20日,星期四PCA定時(shí)器/計(jì)數(shù)器將PCA0MD中的ECF位置1即可允許CF中斷各模塊中斷控制總控開(kāi)關(guān)第57頁(yè),共185頁(yè),2023年,2月20日,星期四PCA捕捉/比較模塊

5個(gè)捕捉/比較模塊都可獨(dú)立工作在六種工作方式(由PCA0CPMn設(shè)置),如下表所示:PWM16ECOMCAPPCAPNMATTOGPWM工作方式XX10000用CEXn的正沿觸發(fā)捕捉XX01000用CEXn的負(fù)沿觸發(fā)捕捉XX11000用CEXn的電平改變觸發(fā)捕捉X100100軟件定時(shí)器X100110高速輸出X100X11頻率輸出0100X018位脈沖寬度調(diào)制器1100X0116位脈沖寬度調(diào)制器第58頁(yè),共185頁(yè),2023年,2月20日,星期四1.邊沿觸發(fā)的捕捉方式CEXn引腳上有效的電平變化(CEXn輸入信號(hào)的高、低電平至少要持續(xù)兩個(gè)系統(tǒng)時(shí)鐘周期)可以捕捉PCA0定時(shí)/計(jì)數(shù)器的值,將其裝入到對(duì)應(yīng)模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)進(jìn)行比較。當(dāng)發(fā)生匹配時(shí),PCA0CN中的捕捉/比較標(biāo)志(CCFn)置1,如果允許CCF中斷,則可產(chǎn)生一個(gè)中斷請(qǐng)求。CCFn位不能由硬件自動(dòng)清除,必須用軟件清0。原理框圖如圖4-12所示。第59頁(yè),共185頁(yè),2023年,2月20日,星期四1.邊沿觸發(fā)的捕捉方式正/負(fù)跳變捕捉中斷捕捉第60頁(yè),共185頁(yè),2023年,2月20日,星期四2.軟件定時(shí)(比較)器方式

置1PCA0CPMn寄存器中的ECOMn和MATn位可將PCA0設(shè)置在軟件定時(shí)器方式。該方式將PCA0定時(shí)/計(jì)數(shù)器與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)進(jìn)行比較。匹配時(shí),PCA0CN中的捕捉/比較標(biāo)志(CCFn)置1,如果允許CCF中斷,則可產(chǎn)生一個(gè)中斷請(qǐng)求。CCFn位不能由硬件自動(dòng)清除,必須用軟件清0。注意:向PCA0的捕捉/比較寄存器寫(xiě)入一個(gè)16位值時(shí),應(yīng)先寫(xiě)低字節(jié),后寫(xiě)高字節(jié)。對(duì)PCA0CPLn的寫(xiě)入操作將清ECOMn位;PCA0CPHn寫(xiě)入時(shí)將置1ECOMn位。原理框圖如圖4-13所示。第61頁(yè),共185頁(yè),2023年,2月20日,星期四2.軟件定時(shí)(比較)器方式寫(xiě)PCA0CPLn

、PCA0CPHn對(duì)ECOMn的影響匹配允許開(kāi)關(guān)中斷比較第62頁(yè),共185頁(yè),2023年,2月20日,星期四3.高速輸出方式

該方式下,每當(dāng)PCA的計(jì)數(shù)器與模塊的16位捕捉/比較寄存器(PCA0CPHn和PCA0CPLn)發(fā)生匹配時(shí),模塊的CEXn引腳上的邏輯電平將發(fā)生改變。置1PCA0CPMn寄存器中的TOGn、MATn和ECOMn位可將PCA0設(shè)置為該方式。與軟件定時(shí)器方式一樣應(yīng)注意,當(dāng)向PCA0的捕捉/比較寄存器寫(xiě)入一個(gè)16位數(shù)值時(shí),應(yīng)先寫(xiě)低字節(jié),后寫(xiě)高字節(jié)。原理框圖如圖4-14所示。第63頁(yè),共185頁(yè),2023年,2月20日,星期四3.高速輸出方式同上設(shè)置此3位即為該方式匹配后電平發(fā)生改變第64頁(yè),共185頁(yè),2023年,2月20日,星期四4.頻率輸出方式

該方式在對(duì)應(yīng)的CEXn引腳產(chǎn)生可編程頻率的方波。捕捉/比較寄存器的高字節(jié)保持著輸出電平改變前要計(jì)的PCA時(shí)鐘數(shù)。所產(chǎn)生的方波的頻率由下式定義:

FPCA是由PCA方式寄存器PCA0MD中的GPS2-0位選擇的PCA時(shí)鐘頻率。第65頁(yè),共185頁(yè),2023年,2月20日,星期四4.頻率輸出方式捕捉/比較模塊的低字節(jié)與PCA0計(jì)數(shù)器的低字節(jié)比較,兩者匹配時(shí),CEXn的電平發(fā)生改變,高字節(jié)中的偏移值加到PCA0CPLn。注意:在該方式下如果允許模塊匹配(CCFn)中斷,則發(fā)生中斷的速率為2FCEXn。置位PCA0CPMn寄存器中ECOMn、TOGn和PWMn位可將PCA0設(shè)置為頻率輸出方式。第66頁(yè),共185頁(yè),2023年,2月20日,星期四4.頻率輸出方式匹配時(shí),電平改變,PCA0CPHn加到PCA0CPLn第67頁(yè),共185頁(yè),2023年,2月20日,星期四5.8位脈寬調(diào)制器方式

該方式下,每個(gè)模塊都可以獨(dú)立地產(chǎn)生脈寬調(diào)制(PWM)輸出。PWM的頻率取決于PCA0定時(shí)/計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘源。使用模塊的捕捉/比較寄存器PCA0CPLn可以改變PWM輸出信號(hào)的占空比。當(dāng)PCA0定時(shí)器/計(jì)數(shù)器的低字節(jié)(PCA0L)與PCA0CPLn中的值相等時(shí),CEXn輸出高電平,當(dāng)PCA0L中的計(jì)數(shù)值溢出時(shí),CEXn輸出低電平。當(dāng)定時(shí)器/計(jì)數(shù)器的低字節(jié)PCA0L溢出時(shí)(從0xFF到0x00),保存在PCA0CPHn中的值自動(dòng)裝入PCA0CPLn,不需軟件干預(yù)。置1PCA0CPMn寄存器中的ECOMn和PWMn位可將PCA0設(shè)置為8位脈沖寬度調(diào)制器方式。第68頁(yè),共185頁(yè),2023年,2月20日,星期四5.8位脈寬調(diào)制器方式8位PWM方式的占空比由下面方程給出:

可見(jiàn),最大占空比為100%(PCA0CPHn=0),最小占空比為0.39%(PCA0CPHn=0xFF)。可以通過(guò)清0ECOMn位產(chǎn)生0%的占空比。第69頁(yè),共185頁(yè),2023年,2月20日,星期四5.8位脈寬調(diào)制器方式匹配時(shí)置1溢出時(shí)置0并將PCA0CPHn裝入PCA0CPLn第70頁(yè),共185頁(yè),2023年,2月20日,星期四6.16位脈寬調(diào)制器方式16位方式,其余與8位方式相同第71頁(yè),共185頁(yè),2023年,2月20日,星期四PCA特殊功能寄存器1、PCA控制寄存器PCA0CNCCF0CCF1CCF2CCF3CCF4-CRCF字節(jié)地址D8H

D7D6D5D4D3D2D1D0位7(CF):PCA定時(shí)器/計(jì)數(shù)器溢出標(biāo)志位PCA0定時(shí)/計(jì)數(shù)器溢出時(shí)由硬件置位。如允許CF中斷,將使CPU轉(zhuǎn)向CF中斷服務(wù)程序。不能由硬件自動(dòng)清0,必須用軟件清0。位6(CR):PCA0定時(shí)/計(jì)數(shù)器運(yùn)行控制位0:停止計(jì)數(shù)1:?jiǎn)?dòng)計(jì)數(shù)位5:未用。讀=0b,寫(xiě)=忽略。位4-位0(CCF4-CCF0):PCA0模塊4-模塊0捕捉/比較標(biāo)志位匹配或捕捉時(shí)由硬件置位。允許CCF中斷時(shí),將使CPU轉(zhuǎn)向CCF中斷服務(wù)程序。不能由硬件自動(dòng)清0,必須用軟件清0。第72頁(yè),共185頁(yè),2023年,2月20日,星期四2、PCA0方式選擇寄存器PCA0MD位7(CIDL):PCA0定時(shí)/計(jì)數(shù)器等待控制位0:當(dāng)CPU處于等待方式時(shí),PCA0繼續(xù)正常工作。1:當(dāng)CPU處于等待方式時(shí),PCA0停止工作。位6-4:未用。讀=000b,寫(xiě)=忽略。位3-1(CPS2-CPS0):PCA0定時(shí)器/計(jì)數(shù)器計(jì)數(shù)時(shí)鐘源選擇位這些位選擇PCA0計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘源,如表4-5所示。位0(ECF)PCA0定時(shí)器/計(jì)數(shù)器溢出中斷允許位0:禁止CF中斷。1:允許CF中斷。ECFCPS0CPS1CPS2---CIDL字節(jié)地址D9H

D7D6D5D4D3D2D1D0第73頁(yè),共185頁(yè),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)制方式時(shí)(PWMn=1),該位選擇16位PWM方式。

0:選擇8位PWM。1:選擇16位PWM。ECCFnPWMnTOGnMATnCAPNnCAPPnECOMnPWM16n字節(jié)地址0DA-0DEH

D7D6D5D4D3D2D1D0第74頁(yè),共185頁(yè),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時(shí),允許捕捉/比較標(biāo)志的中斷請(qǐng)求。3、PCA0捕捉/比較寄存器PCA0CPMn

第75頁(yè),共185頁(yè),2023年,2月20日,星期四PCA應(yīng)用舉例例4.4

對(duì)液體流量進(jìn)行測(cè)量的流量計(jì)是通過(guò)對(duì)脈沖進(jìn)行計(jì)數(shù)實(shí)現(xiàn)的,某應(yīng)用系統(tǒng)中需要對(duì)2路液體的流量進(jìn)行測(cè)量。系統(tǒng)中使用PCA0工作在上升沿捕捉方式對(duì)脈沖進(jìn)行計(jì)數(shù),試編寫(xiě)實(shí)現(xiàn)該功能的程序。解:實(shí)現(xiàn)該功能的程序如下:#include"c8051f020.h"unsignedlongxdataPlus_NUM[2]={0x0l,0x0l};//用于脈沖計(jì)數(shù)voidPORT_Init(void) //端口初始化{ XBR0=0x10; //CEX0、CEX1配置到P0.0、0.1 XBR2=0x40; //允許交叉開(kāi)關(guān)

P0MDOUT=0x00; //P0為開(kāi)漏輸出

}第76頁(yè),共185頁(yè),2023年,2月20日,星期四PCA應(yīng)用舉例voidSYSCLK_Init(void) //時(shí)鐘初始化{inti; OSCXCN=0x67;//外部晶振22.1184MHz for(i=0;i<256;i++); //延時(shí)

while(!(OSCXCN&0x80));//等待外部晶振穩(wěn)定

OSCICN=0x88;//選擇外部晶振作系統(tǒng)時(shí)鐘源,允許時(shí)鐘丟失檢測(cè)

}voidInit_PCA0(void) //PCA0初始化{PCA0MD=0x08; //PCA0采用系統(tǒng)時(shí)鐘,禁止PCA0溢出中斷

EIE1|=0x08; //允許PCA0中斷

PCA0CPM0=0x21; //模塊0上升沿中斷允許

PCA0CPM1=0x21; //模塊1CR=0; //關(guān)PCA0}第77頁(yè),共185頁(yè),2023年,2月20日,星期四PCA應(yīng)用舉例voidPCA0_ISR(void)interrupt9//PCA0中斷服務(wù)程序{EA=0; //關(guān)中斷

if(CCF0==1) //模塊0對(duì)第一路液體脈沖計(jì)數(shù)

{ CCF0=0; //清CCF中斷標(biāo)志

Plus_NUM[0]++; //脈沖計(jì)數(shù)

} if(CCF1==1) //模塊1{ CCF1=0;Plus_NUM[1]++; } EA=1; //開(kāi)中斷}第78頁(yè),共185頁(yè),2023年,2月20日,星期四PCA應(yīng)用舉例voidmain(void) //主程序{ WDTCN=0xde; //關(guān)看門(mén)狗

WDTCN=0xad; SYSCLK_Init(); //初始化時(shí)鐘

PORT_Init(); //初始化IO口

Init_PCA0(); //初始化PCA0 CR=1; //啟動(dòng)PCA0 EA=1; //開(kāi)中斷

while(1); //等待中斷}

第79頁(yè),共185頁(yè),2023年,2月20日,星期四UART通信接口C8051F具有豐富的串行通信接口。包括2個(gè)UART通信接口、一個(gè)與I2C兼容的SMBus接口和一個(gè)SPI接口。UART串行接口是全雙工串行通信接口,即能同時(shí)進(jìn)行串行發(fā)送和接收。它可以作UART(通用異步接收和發(fā)送器)用,也可以作同步位移寄存器用。應(yīng)用UART串行接口可以實(shí)現(xiàn)C8051F單片機(jī)系統(tǒng)之間點(diǎn)對(duì)點(diǎn)的單機(jī)通信、多機(jī)通信以及C8051F與系統(tǒng)機(jī)(如IBM-PC機(jī)等)的單機(jī)或多機(jī)通信。第80頁(yè),共185頁(yè),2023年,2月20日,星期四4.3.1串行通信及基礎(chǔ)知識(shí)

1.?dāng)?shù)據(jù)通信的概念

并行通信和串行通信并行通信是指數(shù)據(jù)的各位同時(shí)進(jìn)行傳送(發(fā)送或接收)的通信方式。其優(yōu)點(diǎn)是傳遞速度快;缺點(diǎn)是數(shù)據(jù)有多少位,就需要多少根傳送線。并行通信在位數(shù)多、傳送距離又遠(yuǎn)時(shí)就不太適宜。串行通信指數(shù)據(jù)是一位一位按順序傳送的通信方式,它的突出優(yōu)點(diǎn)是只需一對(duì)傳送線(利用電話線就可作為傳送線),這樣就大大降低了傳送成本,特別適用于遠(yuǎn)距離通信。其缺點(diǎn)是傳送速度較低。第81頁(yè),共185頁(yè),2023年,2月20日,星期四2.串行通信的傳送方向

三種:一種為單工(或單向)配置,只允許數(shù)據(jù)向一個(gè)方向進(jìn)行傳送;另一種是半雙工(或半雙向)配置,允許數(shù)據(jù)向兩個(gè)方向中的任何一個(gè)方向傳送,但一次只能有一個(gè)發(fā)送,一個(gè)接收;第三種傳送方式是全雙工(或全雙向)配置,允許同時(shí)雙向傳送數(shù)據(jù),因此,全雙工配置是一對(duì)單工配置,它要求兩端的通信設(shè)備都具有完整和獨(dú)立的發(fā)送和接收能力。第82頁(yè),共185頁(yè),2023年,2月20日,星期四3.異步通信和同步通信

(1)異步通信異步通信用起始位0表示字符的開(kāi)始,然后從低位到高位逐位傳送數(shù)據(jù),最后用停止位1表示字符結(jié)束,如圖4-18所示。一個(gè)字符又稱(chēng)一幀信息。圖4-18a中,一幀信息包括1位起始位、8位數(shù)據(jù)位和1位停止位,圖4-18b中,數(shù)據(jù)位增加到9位。在C8051F單片機(jī)系統(tǒng)中,第9位數(shù)據(jù)D8可以用作奇偶校驗(yàn)位,也可以用作地址/數(shù)據(jù)幀的標(biāo)識(shí)位,D8=1表示該幀信息傳送的是地址,D8=0表示傳送的是數(shù)據(jù)。兩幀信息之間可以無(wú)間隔,也可以有間隔,且間隔時(shí)間可任意改變,間隔用空閑位“1”來(lái)填充。第83頁(yè),共185頁(yè),2023年,2月20日,星期四異步通信

圖4-18異步通信數(shù)據(jù)格式

第84頁(yè),共185頁(yè),2023年,2月20日,星期四(2)同步通信

在同步通信中,每一數(shù)據(jù)塊開(kāi)頭時(shí)發(fā)送一個(gè)或兩個(gè)同步字符,使發(fā)送與接收雙方取得同步。數(shù)據(jù)塊的各個(gè)字符間取消了起始位和停止位,所以通信速度得以提高,如圖4-19所示。同步通信時(shí),如果發(fā)送的數(shù)據(jù)塊之間有間隔時(shí)間,則發(fā)送同步字符填充。

圖4-19同步通信數(shù)據(jù)格式

第85頁(yè),共185頁(yè),2023年,2月20日,星期四

串行接口的組成和特性

1.UART的組成C8051F的UART可以實(shí)現(xiàn)同時(shí)發(fā)送和接收數(shù)據(jù)的全雙工通信。串行口的內(nèi)部有獨(dú)立的數(shù)據(jù)接收緩沖器和數(shù)據(jù)發(fā)送緩沖器。這兩個(gè)數(shù)據(jù)緩沖器都用符號(hào)SBUF0來(lái)表示(UART1的數(shù)據(jù)緩沖器用SBUF1表示)的,地址都是99H(SBUF1的地址是F2H)。CPU對(duì)特殊功能寄存器SBUF0或SBUF1執(zhí)行寫(xiě)操作,就是將數(shù)據(jù)寫(xiě)入發(fā)送緩沖器;對(duì)SBUF0或SBUF1的讀操作,就是讀出接收緩沖器的內(nèi)容。第86頁(yè),共185頁(yè),2023年,2月20日,星期四1.UART的組成UART的原理框圖如圖4-20所示。由原理圖可知,發(fā)送電路由發(fā)送SBUF、零檢測(cè)器和發(fā)送控制器等組成。接收電路由接收SBUF、接收移位寄存器和接收控制器等組成。除發(fā)送和接收電路以外,還有波特率發(fā)生器、錯(cuò)誤校驗(yàn)電路、多機(jī)通信控制電路和交叉開(kāi)關(guān)等組成,交叉開(kāi)關(guān)可將接收與發(fā)送引腳配置到P0到P3的任意口線。

第87頁(yè),共185頁(yè),2023年,2月20日,星期四UART的組成—發(fā)送部分寫(xiě)SBUF有三個(gè)作用發(fā)送結(jié)束,置TI標(biāo)志第88頁(yè),共185頁(yè),2023年,2月20日,星期四UART的組成—接收部分起始位檢測(cè)接收完一字節(jié),裝SBUFRB8=1時(shí),檢測(cè)地址,多機(jī)通信第89頁(yè),共185頁(yè),2023年,2月20日,星期四2.串行口控制寄存器SCON位7-5:該三位的功能由PCON中的SSTAT0位決定SSTAT0=1時(shí),用于UART0的出錯(cuò)狀態(tài)指示位。FE0=1為幀格式錯(cuò),即收到的停止位為0;RXOV0=1為接收覆蓋錯(cuò)誤,即前一個(gè)字節(jié)還沒(méi)有取走,接收器又鎖存了一個(gè)新字節(jié);TXCOL0=1為發(fā)送沖突錯(cuò)誤,即前一個(gè)字節(jié)還沒(méi)有發(fā)送完又往SBUF寫(xiě)入一新字節(jié)。SSTAT0=0時(shí),SM00、SM10按表4-7選擇UART0的工作方式。

RI0

TI0

RB80

TB80

REN0

SM20/TXCOL0

SM10/RXOV0

SM00/FE0字節(jié)地址98H

D7D6D5D4D3D2D1D0第90頁(yè),共185頁(yè),2023年,2月20日,星期四2.串行口控制寄存器SCONSM00SM10方式功能說(shuō)明000同步方式(擴(kuò)展移位寄存器方式,用于I/O口擴(kuò)展),波特率固定(fosc/12)0118位UART,波特率可變(由T1或T2溢出率決定)1029位UART,波特率固定(fosc/64或fosc/32)1139位UART,波特率可變(由T1或T2溢出率決定)表4-7UART0的方式選擇位

第91頁(yè),共185頁(yè),2023年,2月20日,星期四2.串行口控制寄存器SCONSM20為多處理器通信允許位方式0時(shí)該位無(wú)作用。方式1時(shí)用于檢查有效停止位。0:忽略對(duì)停止位的檢測(cè)。1:只有接收到有效的停止位時(shí)才置位RI0。方式2和方式3時(shí)為多機(jī)通信允許位0:忽略對(duì)第九位的檢測(cè)。1:只有當(dāng)?shù)诰盼粸椤?”并且接收到的地址與UART0的地址或廣播地址匹配時(shí)才置位RI0并產(chǎn)生中斷。

第92頁(yè),共185頁(yè),2023年,2月20日,星期四2.串行口控制寄存器SCON位4(REN0):接收允許位0:禁止UART0接收1:允許UART0接收位3(TB80):第9發(fā)送位對(duì)于方式2和方式3,是發(fā)送的第9位數(shù)據(jù)??筛鷵?jù)需要時(shí)由軟件置位或復(fù)位。在方式0和1中未用。位2(RB80):第9接收位對(duì)于方式2和方式3,是接收到的第9位數(shù)據(jù)。對(duì)于方式1,如SM20=0,RB80是接收到的停止位。對(duì)于方式0,不使用RB80。第93頁(yè),共185頁(yè),2023年,2月20日,星期四2.串行口控制寄存器SCON位1(TI0):發(fā)送中斷標(biāo)志位由硬件在方式0串行發(fā)送第8位結(jié)束時(shí)置位,或在其它方式串行發(fā)送停止位的開(kāi)始時(shí)置位。當(dāng)允許UART0中斷時(shí),置1該位將使CPU轉(zhuǎn)到UART0中斷服務(wù)程序。該位必須由軟件清0。位0(RI0):接收中斷標(biāo)志位由硬件在方式0接收到第8位結(jié)束時(shí)置位,或在其它方式接收到停止位的中間時(shí)置位。當(dāng)允許UART0中斷時(shí),置1該位將使CPU轉(zhuǎn)到UART0中斷服務(wù)程序。該位必須由軟件清0。

第94頁(yè),共185頁(yè),2023年,2月20日,星期四3.特殊功能寄存器PCON

位7(SMOD0):UART0波特率系數(shù)控制位0:UART0的波特率不加倍。1:UART0的波特率加倍。位6(SSTAT0):UART0增強(qiáng)狀態(tài)方式選擇位0:讀/寫(xiě)SCON0.5~7時(shí)訪問(wèn)UART0方式設(shè)置位SM20-SM00。1:讀/寫(xiě)SCON0.5~7時(shí)訪問(wèn)幀格式錯(cuò)誤(FE0)、接收覆蓋錯(cuò)誤(RXOV0)和發(fā)送沖突錯(cuò)誤(TXCOL0)狀態(tài)位。IDLE

STOP

-

SSTAT1

SMOD1

-

SSTAT0

SMOD0

字節(jié)地址87H

D7D6D5D4D3D2D1D0第95頁(yè),共185頁(yè),2023年,2月20日,星期四3.特殊功能寄存器PCON位5:保留。讀出值無(wú)定義,必須寫(xiě)入0。位4(SMOD1):UART1波特率系數(shù)控制位0:UART1的波特率不加倍。1:UART1的波特率加倍。位3(SSTAT1):UART1增強(qiáng)狀態(tài)方式選擇。0:讀/寫(xiě)SCON1.5~7時(shí)訪問(wèn)UART1方式設(shè)置位SM21-SM01。1:讀/寫(xiě)SCON1.5~7時(shí)訪問(wèn)幀格式錯(cuò)誤(FE1)、接收覆蓋錯(cuò)誤(RXOV1)和發(fā)送沖突錯(cuò)誤(TXCOL1)狀態(tài)位。位2:保留。讀出值無(wú)定義,必須寫(xiě)入0。位1-位0:見(jiàn)2.6節(jié)電源管理方式。第96頁(yè),共185頁(yè),2023年,2月20日,星期四串行接口的工作方式

1.方式0

方式0是擴(kuò)展移位寄存器的工作方式,用以擴(kuò)展并行I/O接口。串行發(fā)送,發(fā)送SBUF相當(dāng)于一個(gè)并入串出移位寄存器,由C8051F的內(nèi)部總線并行接收8位數(shù)據(jù),并從RXD線串行輸出。串行接收,接收SBUF相當(dāng)于一個(gè)串入并出的移位寄存器,從RXD線接收一幀串行數(shù)據(jù),并把它并行地送到內(nèi)部總線。由RXD串行輸入/輸出數(shù)據(jù),TXD輸出移位脈沖。波特率固定為fosc/12

。

第97頁(yè),共185頁(yè),2023年,2月20日,星期四(1)方式0輸出

串口外接74LSl64串入并出移位寄存器的接口邏輯如圖4-21所示。TXD輸出移位脈沖,RXD輸出數(shù)據(jù)移入74LSl64。CPU寫(xiě)發(fā)送SBUF,啟動(dòng)串行口從低位開(kāi)始發(fā)送,經(jīng)過(guò)8個(gè)發(fā)送周期,發(fā)送SBUF的內(nèi)容移入74LSl64,并置位TI,完成一字節(jié)輸出。若fosc=12MHz,則串行輸出一位的時(shí)間是1μs,傳輸一個(gè)字節(jié)需8μs。從低位開(kāi)始串行輸出,數(shù)據(jù)的低位在右高位在左,在具體應(yīng)用中應(yīng)加以注意。方式0輸出時(shí),可以串接多個(gè)移位寄存器。第98頁(yè),共185頁(yè),2023年,2月20日,星期四(1)方式0輸出圖4-21

第99頁(yè),共185頁(yè),2023年,2月20日,星期四(1)方式0輸出74LS16474LS164真值表第100頁(yè),共185頁(yè),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頁(yè),共185頁(yè),2023年,2月20日,星期四(2)方式0輸入

方式0輸入,RXD--數(shù)據(jù)輸入線,TXD--移位脈沖,串行口與外接的并入串出的移位寄存器74LSl66的接口邏輯如圖4-23所示。

圖4-23方式0輸入時(shí)移位寄存器的連接第102頁(yè),共185頁(yè),2023年,2月20日,星期四74LS165并入串出移位寄存器(74LS166與之類(lèi)似)74LS16574LS165真值表(2)方式0輸入舉例第103頁(yè),共185頁(yè),2023年,2月20日,星期四

例:根據(jù)下圖編寫(xiě)程序,當(dāng)開(kāi)關(guān)K合上時(shí),采集8位開(kāi)關(guān)量,根據(jù)開(kāi)關(guān)的不同狀態(tài)進(jìn)行不同處理。(2)方式0輸入舉例第104頁(yè),共185頁(yè),2023年,2月20日,星期四程序如下:

START:JBP1.0,$;開(kāi)關(guān)K未合上,等待

CLRP1.1;74LS165并行輸入數(shù)據(jù)

SETBP1.1;開(kāi)始串行移位

MOVSCON,#10H;串行口方式0并啟動(dòng)接收

JNBRI,$CLRRIMOVA,SBUF;輸入數(shù)據(jù);根據(jù)A處理不同任務(wù)

SJMPSTART;準(zhǔn)備下一次接收。

…(2)方式0輸入舉例第105頁(yè),共185頁(yè),2023年,2月20日,星期四2.方式1方式1是8位異步串行通信方式,TXD為數(shù)據(jù)輸出線,RXD為數(shù)據(jù)輸入線。傳送一幀信息的數(shù)據(jù)格式如下圖所示,一幀為10位:1位起始位,8位數(shù)據(jù)位(先低位后高位)和1位停止位。第106頁(yè),共185頁(yè),2023年,2月20日,星期四2.方式1(1)方式1輸出CPU向發(fā)送SBUF寫(xiě)入一個(gè)數(shù)據(jù),即啟動(dòng)發(fā)送,從TXD端輸出一幀信息,先發(fā)送起始位0,接著從低位開(kāi)始依次輸出8位數(shù)據(jù),最后輸出停止位1,并置1發(fā)送中斷標(biāo)志TI。CPU查詢(xún)TI=1后,清TI,再向SBUF寫(xiě)入數(shù)據(jù),啟動(dòng)下一字符發(fā)送。也可以采用中斷方式,TI=1時(shí)向CPU產(chǎn)生中斷請(qǐng)求。第107頁(yè),共185頁(yè),2023年,2月20日,星期四(2)方式1輸入REN置1允許接收器接收。接收器以所選波特率的16倍的速率采樣RXD端的電平。當(dāng)檢測(cè)到RXD端輸入電平發(fā)生負(fù)跳變時(shí),復(fù)位內(nèi)部的十六分頻計(jì)數(shù)器。計(jì)數(shù)器的16個(gè)狀態(tài)把傳送一位數(shù)據(jù)的時(shí)間分為16等分,在每位中心,即7、8、9這三個(gè)計(jì)數(shù)狀態(tài),位檢測(cè)器采樣RXD的輸入電平,接收的值是三次采樣中至少是兩次相同的值,這樣處理可以防止干擾。如果在第1位時(shí)間接收到的值(起始位)不是0,則起始位無(wú)效,復(fù)位接收電路,重新搜索RXD端上的負(fù)跳變。接收到停止位為1時(shí),將接收到的8位數(shù)據(jù)裝入接收數(shù)據(jù)緩沖器SBUF,置位RI,供CPU查詢(xún)或向CPU請(qǐng)求中斷。第108頁(yè),共185頁(yè),2023年,2月20日,星期四3.方式2和方式3

方式2和方式3是9位異步串行通信方式,TXD為數(shù)據(jù)發(fā)送端,RXD為數(shù)據(jù)接收端。方式2的波特率固定為振蕩器頻率的1/64或1/32,而方式3的波特率由定時(shí)器T1或T2的溢出率確定(UART1方式3的波特率由定時(shí)器T1或T4的溢出率確定)。在方式2和方式3中,一幀信息為11位:1位起始位,8位數(shù)據(jù)位(先低位后高位),1位附加的第9位數(shù)據(jù)(發(fā)送時(shí)為SCON中的TB8,接收時(shí)為SCO

溫馨提示

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

評(píng)論

0/150

提交評(píng)論