




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章AT89S51單片機(jī)的
定時(shí)器/計(jì)數(shù)器
內(nèi)容概要:介紹AT89S51單片機(jī)片內(nèi)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)與功能,兩種工作模式和4種工作方式,以及與其相關(guān)的兩個(gè)特殊功能寄存器TMOD和TCON各位的定義及其編程,最后介紹定時(shí)器/計(jì)數(shù)器的C51編程及應(yīng)用實(shí)例。2021/5/916.1定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),由高8位THX(X=0或1)和低8位TLX兩個(gè)寄存器組成。TMOD是定時(shí)/計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動(dòng)和停止及設(shè)置溢出標(biāo)志。
外部脈沖2021/5/92圖6-1AT89S51單片機(jī)的定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖2021/5/936.1.1工作方式控制寄存器TMODAT89S51定時(shí)器工作方式寄存器TMOD用于選擇工作模式和工作方式,字節(jié)地址為89H,不能位尋址。8位分為兩組,高4位控制T1,低4位控制T0。(1)GATE—門(mén)控位GATE=0時(shí),僅由運(yùn)行控制位TRx(x
=
0,1)來(lái)控制定時(shí)器運(yùn)行GATE=1時(shí),用外中斷引腳INT0*(或INT1*)上的電平與運(yùn)行控制位TRx共同控制定時(shí)器運(yùn)行。圖6-2寄存器TMOD格式2021/5/94(2)M1、M0—工作方式選擇位M1、M0的4種編碼,對(duì)應(yīng)于4種工作方式的選擇。(3)C/T*—計(jì)數(shù)器模式和定時(shí)器模式選擇位C/T*=0,為定時(shí)器工作模式,對(duì)單片機(jī)的晶體振蕩器12分頻后的脈沖進(jìn)行計(jì)數(shù)。C/T*=1,為計(jì)數(shù)器工作模式,計(jì)數(shù)器對(duì)外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負(fù)跳變)計(jì)數(shù)。2021/5/956.1.2定時(shí)器/計(jì)數(shù)器控制寄存器TCONTCON字節(jié)地址為88H,可位尋址,位地址為88H~8FH。(1)TF1、TF0—計(jì)數(shù)溢出標(biāo)志位。當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),該位置“1”。使用查詢(xún)方式時(shí),應(yīng)注意查詢(xún)有效后,使用軟件及時(shí)將該位清“0”。使用中斷方式時(shí),中斷請(qǐng)求標(biāo)志位在進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清“0”。(2)TR1、TR0—計(jì)數(shù)運(yùn)行控制位。TR1位(或TR0位)=1,啟動(dòng)定時(shí)器工作。TR1位(或TR0位)=0,停止定時(shí)器工作。該位可由軟件置“1”或清“0”。圖6-3TCON格式2021/5/966.2定時(shí)器/計(jì)數(shù)器的4種工作方式6.2.1方式0——M1M0=00方式0為13位計(jì)數(shù),由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時(shí)向TH0進(jìn)位,TH0溢出時(shí),置位TCON中的TF0標(biāo)志,向CPU發(fā)出中斷請(qǐng)求。2021/5/97圖6-4定時(shí)器/計(jì)數(shù)器方式0邏輯結(jié)構(gòu)框圖C/T*位決定定時(shí)器/計(jì)數(shù)器的兩種工作模式(1)C/T*=0,T1(或T0)為定時(shí)器工作模式,把時(shí)鐘振蕩器12分頻后的脈沖作為計(jì)數(shù)信號(hào)。(2)C/T*=1,T1(或T0)為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為P3.4(或P3.5)引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加1。2021/5/98GATE位決定定時(shí)器的運(yùn)行控制取決于TRx一個(gè)條件,還是取決于TRx和INTX*(x=0,1)引腳狀態(tài)這兩個(gè)條件。(1)GATE=0時(shí),僅由TR0控制與門(mén)的開(kāi)啟。與門(mén)輸出1時(shí),控制開(kāi)關(guān)接通,計(jì)數(shù)開(kāi)始;(2)GATE=1時(shí),由外中斷引腳信號(hào)控制或門(mén)的輸出,此時(shí)控制與門(mén)的開(kāi)啟由外中斷引腳信號(hào)和TR0共同控制。當(dāng)TR0=1時(shí),外中斷引腳信號(hào)引腳的高電平啟動(dòng)計(jì)數(shù),外中斷引腳信號(hào)引腳的低電平停止計(jì)數(shù)。這種方式常用來(lái)測(cè)量外中斷引腳上正脈沖的寬度。定時(shí)器模式時(shí)有:N=t/Tcy計(jì)數(shù)初值計(jì)算的公式為:2021/5/99
6.2.2方式1——M1M0=01方式1的計(jì)數(shù)位數(shù)是16位,由TLX作為低8位、THX作為高8位,組成了16位加1計(jì)數(shù)器。計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為:
2021/5/910
6.2.3方式2——M1M0=10方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式。
工作方式2特別適合于用作較精確的脈沖信號(hào)發(fā)生器。
計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為:
工作過(guò)程
2021/5/911
T0分成兩個(gè)8位定時(shí)/計(jì)數(shù)器TL0和TH0;
TL0:既可計(jì)數(shù)也可定時(shí),是一個(gè)8位定時(shí)/計(jì)數(shù)器。占用了T0
所有控制位:C/T,TR0,GATE,TF0和INT0、T0引腳;
TH0:只能作為定時(shí)器,因?yàn)門(mén)0已被TL0占用,TH0用T1的控制位:TR1、TF1;6.2.4方式3——M1M0=112021/5/91213T0在方式3時(shí)T1的工作模式T1只能工作在0、1、2方式,作為串行口的波特率發(fā)生器使用。因?yàn)門(mén)1的運(yùn)行控制位TR1及計(jì)數(shù)溢出標(biāo)志位TF1已被定時(shí)/計(jì)數(shù)器T0借用。當(dāng)作為波特率發(fā)生器使用時(shí),只需要設(shè)置好工作方式,便可自動(dòng)運(yùn)行。如要停止工作,只需送入一個(gè)把T1設(shè)置為方式3的方式控制字。因?yàn)槎〞r(shí)/計(jì)數(shù)器T1不能在方式3下工作,因?yàn)門(mén)1處于方式3時(shí)相當(dāng)于TR1
=
0,停止計(jì)數(shù)。2021/5/9136.3對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求當(dāng)定時(shí)器/計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來(lái)自外部輸入引腳T0或T1。當(dāng)輸入信號(hào)產(chǎn)生由1至0的跳變(即負(fù)跳變)時(shí),計(jì)數(shù)器值增1。由于確認(rèn)一次負(fù)跳變花2個(gè)機(jī)器周期,即24個(gè)振蕩周期,因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。圖6-12
對(duì)外部計(jì)數(shù)輸入信號(hào)的要求例如,選用6MHz頻率的晶體,允許輸入的脈沖頻率最高為250kHz。如果選用12MHz頻率的晶體,則可輸入最高頻率為500kHz的外部脈沖。2021/5/914156.3對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求當(dāng)定時(shí)器/計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來(lái)自外部輸入引腳T0或T1。當(dāng)輸入信號(hào)產(chǎn)生由1至0的跳變(即負(fù)跳變)時(shí),計(jì)數(shù)器值增1。由于確認(rèn)一次負(fù)跳變花2個(gè)機(jī)器周期,即24個(gè)振蕩周期,因此外部輸入計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。圖6-12
對(duì)外部計(jì)數(shù)輸入信號(hào)的要求例如,選用6MHz頻率的晶體,允許輸入的脈沖頻率最高為250kHz。如果選用12MHz頻率的晶體,則可輸入最高頻率為500kHz的外部脈沖。2021/5/915時(shí)間常數(shù)的計(jì)算時(shí)間常數(shù):定時(shí)器/計(jì)數(shù)器T0或T1的初始計(jì)數(shù)值,在T0或T1被啟動(dòng)后,每個(gè)機(jī)器周期使計(jì)數(shù)器中的計(jì)數(shù)值加1,計(jì)數(shù)器產(chǎn)生溢出后。定時(shí)時(shí)間:計(jì)數(shù)器溢出時(shí)間,時(shí)間常數(shù)越大,定時(shí)時(shí)間就越短;時(shí)間常數(shù)越小,定時(shí)時(shí)間就越長(zhǎng)。時(shí)鐘的頻率越高,定時(shí)時(shí)間越短;時(shí)鐘的頻率越低,定時(shí)時(shí)間越長(zhǎng)。2021/5/916設(shè)系統(tǒng)時(shí)鐘的頻率為fosc,計(jì)數(shù)器的初始值為N,定時(shí)器工作于方式1,則定時(shí)時(shí)間:
T=(216-N)×12/fosc(1)
如果定時(shí)器工作于方式2或方式3,定時(shí)時(shí)間為:
T=(28-N)×12/fosc(2)
當(dāng)初始值N=0時(shí),如果fosc=12MHZ,最大定時(shí)時(shí)間為:方式1為:Tmax=216×12/fosc=65536us=65.536ms
方式2、方式3為:Tmax=28×12/fosc=256us根據(jù)定時(shí)時(shí)間T,及公式(1)、(2)分別可以求出初值N為:方式1:
N=216-T×fosc/12(3)方式2、方式3:N=28-T×fosc/12(4)如果fosc=12MHZ,以上公式可簡(jiǎn)化為方式1:N=216-T
方式2、方式3:N=28-T2021/5/917
例如:系統(tǒng)的時(shí)鐘頻率是12MHz,在方式1下,如果希望定時(shí)器/計(jì)數(shù)器T0的定時(shí)時(shí)間T為10ms,則初值N=216-T=65536-10000=55536
如何將55536給兩個(gè)8位寄存器TH0、TL0賦值呢?可將十進(jìn)制數(shù)55536轉(zhuǎn)換成四位十六進(jìn)制數(shù),將高2位送TH0,低2位送TL0。
更簡(jiǎn)單的方法是:對(duì)于16位計(jì)數(shù)器來(lái)講,216等效為0,對(duì)于8位計(jì)數(shù)器,28等效為0,這樣公式(3)、(4)可簡(jiǎn)化為N=-T,直接用下面兩條語(yǔ)句就可以完成計(jì)數(shù)器初值的設(shè)置:
TH0=-10000/256;//取-N的高8位
TL0=-10000%256;//取-N的低8位
例如:設(shè)系統(tǒng)的時(shí)鐘頻率是12MHz,定時(shí)器工作于方式2,定時(shí)時(shí)間200us。根據(jù)前面分析,N=-T=-200,可直接用以下語(yǔ)句實(shí)現(xiàn):
TH0=-200;TL0=-200;2021/5/918MCS-51單片機(jī)的定時(shí)器是可編程的,但在進(jìn)行定時(shí)或計(jì)數(shù)之前要對(duì)程序進(jìn)行初始化,具體步驟如下:(1)確定工作方式字:對(duì)TMOD寄存器正確賦值;(2)確定定時(shí)初值:計(jì)算初值,直接將初值寫(xiě)入寄存器的TH0、TL0或TH1、TL1; 初值計(jì)算:設(shè)計(jì)數(shù)器的最大值為M,則置入的初值X為: 計(jì)數(shù)方式:X=M-計(jì)數(shù)值 定時(shí)方式:由(M-X)T=定時(shí)值,得X=M-定時(shí)值/T T為計(jì)數(shù)周期,是單片機(jī)的機(jī)器周期。 (模式0-M為213,模式1-M為216,模式2和3-M為28)(3)根據(jù)需要,對(duì)IE置初值,開(kāi)放定時(shí)器中斷;(4)啟動(dòng)定時(shí)/計(jì)數(shù)器,對(duì)TCON寄存器中的TR0或TR1置位,置位以后,計(jì)數(shù)器即按規(guī)定的工作模式和初值進(jìn)行計(jì)數(shù)或開(kāi)始定時(shí)。6.4定時(shí)器/計(jì)數(shù)器的編程和應(yīng)用2021/5/9196.4.1P1口外接的8只LED每0.5s閃亮一次。【例6-1】在AT89S51單片機(jī)的P1口上接有8只LED(電路見(jiàn)圖4-7)。下面采用定時(shí)器T0的方式1的定時(shí)中斷方式,使P1口外接的8只LED每0.5s閃亮一次。(1)設(shè)置TMOD寄存器方式1;計(jì)時(shí)工作模式;僅由TR0來(lái)控制;T1不使用。TMOD寄存器應(yīng)初始化為0x01=00000001B2021/5/920(2)計(jì)算T0計(jì)數(shù)初值設(shè)定時(shí)時(shí)間5ms(即5000μs),設(shè)定時(shí)器T0的計(jì)數(shù)初值為X,假設(shè)晶振的頻率為11.0592MHz,則定時(shí)時(shí)間為:定時(shí)時(shí)間=(216?X)
12/晶振頻率則5000=(216
?X)
12/11.0592得:X=60928,轉(zhuǎn)換成16進(jìn)制后為:0xee00,其中0xee裝入TH0,0x00裝入TL0。(3)設(shè)置IE寄存器本例由于采用定時(shí)器T0中斷,因此需將IE寄存器中的EA、ET0位置1。(4)啟動(dòng)和停止定時(shí)器T0將定時(shí)器控制寄存器TCON中的TR0=1,則啟動(dòng)定時(shí)器T0;TR0=0,則停止定時(shí)器T0定時(shí)。2021/5/921#include<reg51.h>Chari=100;/*給變量i賦初值,定時(shí)0.5S,每次定時(shí)中斷5MS,需要中斷100次*/voidmain(){ TMOD=0x01; /*設(shè)置定時(shí)器T0為方式1*/ TH0=0xee; /*向TH0寫(xiě)入初值的高8位*/ TL0=0x00; /*向TL0寫(xiě)入初值的低8位*/ P1=0x00; /*P1口8只LED點(diǎn)亮*/ EA=1; /*總中斷允許*/ ET0=1; /*定時(shí)器T0中斷允許*/ TR0=1; /*啟動(dòng)定時(shí)器T0*/ while(1); /*無(wú)窮循環(huán),等待定時(shí)中斷*/}2021/5/922/*以下為定時(shí)器T0的中斷服務(wù)程序*/voidT0_int(void)interrupt1
{ TH0=0xee;/*給T0裝入16位初值,計(jì)4608個(gè)數(shù)后,T0溢出 TL0=0x00; i--;/*循環(huán)次數(shù)減1*/ if(i<=0) { P1=~P1; /*P1口按位取反*/ i=100; /*重新設(shè)置循環(huán)次數(shù)*/ }}2021/5/923
[案例2]如圖所示,P0口接8只發(fā)光二極管,編程使發(fā)光管輪流點(diǎn)亮,點(diǎn)亮?xí)r間為500ms,要求使用定時(shí)器T0來(lái)控制,設(shè)晶振為12MHz。2021/5/924
設(shè)計(jì)思想
我們可將P0口的初值設(shè)置為0xFE,對(duì)應(yīng)于發(fā)光管D1亮,每隔500ms將P0的值循環(huán)左移一位,這一周期性的定時(shí)作業(yè)用T0來(lái)完成。當(dāng)時(shí)鐘頻率為12MHZ時(shí),在定時(shí)器的4種工作方式中,方式1的最大溢出時(shí)間最長(zhǎng),但即使在方式1,最大的溢出時(shí)間也只有65.536ms,所以我們不能在每次中斷時(shí)都執(zhí)行上述移位操作??梢赃@樣處理:將定時(shí)器T0的溢出時(shí)間設(shè)定為50ms,累計(jì)滿(mǎn)10次中斷正好500ms,才允許程序執(zhí)行1次移位動(dòng)作。2021/5/925
主函數(shù)ucharcount=0;//50ms定時(shí)中斷次數(shù)計(jì)數(shù)器voidmain(void){led=0xfe;TMOD=0x01;//T0工作于方式1TH0=-50000/256;//定時(shí)時(shí)間為50msTL0=-50000%256;ET0=1;//允許T0中斷
TR0=1;//啟動(dòng)T0定時(shí)
EA=1;//CPU開(kāi)中斷
while(1);}2021/5/926voidtime0(void)interrupt1{TH0=-50000/256;TL0=-50000%256;count++;if(count==10){count=0;led=_crol_(led,1);P0=led;}}定時(shí)器T0中斷服務(wù)程序重新裝入時(shí)間常數(shù)每中斷一次,計(jì)數(shù)器加110次中斷為0.5秒滿(mǎn)10次變量led左移1位送P0口2021/5/9276.4.2計(jì)數(shù)器的應(yīng)用【例6-2】
采用定時(shí)器T1的方式1的中斷計(jì)數(shù)方式,如圖6-13所示,計(jì)數(shù)輸入引腳T1(P3.5)上外接開(kāi)關(guān)K1,作為計(jì)數(shù)信號(hào)輸入。按4次K1后,P1口的8只LED閃爍不停。(1)設(shè)置TMOD寄存器T1工作在方式1,應(yīng)使TMOD的M1、M0=01;設(shè)置計(jì)數(shù)器工作模式C/T*=1;對(duì)T0的運(yùn)行控制僅由TR0來(lái)控制,應(yīng)使GATE0=0。定時(shí)器T0不使用,各相關(guān)位均設(shè)為0。所以,TMOD寄存器應(yīng)初始化為0x50。圖6-132021/5/928(2)計(jì)算T1計(jì)數(shù)初值由于每按4次K1,計(jì)數(shù)一次,因此計(jì)數(shù)器的初值為65536-4=65532,將其轉(zhuǎn)換成16進(jìn)制后為:0xfffc,因此,TH0=0xff,TL0=0xfc。(3)設(shè)置IE寄存器本例由于采用定時(shí)器T1中斷,因此需將IE寄存器中的EA、ET1位置1。(4)啟動(dòng)和停止定時(shí)器T1將定時(shí)器控制寄存器TCON中的TR1=1,則啟動(dòng)定時(shí)器T1計(jì)數(shù);TR1=0,則停止定時(shí)器T1計(jì)數(shù)。參考程序如下:2021/5/929#include<reg51.h>/*定義延時(shí)函數(shù)Delay(),i是形式參數(shù),不能賦初值*/voidDelay(unsignedinti){ unsignedintj; /*變量i由實(shí)際參數(shù)傳入一個(gè)值,因此i不能賦初值*/ for(;i>0;i--) for(j=0;j<125;j++) {;} /*空函數(shù)*/}voidmain() /*主函數(shù)*/{ TMOD=0x50; /*設(shè)置定時(shí)器T1為方式1計(jì)數(shù)*/ TH0=0xff; /*向TH0寫(xiě)入初值的高8位*/2021/5/930 TL0=0xfc; /*向TL0寫(xiě)入初值低8位*/ EA=1; /*總中斷允許*/ ET1=1; /*T1中斷允許*/ TR1=1; /*啟動(dòng)T1*/ while(1); /*無(wú)窮循環(huán),等待定時(shí)中斷*/}/*以下為定時(shí)器T1的中斷服務(wù)程序*/voidT1_int(void)interrupt3{ for(;;) /*無(wú)限循環(huán)*/ { P1=0xff; /*8位LED全滅*/ Delay(500); /*延時(shí)500ms*/ P1=0; /*8位LED全亮*/ Delay(500); /*延時(shí)500ms*/ }}2021/5/931[案例4]用定時(shí)器來(lái)控制數(shù)碼管的動(dòng)態(tài)顯示。
用定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的方法:設(shè)定時(shí)器的定時(shí)時(shí)間為1ms,每次產(chǎn)生溢出中斷,就根據(jù)位選變量bsel(主程序中將其初值設(shè)置為0xfe)送位選口,點(diǎn)亮一位數(shù)碼管,并將bsel左移一位,為下一位的顯示做好準(zhǔn)備,4次定時(shí)中斷分別完成4位數(shù)碼管的顯示,之后將bsel的值再次初始化為0xfe,準(zhǔn)備下一輪顯示。
因此這種顯示方式由定時(shí)中斷自動(dòng)完成,無(wú)需在主程序中調(diào)用2021/5/932主程序ucharbsel,n;voidmain(void){n=0;bsel=0xfe;//首先顯示數(shù)碼管的最低位
TMOD=0x01;//T0工作于定時(shí)方式2TH0=-1000/256;//T0的定時(shí)時(shí)間為1000usTL0=-1000%256;ET0=1;//允許T0中斷
TR0=1;//啟動(dòng)定時(shí)
EA=1;//開(kāi)中斷
while(1);}ucharcodesegtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c};uchardbuf[4]={4,3,2,1};
字符0~F的字形碼表顯示緩存,存放要顯示字符2021/5/933voidtime0(void)interrupt1{TH0=-1000/256;TL0=-1000%256;P0=0xff;P2=bsel;P0=segtab[dbuf[n]];bsel=_crol_(bsel,1);n++; if(n==4) {n=0; bsel=0xfe; }}重新裝入時(shí)間常數(shù)定時(shí)器T0中斷服務(wù)程序熄滅數(shù)碼管,防止上一位字符在當(dāng)前位置顯示出來(lái)。點(diǎn)亮當(dāng)前位根據(jù)顯示緩存查字段碼準(zhǔn)備顯示下一位指向下一位要顯示的數(shù)據(jù)如果四位已顯示完,重新從最低位開(kāi)始2021/5/9346.4.3擴(kuò)展一個(gè)外部中斷源方式2可自動(dòng)重新裝載初值。此方式可省去用戶(hù)程序中重新裝初值的指令。當(dāng)某個(gè)定時(shí)器/計(jì)數(shù)器不使用時(shí),可為AT89S51擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源。
基本思想:把定時(shí)器溢出中斷做成外部中斷,然后把計(jì)數(shù)輸入信號(hào)接到定時(shí)器的相應(yīng)引腳上T0腳(或T1腳),并把定時(shí)器被設(shè)置為方式2(自動(dòng)裝入常數(shù)方式)計(jì)數(shù)工作模式,計(jì)數(shù)器TH0、TL0初值均為0FFH,并允許T0中斷,總中斷開(kāi)放。當(dāng)檢測(cè)到T0腳(或T1腳)引腳電平發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器TF0(或TF1)溢出,這時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求。【例6-3】擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源,把定時(shí)器T0計(jì)數(shù)輸入引腳作為外部中斷請(qǐng)求信號(hào)的輸入端。2021/5/935#include<reg51.h>voidmain(){……… TMOD=0x06; /*設(shè)置定時(shí)器T0為方式2計(jì)數(shù)*/ TH0=0xff; /*給T0裝入初值*/ TL0=0xff;/*給T0裝入初值*/ ET0=1; /*允許T0中斷*/ EA=1; /*總中斷開(kāi)*/ TF0=0; /*T0中斷溢出標(biāo)志位清0*/ TR0=1 /*接通T0計(jì)數(shù)*/ while(1) /*無(wú)限循環(huán)等待*/}/*以下為定時(shí)器T0的中斷服務(wù)程序*/voidT0_int(void)interrupt1using0{┉┉} /*外中斷處理部分*/2021/5/9366.4.4P1.0上產(chǎn)生周期為2ms的方波【例6-4】系統(tǒng)時(shí)鐘為12MHz,編程實(shí)現(xiàn)從P1.0引腳上輸出一個(gè)周期為2ms的方波,如圖6-14所示?;舅枷耄阂赑1.0上產(chǎn)生周期為2ms的方波,定時(shí)器應(yīng)產(chǎn)生1ms的周期性的定時(shí),定時(shí)對(duì)P1.0求反。選擇定時(shí)器T0,方式1定時(shí),采用中斷方式,GATE不起作用。圖6-14
定時(shí)器控制P1.0輸出一個(gè)周期為2ms的方波2021/5/937計(jì)算T0的初值計(jì)算:設(shè)T0的初值為X,則
(216
?
X)
1
10?6
=
1
10?3=
65536?X
=1000則初值為:65536?1000=64536,因此TH0=(65536
?1000)
/256,TL0=(65536
?1000)
%256。參考程序如下:2021/5/938#include<reg51.h>sbitP1_0=P1^0;voidmain(void){ TMOD=0x01; /*設(shè)置定時(shí)器T0為方式2計(jì)數(shù)*/ P1_0=0; TH0=(65536
?1000)
/256; /*給T0裝入初值*/ TL0=(65536
?1000)
%256; /*給T0裝入初值*/ ET0=1; /*允許T0中斷*/ EA=1; /*總中斷開(kāi)*/ TR0=1 /*接通T0計(jì)數(shù)*/ do{} while(1); /*無(wú)限循環(huán)等待*/}voidT0_int(void)interrupt1using1{ P1_0=!P1_0; TH0=(65536
?1000)
/256; TL0=(65536
?1000)
%256;}2021/5/9396.4.5P1.1上產(chǎn)生周期為1s的方波【例6-5】假設(shè)系統(tǒng)時(shí)鐘為12MHz,編程實(shí)現(xiàn)從P1.1引腳上輸出一個(gè)周期為1s的方波?;舅枷耄阂赑1.0上產(chǎn)生周期為1s的方波,定時(shí)器應(yīng)產(chǎn)生500ms的周期性定時(shí),定時(shí)到則對(duì)P1.0求反。由于定時(shí)時(shí)間較長(zhǎng),用定時(shí)器不能直接實(shí)現(xiàn),直接定時(shí)時(shí)間最長(zhǎng)的就是方式1,僅為65ms(系統(tǒng)時(shí)鐘12MHz)多一點(diǎn)。
實(shí)現(xiàn):T0定為10ms定時(shí),每10ms對(duì)P1.0求反一次,P1.0輸出的脈沖加到定時(shí)器T1的計(jì)數(shù)輸入腳P3.5(T1腳),作為計(jì)數(shù)輸入,定時(shí)500ms需計(jì)數(shù)50次。T1設(shè)為方式2計(jì)數(shù),初值X為:28?X=50,則X=206,2021/5/940所以TH1=TL1=206。T0設(shè)為方式1定時(shí),則控制字為61H。定時(shí)器T0和T1均采用中斷方式工作。參考程序如下:#include<reg51.h>sbitP1_0=P1^0;sbitP1_1=P1^1;voidmain(void){TMOD=0x61; /*設(shè)置定時(shí)器T0為方式1定時(shí),T1為方式2計(jì)數(shù)*/P1_0=0;TH0=(65536
?10000)
/256; /*給T0裝初值*/TL0=(65536
?10000)
%256;TH1=206; /*給T1裝初值*/TL1=206;2021/5/941EA=1; /*總中斷開(kāi)*/ET0=1; /*允許T0中斷*/ET1=1; /*允許T1中斷*/TR0=1;TR1=1;while(1); }voidT0_int(void)interrupt1{ TH0=(65536
?1000)
/256;TL0=(65536
?1000)
%256;P1_0=!P1_0;}voidT1_int(void)interrupt3{P1_1=!P1_1; }; /*P1.1腳產(chǎn)生1s的方波*/。2021/5/9426.4.6T1控制發(fā)出1KHz的音頻信號(hào)【例6-6】
利用定時(shí)器T1的中斷來(lái)控制蜂鳴器發(fā)出1KHz的音頻信號(hào),電路圖見(jiàn)圖6-15。假設(shè)系統(tǒng)時(shí)鐘為11.0592MHz,則每個(gè)脈沖的周期為12/11.0592=1.085μs。1KHz的音頻信號(hào)周期為1ms,因此要計(jì)數(shù)的脈沖數(shù)為1000/1.085=921次。所以T1的初值:
TH1=(65536
?921)
/256;TL1=(65536
?921)
%256參考程序如下:#include<reg51.h>sbitsound=P1^7;2021/5/943
voidmain(void) { EA=1; /*總中斷開(kāi)*/ ET1=1; /*
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年沈陽(yáng)大車(chē)貨運(yùn)資格證考試題
- 2025年貴陽(yáng)貨運(yùn)從業(yè)資格證考試模擬試題及答案大全解析
- 單位綠化樹(shù)木修剪合同范本
- 上水泥合同范本
- 冷庫(kù)設(shè)備租用合同范本
- 企業(yè)收款合同范本
- 協(xié)議客戶(hù)合同范本
- 公路項(xiàng)目總承包合同范本
- 制作樣冊(cè)合同范例
- 醫(yī)院食堂購(gòu)銷(xiāo)合同范本
- 2024年南京旅游職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 《電商直播》 課件 項(xiàng)目一 走入電商直播
- 《中國(guó)宮腔鏡診斷與手術(shù)臨床實(shí)踐指南(2023版)》解讀課件
- 中考語(yǔ)文十大專(zhuān)題總復(fù)習(xí)資料
- 汽車(chē)駕駛員專(zhuān)業(yè)競(jìng)賽實(shí)施方案
- 知乎的SWOT分析(表格)
- 常用家電維修基礎(chǔ)知識(shí)(課堂PPT)
- 楊氏太極拳37式拳譜
- 臥式設(shè)備安裝
- 橋梁施工危險(xiǎn)源辨識(shí)與防控措施
- CFG樁施工記錄表范本
評(píng)論
0/150
提交評(píng)論