版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
項(xiàng)目五定時(shí)/計(jì)數(shù)器應(yīng)用
5.1項(xiàng)目基本技能
5.2項(xiàng)目基本知識(shí)5.3技能拓展5.4互動(dòng)環(huán)節(jié)
任務(wù)1霓虹燈控制電路(定時(shí)器實(shí)現(xiàn)定時(shí)功能)
1.任務(wù)要求利用51單片機(jī)控制8個(gè)LED燈,要求8個(gè)LED燈依次按順序點(diǎn)亮,時(shí)間間隔為1s。要求使用定時(shí)器T0,工作方式1(定時(shí)方式)。
2.硬件電路設(shè)計(jì)電路圖參見項(xiàng)目二任務(wù)3圖2-42。5.1項(xiàng)目基本技能
3.軟件設(shè)計(jì)
1)設(shè)計(jì)方法用定時(shí)器T0工作方式1,編程設(shè)置1s的程序。假定系統(tǒng)采用12MHz晶振,T0工作方式1,可選擇定時(shí)時(shí)間為50ms,再循環(huán)20次即可達(dá)到定時(shí)時(shí)間1s。
2)流程圖程序參考流程如圖5-1所示。圖5-1霓虹燈控制電路程序流程圖
3)指令代碼
(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:;;;程序名:A5_1.ASM;;;功能:間隔顯示為1s的霓虹燈程序ORG0000HMAIN: MOVR1,#8 ;定義循環(huán)次數(shù)
MOVA,#0FEH;給A賦初值為FEHNEXT:
MOVP1,A;點(diǎn)亮第1個(gè)霓虹燈
ACALLDELAY;調(diào)用延時(shí)子程序DELAY
RLA
;循環(huán)左移1位
DJNZR1,NEXT;判斷8個(gè)霓虹燈是否依次點(diǎn)亮完畢
SJMPMAIN ;;8個(gè)霓虹燈循環(huán)顯示DELAY: MOVR2,#20 ;置50ms計(jì)數(shù)循環(huán)初值
MOVTMOD,#01H ;設(shè)置定時(shí)器T0為方式1 MOVTH0,#3CH;設(shè)置定時(shí)器T0初值
MOVTL0,#0B0H SETBTR0 ;啟動(dòng)定時(shí)器T0LP1: JBCTF0,LP2
;查詢計(jì)數(shù)是否溢出
SJMPLP1 ;未到50ms,繼續(xù)計(jì)數(shù)LP2: MOVTH0,#3CH;重新設(shè)置定時(shí)器T0的初值
MOVTL0,#0B0H DJNZR2,LP1;未到1s,繼續(xù)循環(huán)
RET ;返回主程序
END ;結(jié)束
MOVTMOD,#01H語句說明:設(shè)置定時(shí)器T0的工作方式,工作在方式1,定時(shí)功能,定時(shí)工作方式與外部中斷無關(guān),而定時(shí)器T1未使用。因此,方式寄存器TMOD的初值應(yīng)為00000001B,即01H。
JBCTF0,LP2語句說明:當(dāng)定時(shí)器T0計(jì)滿數(shù)產(chǎn)生溢出時(shí),由硬件自動(dòng)置TF0=1,TF0可作查詢測試用,但只能用軟件清0。因此,語句就必須用JBC,而不能用JB位轉(zhuǎn)移指令。
(2)編寫C語言代碼。用C語言編寫的指令代碼如下://程序名:C5_1.C//功能:間隔顯示為1s的霓虹燈程序#include<reg51.h> //包含reg51.h頭文件voiddelay1s() //定義延時(shí)函數(shù)delay1s{unsignedchari; //定義無符號(hào)字符型變量ifor(i=0;i<20;i++) //循環(huán)次數(shù)為20{
TH0=(65536-50000)/256; //設(shè)置定時(shí)器T0的初值
TL0=(65536-50000)%256;TR0=1; //啟動(dòng)定時(shí)器T0while(!TF0); //查詢定時(shí)時(shí)間是否到?定時(shí)時(shí)間到,TF0=1TF0=0; //將T0溢出標(biāo)志位清零
}}
voidmain() //主函數(shù){ unsignedcharj,w; //定義無符號(hào)字符型變量j和w TMOD=0x01; //設(shè)置定時(shí)器T0的工作方式
while(1) { w=0x01; //設(shè)置w的初始值
for(j=0;j<8;j++)
P1=~w;//w取反后送P1口,點(diǎn)亮相應(yīng)的LED燈
w<<=1; //左移一位
delay1s(); //調(diào)用1s的延時(shí)函數(shù)
} }}
在上述程序中,將delay1s()函數(shù)定義在主函數(shù)main()之前,故不需要進(jìn)行函數(shù)聲明,可在主函數(shù)中直接調(diào)用。若將函數(shù)delay1s()放在主函數(shù)main()之后定義,則必須在主函數(shù)之前先聲明再調(diào)用。聲明語句如下:
voiddelay1s(
);//延時(shí)函數(shù)聲明
TH0=(65536-50000)/256,TL0=(65536-50000)%256;
定時(shí)器初值計(jì)算:由于定時(shí)器T0是16位加法計(jì)數(shù)器,分別由兩個(gè)8位專用寄存器組成,分別為TH0和TL0。計(jì)數(shù)器初值如何裝入這兩個(gè)寄存器呢?假定系統(tǒng)采用12MHz晶振,機(jī)器周期為1μs,要求定時(shí)時(shí)間為50ms,則需要進(jìn)行50000次計(jì)數(shù),而定時(shí)器T0工作方式1的計(jì)數(shù)長度為65536,(65536-50000)即為計(jì)數(shù)的初值,將其轉(zhuǎn)換為十六進(jìn)制,則高8位即為TH0的值,低8位即為TL0的值,(65536-50000)/256,求模運(yùn)算則可得到TH0的值,TL0=(65536-50000)%256,求余運(yùn)算則可得到TL0的值。
4.電路板制作所需元器件及電路板參見項(xiàng)目二任務(wù)3。將目標(biāo)代碼文件A5-1.hex或C5-1.hex加載到單片機(jī)中,可觀察到霓虹燈的顯示效果,效果與任務(wù)1的要求完全吻合。
任務(wù)2計(jì)數(shù)報(bào)警電路(定時(shí)器實(shí)現(xiàn)計(jì)數(shù)功能)
1.任務(wù)要求利用51單片機(jī)定時(shí)器T0實(shí)現(xiàn)計(jì)數(shù)功能。當(dāng)計(jì)數(shù)滿n次后,發(fā)光二極管LED發(fā)光報(bào)警,報(bào)警時(shí)間為1s,1s后自動(dòng)熄滅,其中次數(shù)n由用戶指定。
2.硬件電路設(shè)計(jì)
1)電路圖電路圖參見圖5-2。圖5-2計(jì)數(shù)器報(bào)警電路原理圖
2)電路圖說明從圖5-2中可以看出,利用51單片機(jī)的P3.4作為定時(shí)器T0的外部計(jì)數(shù)端,計(jì)數(shù)脈沖利用消抖開關(guān)JA產(chǎn)生。P1.0作為報(bào)警信號(hào)的控制端,當(dāng)P1.0=0時(shí),LED報(bào)警燈熄滅,反之LED報(bào)警燈點(diǎn)亮,且點(diǎn)亮?xí)r間為1s,1s后自動(dòng)熄滅。
3.軟件設(shè)計(jì)
1)設(shè)計(jì)方法定時(shí)器T0工作方式2,計(jì)數(shù)功能,計(jì)數(shù)初值X?=?256-n,計(jì)數(shù)次數(shù)到,LED信號(hào)燈點(diǎn)亮報(bào)警,時(shí)間間隔為1s,之后自動(dòng)熄滅。
2)流程圖程序參考流程如圖5-3所示。圖5-3計(jì)數(shù)器報(bào)警電路程序流程圖3)指令代碼編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:程序名:A5-2.ASM功能:利用定時(shí)器T0實(shí)現(xiàn)計(jì)數(shù)功能,設(shè)計(jì)數(shù)次數(shù)為
n=10。ORG0000HCLRP1.0 ;報(bào)警燈復(fù)位MOVTMOD,#06 ;定時(shí)器T0工作方式2,計(jì)數(shù)功能MOVTH0,#246 ;定時(shí)器T0的計(jì)數(shù)初值(實(shí)現(xiàn)10次計(jì)數(shù))MOVTL0,#246 SETBTR0 ;啟動(dòng)定時(shí)器T0LP1: JBCTF0,LP2 ;查詢計(jì)數(shù)是否溢出
SJMPLP1 ;次數(shù)未到,繼續(xù)計(jì)數(shù)LP2: SETBP1.0 ;計(jì)數(shù)次數(shù)到,報(bào)警燈點(diǎn)亮
ACALLDELAY ;點(diǎn)亮?xí)r間為1s CLRP1.0 ;熄滅報(bào)警燈
SJMPLP1 ;繼續(xù)等待 DELAY: MOVR1,#100;延時(shí)1s的子程序DE2: MOVR2,#10DE1: MOVR3,#250DE0: NOP NOP DJNZR3,DE0 DJNZR2,DE1 DJNZR1,DE2
RET END
MOVTH0,#246語句說明:由于定時(shí)器T0設(shè)置為方式2,計(jì)數(shù)功能,方式2的最大計(jì)數(shù)長度為256,程序設(shè)置其初值為246,則只需10次計(jì)數(shù)即可溢出,TF0溢出標(biāo)志位置1,實(shí)現(xiàn)報(bào)警燈點(diǎn)亮報(bào)警功能。
MOVTL0,#246語句說明:在方式2中,TL0用作8位計(jì)數(shù)器,TH0用以保持初值。在程序初始化時(shí),TL0和TH0由軟件賦予相同的初值。一旦TL0計(jì)數(shù)溢出,TF0將被置位,同時(shí)TH0中的初值裝入TL0,實(shí)現(xiàn)新一輪計(jì)數(shù)。(2)編寫C語言代碼。用C語言編寫的指令代碼如下://程序名:C5_2.C//功能:利用定時(shí)器T0實(shí)現(xiàn)計(jì)數(shù)功能,計(jì)數(shù)次數(shù)為n=10。#include<reg51.h> //包含reg51.h頭文件sbitP1_0=P1^0; //定義位名稱voiddelay1s() //定義延時(shí)函數(shù)delay1s{unsignedchari; //定義無符號(hào)字符型變量ifor(i=0;i<20;i++) //循環(huán)次數(shù)為20{ TH1=(65536-50000)/256; //設(shè)置定時(shí)器T1的初值 TL1=(65536-50000)%256;
TR1=1; //啟動(dòng)定時(shí)器T1while(!TF1); //查詢定時(shí)時(shí)間是否到?定時(shí)時(shí)間到,TF1=1TF1=0; //將T1溢出標(biāo)志位清零
}}voidmain() //主函數(shù){
P1_0=0; //報(bào)警復(fù)位
TMOD=0x16; //設(shè)置定時(shí)器T0和T1的工作方式,T0為方式2,T1為方式1 TH0=246; //設(shè)置計(jì)數(shù)器的初值
TL0=246; TR0=1; //啟動(dòng)定時(shí)器T0while(1){while(!TF0); //查詢計(jì)數(shù)溢出標(biāo)志位是否溢出
{TF0=0; //將T0的溢出標(biāo)志位清零
P1_0=1; //點(diǎn)亮報(bào)警燈
delay1s(); //報(bào)警燈點(diǎn)亮?xí)r間為1s P1_0=0; //熄滅報(bào)警燈
}}}
TMOD=0x16語句說明:程序中使用了2個(gè)定時(shí)器T0和T1,T0設(shè)置為方式2,計(jì)數(shù)功能,T1設(shè)置為方式1,定時(shí)功能,工作方式均與外部中斷無關(guān)。因此,方式寄存器TMOD的初值應(yīng)為00010110B,即16H。
4.電路板制作
1)計(jì)數(shù)報(bào)警電路元件清單計(jì)數(shù)報(bào)警電路所用器件如表5-1所示。
表5-1計(jì)數(shù)報(bào)警電路元件清單
2)計(jì)數(shù)報(bào)警電路的面包板制作按圖5-2所示搭接電路板,面包板連接的實(shí)物如圖5-4所示。圖5-4計(jì)數(shù)報(bào)警電路應(yīng)用電路板
將目標(biāo)代碼文件A5-2.hex或C5-2.hex加載到STC89C51單片機(jī)中,可觀察到計(jì)數(shù)報(bào)警顯示效果。知識(shí)點(diǎn)1單片機(jī)定時(shí)/計(jì)數(shù)器組成框圖
STC89C51單片機(jī)內(nèi)部有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,稱為定時(shí)器T0和定時(shí)器T1,用戶可編程選擇其作為定時(shí)器或計(jì)數(shù)器使用??删幊潭〞r(shí)/計(jì)數(shù)器的工作方式、定時(shí)時(shí)間、計(jì)數(shù)值、啟動(dòng)、中斷請求等都可以由程序來設(shè)定,其邏輯結(jié)構(gòu)圖如圖5-5所示。5.2項(xiàng)目基本知識(shí)圖5-5STC89C51定時(shí)/計(jì)數(shù)器邏輯結(jié)構(gòu)圖
由圖5-5可知,STC89C51定時(shí)/計(jì)數(shù)器由定時(shí)器T0、定時(shí)器T1、工作方式寄存器TMOD和控制寄存器TCON四部分組成。定時(shí)器T0和T1是兩個(gè)16位加法計(jì)數(shù)器,分別由兩個(gè)8位專用寄存器組成,定時(shí)器T0由TH0和TL0組成,定時(shí)器T1由TH1和TL1組成。TL0、TL1、TH0、TH1的訪問地址分別為8AH~8DH,每個(gè)寄存器均可被單獨(dú)訪問。定時(shí)器T0和T1用作定時(shí)器時(shí),是對內(nèi)部機(jī)器周期進(jìn)行計(jì)數(shù),由于機(jī)器周期是定值,若計(jì)數(shù)值確定,則定時(shí)時(shí)間也隨之確定;用作計(jì)數(shù)器時(shí),從單片機(jī)STC89C51芯片引腳T0(P3.4)和T1(P3.5)上輸入的脈沖進(jìn)行計(jì)數(shù),每輸入一個(gè)脈沖,加法計(jì)數(shù)器加1。
定時(shí)器T0、定時(shí)器T1、TMOD、TCON間通過內(nèi)部總線及邏輯電路連接,TMOD用于設(shè)置定時(shí)器的工作方式,TCON用于控制定時(shí)器的啟動(dòng)和停止。知識(shí)點(diǎn)2定時(shí)/計(jì)數(shù)器工作原理
定時(shí)工作原理:當(dāng)單片機(jī)的定時(shí)/計(jì)數(shù)器為定時(shí)工作方式時(shí),計(jì)數(shù)器對內(nèi)部的機(jī)器周期進(jìn)行計(jì)數(shù),每過一個(gè)機(jī)器周期,計(jì)數(shù)器加1,直至計(jì)滿溢出。顯然,定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的振蕩頻率有關(guān)。51單片機(jī)的一個(gè)機(jī)器周期由12個(gè)振蕩脈沖組成,若單片機(jī)系統(tǒng)采用12MHz晶振,其機(jī)器周期為1μs,這是最短的定時(shí)周期,適當(dāng)選擇定時(shí)器的初值則可獲得各種定時(shí)時(shí)間。
計(jì)數(shù)工作原理:當(dāng)單片機(jī)的定時(shí)/計(jì)數(shù)器為計(jì)數(shù)工作方式時(shí),是對單片機(jī)芯片引腳T0(P3.4)和T1(P3.5)外部輸入信號(hào)進(jìn)行計(jì)數(shù),輸入脈沖信號(hào)的下降沿將觸發(fā)計(jì)數(shù)。若前一個(gè)機(jī)器周期采樣值為“1”,下一個(gè)機(jī)器周期采樣值為“0”,則計(jì)數(shù)值加1。為了確保某個(gè)電平在變化之前至少被采樣一次,要求電平持續(xù)時(shí)間至少是一個(gè)完整的機(jī)器周期。
不管定時(shí)器T0和T1是定時(shí)工作方式還是計(jì)數(shù)工作方式,定時(shí)器在對內(nèi)部機(jī)器周期或?qū)ν獠枯斎胄盘?hào)進(jìn)行計(jì)數(shù)時(shí),均不占用CPU時(shí)間,除非定時(shí)器溢出,才能中斷CPU的當(dāng)前操作。知識(shí)點(diǎn)3方式寄存器TMOD和控制寄存器TCON
在上述任務(wù)1和任務(wù)2中,在啟動(dòng)定時(shí)/計(jì)數(shù)器工作之前,CPU必須將一些命令寫入定時(shí)/計(jì)數(shù)器中,這個(gè)過程稱為定時(shí)/計(jì)數(shù)器的初始化。定時(shí)器的初始化就是通過設(shè)置方式寄存器TMOD和控制寄存器TCON來完成的。
1.方式寄存器TMOD
TMOD為設(shè)置定時(shí)器T0和T1的工作方式,其格式如圖5-6所示。圖5-6定時(shí)器方式寄存器TMOD的位定
在圖5-6中,低4位設(shè)置定時(shí)器T0的工作方式,高4位設(shè)置定時(shí)器T1的工作方式,若單片機(jī)復(fù)位時(shí),TMOD所有位均置0,各位功能說明如下:
(1)?M1和M0:方式選擇位。兩位二進(jìn)制可形成4種編碼,對應(yīng)于4種工作方式,這幾種工作方式的功能說明如表5-2所示。各種工作方式的具體操作及功能差別將在后面敘述。表5-2定時(shí)器的4種工作方式及功能說明
(2)?:定時(shí)方式/計(jì)數(shù)方式選擇位。=0,設(shè)置為定時(shí)工作方式,=1,設(shè)置為計(jì)數(shù)工作方式。
(3)?GATE:門控位。當(dāng)GATE=0時(shí),只需將啟動(dòng)位TR0或TR1置1即可啟動(dòng)定時(shí)器,而不管或引腳電平高低。若GATE=1,不僅需要將啟動(dòng)位TR0和TR1置1,同時(shí)還需將或引腳置1,才能啟動(dòng)定時(shí)器。
例1設(shè)置定時(shí)器的工作方式寄存器TMOD。要求:定時(shí)器T0為工作方式1,定時(shí)功能,定時(shí)工作方式與外部中斷無關(guān)。由題可知,M1=0,M0=1,=0,GATE=0,因此,低4位應(yīng)為0001;而定時(shí)器T1未使用,一般將其設(shè)為0000。因此,指令形式為:MOVTMOD,#01H(匯編語言)或TMOD=0x01(C語言)。
TMOD不能進(jìn)行位尋址,只能用字節(jié)設(shè)置定時(shí)器的工作方式,低半字節(jié)設(shè)定T0,高半字節(jié)設(shè)定T1。
2.控制寄存器TCON
TCON作用是設(shè)置定時(shí)器的啟動(dòng)、停止、標(biāo)志定時(shí)器的溢出和中斷情況,其格式如圖5-7所示。圖5-7定時(shí)器控制寄存器TCON的位定義
TCON寄存器中低4位用于控制外部中斷,與定時(shí)/計(jì)數(shù)器無關(guān),它們的含義將在下一項(xiàng)目詳細(xì)介紹。當(dāng)系統(tǒng)復(fù)位時(shí),TCON所有位均置0。各位功能說明如下:
(1)?TF1(TCON.7):定時(shí)器T1的溢出標(biāo)志位。當(dāng)定時(shí)器T1計(jì)滿數(shù)產(chǎn)生溢出時(shí),由硬件自動(dòng)置TF1=1。在中斷允許時(shí),該位向CPU發(fā)出定時(shí)器1的中斷請求,若CPU響應(yīng)中斷請求,進(jìn)入中斷服務(wù)程序后,該位由硬件自動(dòng)置0。TF1也可由軟件置0,此時(shí)TF1作查詢測試使用。
(2)?TR1(TCON.6):定時(shí)器T1的啟動(dòng)位。由軟件置1或置0來啟動(dòng)或關(guān)閉定時(shí)器T1。若GATE=0,只需TR1=1即可啟動(dòng)定時(shí)器T1;若GATE=1,則不僅需要TR1=1,同時(shí)要求=1,才能啟動(dòng)定時(shí)器T1。
(3)?TF0(TCON.5):定時(shí)器T0的溢出標(biāo)志位,其功能和操作情況如同TF1。
(4)?TR0(TCON.4):定時(shí)器T0的啟動(dòng)位,其功能和操作情況如圖TR1。
TCON不僅可以進(jìn)行字節(jié)尋址,也可以進(jìn)行位尋址。
3.定時(shí)/計(jì)數(shù)器的初值計(jì)算定時(shí)/計(jì)數(shù)器的初值因工作方式的不同而不同。設(shè)最大計(jì)數(shù)值為M,則各種工作方式下的M值如下:方式0:M?=?213?=?8192;方式1:M?=?216?=?65536;方式2:M?=?28?=?256;方式3:定時(shí)器T0分為兩個(gè)8位計(jì)數(shù)器,每個(gè)M值均為256。
設(shè)定時(shí)/計(jì)數(shù)器的初值為X,系統(tǒng)的振蕩頻率為f,其機(jī)器周期,則定時(shí)時(shí)間t為
例2設(shè)置定時(shí)器T0的初始值。要求定時(shí)時(shí)間為50ms,工作在方式1,系統(tǒng)采用12MHz晶振。由題可知,機(jī)器周期,定時(shí)時(shí)間,則計(jì)數(shù)初值為
因此,指令形式為:MOVTH0,#3CHMOVTL0,#0B0H(匯編語言)或TH0=0x3C,TL0=0xB0(C語言)。知識(shí)點(diǎn)4定時(shí)/計(jì)數(shù)器的工作方式
定時(shí)器T0和T1可由軟件對TMOD中M1、M0進(jìn)行設(shè)置,可選擇4種工作方式,即方式0、方式1、方式2和方式3。在方式0、1和2時(shí),定時(shí)器T0和T1工作方式相同,在方式3時(shí),兩個(gè)定時(shí)器的工作方式不同。
1.方式0方式0為13位定時(shí)/計(jì)數(shù)器。圖5-8是定時(shí)器T0在方式0時(shí)的邏輯電路結(jié)構(gòu)圖(定時(shí)器T1的結(jié)構(gòu)和操作與定時(shí)器T0完全相同)。圖5-8定時(shí)器T0在方式0時(shí)邏輯電路結(jié)構(gòu)圖
當(dāng)GATE=0時(shí),或門被封鎖,信號(hào)無效,或門輸出為1,則與門輸出直接由TR0控制。若TR0=1,則與門開啟,控制開關(guān)被接通,定時(shí)器T0實(shí)現(xiàn)定時(shí)或計(jì)數(shù)功能;若TR0=0,則與門關(guān)閉,控制開關(guān)斷開,定時(shí)器T0被關(guān)閉。當(dāng)GATE=1時(shí),與門的輸出就需要和TR0的狀態(tài)來確定。若TR0=1,則與門開啟,引腳直接控制定時(shí)器T0的開啟或關(guān)斷。若=1,則啟動(dòng)定時(shí)器T0,若=0,則關(guān)閉定時(shí)器T0。若TR0=0,則與門被封鎖,控制開關(guān)被關(guān)斷,關(guān)閉定時(shí)器。
2.方式1方式1為16位定時(shí)/計(jì)數(shù)器,其結(jié)構(gòu)和操作幾乎與方式0相同,唯一差別在于兩者的計(jì)數(shù)長度不同。其邏輯電路結(jié)構(gòu)如圖5-9所示。圖5-9定時(shí)器T0在方式1時(shí)邏輯電路結(jié)構(gòu)圖
3.方式2方式2為8位定時(shí)/計(jì)數(shù)器,其邏輯電路結(jié)構(gòu)如圖5-10所示。圖5-10定時(shí)器T0在方式2時(shí)邏輯電路結(jié)構(gòu)圖
在圖5-10中,16位定時(shí)/計(jì)數(shù)器被拆分成了一個(gè)可以自動(dòng)重裝載的8位定時(shí)器。TH0作為一個(gè)8位寄存器使用,存放的是計(jì)數(shù)器初始值;TL0做8位的加1計(jì)數(shù)器。當(dāng)TL0計(jì)數(shù)溢出時(shí),不僅使溢出標(biāo)志位TF0置1,同時(shí)還自動(dòng)把TH0中的內(nèi)容重裝載到TL0中。因此,在方式2中,16位加法計(jì)數(shù)器被拆成兩部分:TL0用作8位計(jì)數(shù)器,TH0用以保持初值。在程序初始化時(shí),TH0和TL0由軟件賦予相同的初值,一旦TL0計(jì)數(shù)溢出,TF0將被置位,并將TH0中的初值再自動(dòng)裝入TL0中,從而進(jìn)行新一輪計(jì)數(shù)。
在方式0和方式1進(jìn)行循環(huán)計(jì)數(shù)時(shí),每次計(jì)滿溢出后,計(jì)數(shù)器都復(fù)位清0,所以要進(jìn)行新一輪計(jì)數(shù)時(shí),必須重新裝入計(jì)數(shù)初值。這不僅導(dǎo)致編程麻煩,而且影響定時(shí)時(shí)間精度。而方式2具有初值自動(dòng)裝入功能,避免了上述缺陷,適合用作較精確的定時(shí),特別適于串行口波特率發(fā)生器。
4.方式3在前3種工作方式下,定時(shí)/計(jì)數(shù)器T0和T1的功能完全相同,但在方式3下,T0和T1的功能大不相同。定時(shí)器T0的邏輯電路結(jié)構(gòu)如圖5-11所示。圖5-11定時(shí)器T0在方式3時(shí)邏輯電路結(jié)構(gòu)圖
在圖5-11中,TL0和TH0被分成兩個(gè)相互獨(dú)立的8位計(jì)數(shù)器,其中TL0用原定時(shí)器T0的控制位、引腳和中斷源,即、GATE、TR0、TF0、T0(P3.4)引腳、引腳。TL0除了僅用8位計(jì)數(shù)外,其功能與操作方式與方式0(13位計(jì)數(shù))、方式1(16位計(jì)數(shù))完全相同。同時(shí),TL0可工作在定時(shí)或計(jì)數(shù)狀態(tài)。
TH0只可用于簡單的內(nèi)部定時(shí)功能,占用了定時(shí)器T1的啟動(dòng)位TR1和溢出標(biāo)志位TF1,其啟動(dòng)和關(guān)閉受TR1的控制。定時(shí)/計(jì)數(shù)器T1無方式3狀態(tài),若將T1設(shè)置為方式3,則會(huì)使T1立即停止計(jì)數(shù)。但定時(shí)器T0設(shè)置為方式3時(shí),T1仍可工作在方式0~2。在定時(shí)器T0設(shè)置為方式3時(shí),T1的邏輯電路結(jié)構(gòu)如圖5-12所示。圖5-12定時(shí)器T0在方式3時(shí),T1邏輯電路結(jié)構(gòu)圖
在圖5-12中,由于定時(shí)器T0工作為方式3,其TH0已經(jīng)使用了定時(shí)器T1的TR1、TF1及T1的中斷源。因此,定時(shí)器T1的狀態(tài)決定是定時(shí)功能還是計(jì)數(shù)功能。同時(shí),由于沒有溢出標(biāo)志位,只能將其送往串行口。在這種情況下,定時(shí)器T1一般用作串行口波特發(fā)生器或用于不需要中斷的場合。任務(wù)3方波發(fā)生器
1.任務(wù)要求利用51單片機(jī)的定時(shí)器T0產(chǎn)生一個(gè)25Hz的方波,由單片機(jī)P1.0輸出,采用查詢方式進(jìn)行控制,設(shè)系統(tǒng)晶振頻率為12MHz。
5.3技能拓展
2.硬件電路設(shè)計(jì)設(shè)計(jì)思路:由任務(wù)要求可知,方波的頻率為25Hz,其周期應(yīng)為,方波的占空比應(yīng)為1∶1,故定時(shí)器T0用于定時(shí)功能,工作在方式1,定時(shí)時(shí)間為20ms,定時(shí)時(shí)間到,將P1.0取反即可實(shí)現(xiàn)題目所要求的功能。
定時(shí)器初值計(jì)算:系統(tǒng)晶振頻率為12MHz,則機(jī)器周期為1μs,定時(shí)時(shí)間為20ms?=20000μs,則初始值為。因此,指令形式為:MOVTH0,#0B1HMOVTL0,#0E0H(匯編語言)或TH0=0xB1,TL0=0xE0(C語言)。電路如圖5-13所示。圖5-13方波發(fā)生器電路3.軟件設(shè)計(jì)1)流程圖程序參考流程如圖5-14所示。圖5-14方波發(fā)生器電路程序流程圖2)指令代碼(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:
(2)編寫C語言代碼。用C語言編寫的指令代碼如下:
4.電路板制作
1)方波發(fā)生器電路元件清單方波發(fā)生器所用器件清單如表5-3所示。表5-3方波發(fā)生器電路元件清單
2)方波發(fā)生器電路的面包板制作按圖5-13所示搭接電路板,面包板連接的實(shí)物如圖5-15所示。圖5-15方波發(fā)生器應(yīng)用電路板
將目標(biāo)代碼文件A5-3.hex或C5-3.hex加載到STC89C51單片機(jī)中,可觀察到示波器上顯示的方波如圖5-16所示,利用示波器測得方波的周期為39.88ms,誤差非常小,實(shí)現(xiàn)了任務(wù)3所要求的功能。圖5-16方波波形周期測量圖
問1:任務(wù)1中,定時(shí)器T0使用工作于方式1,若用方式2工作,試問程序該如何編寫?程序說明:因方式2為8位計(jì)數(shù)器,其最大定時(shí)時(shí)間為256μs,為實(shí)現(xiàn)1s定時(shí)時(shí)間,可選擇定時(shí)時(shí)間為250μs,再循環(huán)4000次。5.4互動(dòng)環(huán)節(jié)
定時(shí)器初值計(jì)算:系統(tǒng)晶振頻率為12MHz,則機(jī)器周期為1μs,定時(shí)時(shí)間為250μs,則初始值為。因此,指令形式為:MOVTH0,#06HMOVTL0,#06H(匯編語言)或TH0=0x06,TL0=0x06(C語言)。用匯編語言編寫的指令代碼:
;;程序名:A5_4.ASM ;;功能:間隔顯示為1s的霓虹燈程序
ORG0000HMAIN: MOVR1,#08H ;定義循環(huán)次數(shù)
MOVA,#0FEH;給A附初值為FEH NEXT:MOVP1,A ;點(diǎn)亮第1個(gè)霓虹燈
ACALLDELAY;調(diào)用延時(shí)子程序DELAY RLA ;循環(huán)左移1位
DJNZR1,NEXT;判斷8個(gè)霓虹燈是否依次點(diǎn)亮完畢
SJMPMAIN ;8個(gè)霓虹燈循環(huán)顯示DELAY:
MOVR2,#40 ;設(shè)置循環(huán)次數(shù)4000次
MOVR3,#100 MOVTMOD,#02H
;設(shè)置定時(shí)器T0為方式2 MOVTH0,#06H;設(shè)置定時(shí)器T0的初值
MOVTL0,#06H SETBTR0 ;啟動(dòng)定時(shí)器T0LP1: JBCTF0,LP2 ;查詢計(jì)數(shù)是否溢出
SJMPLP1 ;未到250us,繼續(xù)計(jì)數(shù)LP2: DJNZR3,LP1 ;未到25ms,繼續(xù)計(jì)數(shù)
MOVR3,#100 DJNZR2,LP1 ;未到1s,繼續(xù)循環(huán)
RET ;返回主程序
END ;結(jié)束
MOVR3,#100語句說明:程序中用了兩次該語句,第一次是設(shè)置內(nèi)循環(huán)的循環(huán)次數(shù),那么第二次為什么要再次重新給R3賦值呢?因?yàn)樵谶M(jìn)行內(nèi)循環(huán)100次之后,R3的值已經(jīng)減為0,然而內(nèi)循環(huán)之后還要進(jìn)行外循環(huán),如果不給R3重新賦值100,那R3的值就是從0開始,達(dá)不到題目的要求,故內(nèi)循環(huán)結(jié)束之后,需重新給R3賦值。(2)用C語言編寫的指令代碼://程序名:C5_4.C//功能:是間隔顯示為1s的霓虹燈程序#include<reg51.h> //包含reg51.h頭文件voiddelay1s() //定義延時(shí)函數(shù)delay1s{unsignedinti; //定義整型變量ifor(i=0;i<4000;i++) //循環(huán)次數(shù)為4000次TH0=0x06; //設(shè)置定時(shí)器T0的初值
TL0=0x06;TR0=1; //啟動(dòng)定時(shí)器T0while(!TF0);//查詢定時(shí)時(shí)間是否到?定時(shí)時(shí)間到,TF0=1TF0=0; //將T0溢出標(biāo)志位清零
}}voidmain() //主函數(shù){ unsignedcharj,w; //定義無符號(hào)字符型變量j和wTMOD=0x02; //設(shè)置定時(shí)器T0的工作方式
while(1){w=0x01; //設(shè)置w的初始值
for(j=0;j<8;j++)
{P1=~w; //w取反后送P1口,點(diǎn)亮相應(yīng)的LED燈
w<<=1; //左移一位
delay1s(); //調(diào)用1s的延時(shí)函數(shù)
}}}
for(i=0;i<4000;i++)語句說明:由于變量i定義為無符號(hào)的整型變量,其數(shù)值范圍為0~65535,循環(huán)次數(shù)4000在其范圍之內(nèi)。若定義i為無符號(hào)字符型變量,則其數(shù)值范圍為0~255,循環(huán)4000次必須要用雙循環(huán)才能實(shí)現(xiàn),即用下列語句也可實(shí)現(xiàn)相同的目的。unsignedchari,k;for(i=0;i<200;i++){for(k=0;k<20;k++){……}}
問2:任務(wù)2中開關(guān)JA為什么要進(jìn)行消抖處理?答:機(jī)械式按鍵在按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來,抖動(dòng)時(shí)間一般為5~10ms,可以采取硬件消抖和軟件消抖兩種處理方式。任務(wù)2中采用的是硬件消抖,利用基本RS觸發(fā)器,當(dāng)開關(guān)JA按下或釋放時(shí),觸發(fā)器的輸出狀態(tài)保持一致,不會(huì)發(fā)生抖動(dòng)。軟件消抖的原理請讀者查閱項(xiàng)目七中的內(nèi)容。
問3:任務(wù)3中的程序段:
LP1: JBCTF0,LP2
SJMPLP1
LP2:……
請問是否可以使用其他語句來實(shí)現(xiàn)定時(shí)器的查詢目的?答:可以,下列語句也可以達(dá)到上述程序段的目的。
LP1: JNBTF0,$
CLRTF0
LP2:……
JNBTF0,$語句說明:若定時(shí)器T0定時(shí)時(shí)間未到,則TF0=0,程序繼續(xù)等待,若TF0=1,則表示溢出,則執(zhí)行下一條語句CLRTF0,將溢出標(biāo)志位TF0清零處理,為下一次定時(shí)做好準(zhǔn)備。知識(shí)回顧與項(xiàng)目小結(jié)
51單片機(jī)內(nèi)部有兩個(gè)可編程的定時(shí)/計(jì)數(shù)器T0和T1,每個(gè)定時(shí)/計(jì)數(shù)器有4種工作方式:方式0~3。方式0為13位定時(shí)/計(jì)數(shù)器;方式1為16位定時(shí)/計(jì)數(shù)器;方式2為自動(dòng)重裝載初值的8位定時(shí)/計(jì)數(shù)器;方式3只適用了定時(shí)器T0,將T0分成兩個(gè)獨(dú)立的8位定時(shí)/計(jì)數(shù)器。4種不同的工作方式,其定時(shí)/計(jì)數(shù)的最大值也各不相同。
對于定時(shí)/計(jì)數(shù)器程序的編寫包括如何設(shè)置方式寄存器TMOD、控制寄存器TCON和定時(shí)/計(jì)數(shù)器初值計(jì)算三部分。本項(xiàng)目中的3個(gè)任務(wù)詳細(xì)介紹了定時(shí)/計(jì)數(shù)器程序的編寫步驟。
本項(xiàng)目中的3個(gè)任務(wù),任務(wù)1是定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)定時(shí)1s的功能,工作在方式1,實(shí)現(xiàn)對霓虹燈的控制;任務(wù)2是定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)功能,工作在方式2,當(dāng)計(jì)數(shù)次數(shù)到,實(shí)現(xiàn)報(bào)警功能;任務(wù)3是定時(shí)/計(jì)數(shù)器綜合應(yīng)用,利用定時(shí)/計(jì)數(shù)器產(chǎn)生方波信號(hào),從P1.0輸出,利用示波器觀察方波信號(hào),并測出其周期。本項(xiàng)目中的3個(gè)任務(wù),任務(wù)1是定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)定時(shí)1s的功能,工作在方式1,實(shí)現(xiàn)對霓虹燈的控制;任務(wù)2是定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)功能,工作在方式2,當(dāng)計(jì)數(shù)次數(shù)到,實(shí)現(xiàn)報(bào)警功能;任務(wù)3是定時(shí)/計(jì)數(shù)器綜合應(yīng)用,利用定時(shí)/計(jì)數(shù)器產(chǎn)生方波信號(hào),從P1.0輸出,利用示波器觀察方波信號(hào),并測出其周期。5.5習(xí)題匯編語言部分1.單項(xiàng)選擇題(1)?51單片機(jī)的定時(shí)器T1用作定時(shí)方式時(shí)是
。
A.由內(nèi)部時(shí)鐘頻率定時(shí),一個(gè)時(shí)鐘周期加1
B.由內(nèi)部時(shí)鐘頻率定時(shí),一個(gè)機(jī)器周期加1
C.由外部時(shí)鐘頻率定時(shí),一個(gè)時(shí)鐘周期加1
D.由外部時(shí)鐘頻率定時(shí),一個(gè)機(jī)器周期加1(2)?51單片機(jī)的定時(shí)器T0實(shí)現(xiàn)計(jì)數(shù)功能,計(jì)數(shù)脈沖是
。
A.外部計(jì)數(shù)脈沖,由T1(P3.5)輸入
B.外部計(jì)數(shù)脈沖,由T0(P3.4)輸入
C.外部計(jì)數(shù)脈沖,由內(nèi)部時(shí)鐘頻率提供
D.由外部計(jì)數(shù)脈沖計(jì)數(shù)(3)?51單片機(jī)的定時(shí)器T0若工作在方式1,定時(shí)功能,則TMOD控制字為
。
A.01H B.10H C.02H D.20H(4)?51單片機(jī)的定時(shí)器T1若工作在方式2,計(jì)數(shù)功能,則TMOD控制字為
。
A.02H B.20H C.06H D.60H(5)?51單片機(jī)的定時(shí)器T0若工作在方式1,定時(shí)功能,且與外部中斷無關(guān),定時(shí)器T1工作在方式0,計(jì)數(shù)功能,且與外部中斷有關(guān),則TMOD控制字為
。
A.1CH B.C1H C.41H D.14H(6)啟動(dòng)定時(shí)器1開始定時(shí)的指令是
。
A.CLRTR0 B.CLRTR1
C.SETBTR0 D.SETBTR1(7)?51單片機(jī)的定時(shí)器T1停止計(jì)數(shù)指令為
。
A.CLRTR0 B.CLRTR1
C.SETBTR0 D.SETBTR1(8)?51單片機(jī)的定時(shí)器T0的溢出標(biāo)志為
。
A.TR0 B.TR1 C.TF0 D.TF1(9)?51單片機(jī)的定時(shí)器T0,若用軟啟動(dòng),應(yīng)使TMOD中的
。
A.GATE位置1 B.位置1
C.GATE位置0
D.位置0(10)下列指令判斷若定時(shí)器T0未計(jì)滿數(shù)就原地等待的是
。
A.JBT0,$ B.JNBTF0,$
C.JNBTR0,$ D.JBTF0,$2.填空題
(1)?51單片機(jī)的定時(shí)/計(jì)數(shù)器內(nèi)部結(jié)構(gòu)由4部分組成:①
②
③
④
。
(2)定時(shí)器T0的溢出標(biāo)志位是______,啟動(dòng)標(biāo)志位是______。
(3)定時(shí)器T1工作方式1,則其計(jì)數(shù)的最大值M=____
_。
(4)若定時(shí)器T0工作為方式1,定時(shí)功能,定時(shí)時(shí)間為30ms,假設(shè)系統(tǒng)晶振頻率為6MHz,則計(jì)數(shù)的初值為
。
(5)?51單片機(jī)的定時(shí)器T1,其計(jì)數(shù)功能的外部脈沖由
提供。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025上海徐匯市場監(jiān)督管理局招聘派遣制工作人員15人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇省徐州市區(qū)屬事業(yè)單位招聘85人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年寧德市福安事業(yè)單位公開招聘工作人員98人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省遂寧經(jīng)濟(jì)技術(shù)開發(fā)區(qū)教師招聘39人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025“才聚齊魯成就未來”山東種業(yè)集團(tuán)限公司權(quán)屬企業(yè)招聘2人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)集錦
- 2025年度二零二五年度禮儀培訓(xùn)機(jī)構(gòu)學(xué)生社會(huì)交往能力提升協(xié)議3篇
- 2025年度公司法人掛名市場推廣合同2篇
- 2025年度二零二五年度住宅室內(nèi)外裝修一體化合同
- 2025年度賓館客房布草洗滌與環(huán)保材料使用專項(xiàng)合同2篇
- 外科學(xué) 手術(shù) 基礎(chǔ)
- 音樂鑒賞(西安交通大學(xué))智慧樹知到期末考試答案2024年
- 2024年03月烏魯木齊海關(guān)所屬事業(yè)單位2024年面向社會(huì)公開招考14名工作人員筆試參考題庫附帶答案詳解
- 創(chuàng)新者的窘境讀書課件
- 看不見的殺手-病毒性傳染病智慧樹知到期末考試答案2024年
- 2024年福建省閩投人才服務(wù)有限公司招聘筆試參考題庫附帶答案詳解
- 《福建省整體裝配式衛(wèi)浴間標(biāo)準(zhǔn)設(shè)計(jì)圖集》
- 疾控中心慢病科工作總結(jié)
- 錨索張拉伸長量計(jì)算
- 部編版語文九年級(jí)上冊單元復(fù)習(xí)課教案
- 孕酮檢驗(yàn)報(bào)告
評論
0/150
提交評論