中斷系統(tǒng)和定時(shí)計(jì)數(shù)器_第1頁
中斷系統(tǒng)和定時(shí)計(jì)數(shù)器_第2頁
中斷系統(tǒng)和定時(shí)計(jì)數(shù)器_第3頁
中斷系統(tǒng)和定時(shí)計(jì)數(shù)器_第4頁
中斷系統(tǒng)和定時(shí)計(jì)數(shù)器_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

中斷系統(tǒng)和定時(shí)計(jì)數(shù)器第一頁,共一百一十三頁,2022年,8月28日4.1中斷系統(tǒng)4.1.1中斷系統(tǒng)的基本概念

某人看書——某人正在處理一件事A電話鈴響——出現(xiàn)另一件須立即解決的事B暫??磿兄笰 書中作記號——記錄斷點(diǎn),便于接續(xù)電話談話——處理B 繼續(xù)看書——繼續(xù)A的工作 保護(hù)斷點(diǎn)中斷響應(yīng)中斷請求中斷返回1.中斷的概念

(1)現(xiàn)實(shí)生活中的中斷:第二頁,共一百一十三頁,2022年,8月28日

中斷原因:

一個(gè)人不可能同時(shí)完成兩項(xiàng)任務(wù)。

單片機(jī)只有一個(gè)CPU,一旦面臨多任務(wù),它也會(huì)中斷嗎?先接電話,然后再繼續(xù)看書,這樣效率最高!4.1.1中斷系統(tǒng)的基本概念第三頁,共一百一十三頁,2022年,8月28日(2)單片機(jī)中的中斷CPU在處理某一事件A時(shí),發(fā)生了另一事件B請求CPU迅速去處理(中斷發(fā)生或中斷請求);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回)。中斷請求→中斷響應(yīng)→中斷服務(wù)→中斷返回中斷過程事件B的處理過程事件A事件B什么是中斷?第四頁,共一百一十三頁,2022年,8月28日2.中斷技術(shù)的應(yīng)用并行處理

CPU可以與多臺(tái)外設(shè)并行工作,并分時(shí)與他們進(jìn)行信息交換,提高了CPU的工作效率。實(shí)時(shí)控制

單片機(jī)應(yīng)用系統(tǒng)可能隨機(jī)請求CPU提供服務(wù)。有了中斷系統(tǒng),CPU就可以立即響應(yīng)并予以處理。故障處理

單片機(jī)系統(tǒng)在工作時(shí)可能會(huì)出現(xiàn)一些突發(fā)故障,如電源斷電,存儲(chǔ)器出錯(cuò),程序執(zhí)行錯(cuò)誤(如除數(shù)為0)等,一旦出現(xiàn)故障,CPU就可及時(shí)轉(zhuǎn)去執(zhí)行故障處理程序,而不必停機(jī)。第五頁,共一百一十三頁,2022年,8月28日3.中斷系統(tǒng)

為實(shí)現(xiàn)中斷功能而配置的硬件和編寫的軟件就是中斷系統(tǒng)。中斷由誰來實(shí)施?中斷功能由中斷系統(tǒng)來執(zhí)行。第六頁,共一百一十三頁,2022年,8月28日圖4-1中斷系統(tǒng)的結(jié)構(gòu)框圖第七頁,共一百一十三頁,2022年,8月28日4.1.2中斷源——中斷的申請方能夠向CPU發(fā)出中斷申請的部件稱為中斷源。80C51單片機(jī)有5個(gè)中斷源。見下表

那些部件可以向CPU申請中斷呢?中斷源

說明

外部中斷從P3.2引腳引入的外部中斷申請定時(shí)器T0中斷定時(shí)器T0溢出時(shí)引發(fā)中斷申請外部中斷從P3.3引腳引入的外部中斷申請定時(shí)器T1中斷定時(shí)器T1溢出時(shí)引發(fā)中斷申請串行口中斷一次串行發(fā)送或接收完成后,發(fā)出中斷申請第八頁,共一百一十三頁,2022年,8月28日4.1.3中斷控制——中斷的控制“工具”中斷允許寄存器IE中斷優(yōu)先級寄存器IP定時(shí)/計(jì)數(shù)器及外部中斷控制寄存器TCON串口控制寄存器SCON

單片機(jī)通過對4個(gè)特殊功能寄存器實(shí)施中斷控制:第九頁,共一百一十三頁,2022年,8月28日1.中斷允許寄存器IE功能:控制單片機(jī)是否接受中斷申請,以及接受哪一種中斷申請字節(jié)地址:

A8H

其格式和每位的含義如下:第十頁,共一百一十三頁,2022年,8月28日圖4-2IE的格式第十一頁,共一百一十三頁,2022年,8月28日由位操作指令或數(shù)據(jù)傳送指令實(shí)現(xiàn)。例:同時(shí)打開外部中斷0和串行口中斷,可設(shè)置為:法1:MOVIE,#10010001B

法2:SETBEASETBESSETBEX0

〈想一想〉還可以怎樣實(shí)現(xiàn)?如何對IE進(jìn)行設(shè)置?

IE的設(shè)置方法:第十二頁,共一百一十三頁,2022年,8月28日2.中斷優(yōu)先級寄存器IP功能:對80C51單片機(jī)進(jìn)行高級別或低級別中斷的設(shè)置,IP的字節(jié)地址:

B8H

格式和每位的含義如下:第十三頁,共一百一十三頁,2022年,8月28日

圖4-3IP的格式

第十四頁,共一百一十三頁,2022年,8月28日舉例

例:令串行口為高優(yōu)先級中斷,外部中斷0為低優(yōu)先級中斷。

設(shè)置方法:法1:

MOVIE,#10010001B;開中斷

MOVIP,#00010000B;設(shè)優(yōu)先級法2:

MOVIE,#10010001B

SETBPS說明:此時(shí)串口的優(yōu)先級高于外部中斷0的優(yōu)先級第十五頁,共一百一十三頁,2022年,8月28日

答案:

此時(shí)CPU按自然優(yōu)先級順序確定該響應(yīng)哪個(gè)中斷請求。如果幾個(gè)同級別的中斷源同時(shí)申請中斷,CPU如何響應(yīng)?注意:

自然優(yōu)先級由硬件決定,用戶不能更改。排列見表4-2第十六頁,共一百一十三頁,2022年,8月28日表4-2中斷入口地址及自然優(yōu)先級

第十七頁,共一百一十三頁,2022年,8月28日3.定時(shí)/計(jì)數(shù)器及外部中斷控制寄存器TCON功能:

字節(jié)地址:

88H可設(shè)置外部中斷申請的形式:低電平觸發(fā)還是下降沿觸發(fā)控制定時(shí)/計(jì)數(shù)器的計(jì)時(shí)開始或停止是各中斷源(串口中斷除外)是否申請中斷的標(biāo)志位格式如下,各位含義見表4-3TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0第十八頁,共一百一十三頁,2022年,8月28日形式

符號

位地址

功能

說明

中斷控制IT088H外部中斷0的觸發(fā)控制位IT0=0:低電平觸發(fā)IT0=1:下降沿觸發(fā)IT0的狀態(tài)由用戶通過初始化程序定義IE089H外部中斷0請求標(biāo)志位。CPU采樣到外部中斷0的中斷請求時(shí),IE0=1CPU響應(yīng)該中斷時(shí),IE0=0IE0的狀態(tài)由單片機(jī)自動(dòng)設(shè)置

IT18AH外部中斷1的觸發(fā)控制位IT1=0:低電平觸發(fā)IT1=1:下降沿觸發(fā)IT1的狀態(tài)由用戶通過初始化程序定義IE18BH外部中斷1的中斷請求標(biāo)志位CPU采樣到外部中斷1的中斷請求時(shí),IE1=1CPU響應(yīng)該中斷時(shí),IE1=0IE1的狀態(tài)由單片機(jī)自動(dòng)設(shè)置

表4-3TCON的功能說明第十九頁,共一百一十三頁,2022年,8月28日形式

符號

位地址

功能

說明

定時(shí)/計(jì)數(shù)控制

TR08CHTR0=1:啟動(dòng)定時(shí)/計(jì)數(shù)器T0TR0=0:停止定時(shí)/計(jì)數(shù)器T0

TR0的狀態(tài)由用戶通過初始化程序定義TF08DH定時(shí)/計(jì)數(shù)器T0溢出中斷請求位T0定時(shí)或計(jì)數(shù)完成時(shí)TF0=1,同時(shí)申請中斷CPU響應(yīng)該中斷時(shí),TF0=0TF0的狀態(tài)由單片機(jī)自動(dòng)設(shè)置

TR18EHTR1=1:啟動(dòng)定時(shí)/計(jì)數(shù)器T1TR1=0:停止定時(shí)/計(jì)數(shù)器T1

TR1的狀態(tài)由用戶通過初始化程序定義TF18FH定時(shí)/計(jì)數(shù)器T1溢出中斷請求位T1定時(shí)或計(jì)數(shù)完成時(shí)TF1=1,同時(shí)申請中斷CPU響應(yīng)該中斷時(shí),TF1=0TF1的狀態(tài)由單片機(jī)自動(dòng)設(shè)置

續(xù)表4-3

第二十頁,共一百一十三頁,2022年,8月28日例1

編程設(shè)定TCON為低電平觸發(fā)的高優(yōu)先級中斷源。分析:

這是典型的中斷初始化問題,方法一般如下:1)對TCON的相關(guān)位賦值2)設(shè)定所用中斷源的優(yōu)先級——賦值IP3)開中斷——置位IE第二十一頁,共一百一十三頁,2022年,8月28日解:

法1:CLRIT1SETBPX1SETBEX1SETBEA例1

法2:CLRIT1MOVIP,#04HMOVIE,#84H第二十二頁,共一百一十三頁,2022年,8月28日4.串口控制寄存器SCON功能:只有D1和D0位用于中斷,作為串口中斷請求標(biāo)志,即串口中斷請求寄存器字節(jié)地址:

98H

格式如下:第二十三頁,共一百一十三頁,2022年,8月28日RI為接收中斷請求標(biāo)志位。當(dāng)串口接收完一幀串行數(shù)據(jù)時(shí),RI自動(dòng)置1;CPU響應(yīng)中斷后,用軟件對RI清0。TI為串行口發(fā)送中斷請求標(biāo)志。當(dāng)串口發(fā)送完一幀串行數(shù)據(jù)時(shí),TI自動(dòng)置1,請求中斷。CPU響應(yīng)中斷后,由軟件對TI清零。其他幾位的含義及用法見第5章。第二十四頁,共一百一十三頁,2022年,8月28日4.1.4中斷響應(yīng)無同級或高級中斷正在服務(wù)有中斷請求信號相應(yīng)的中斷源已打開,即EA=1,中斷源對應(yīng)中斷允許位也為1。當(dāng)前的指令周期已經(jīng)結(jié)束如果當(dāng)前指令為RETI或訪問IE和IP的指令,至少還要再執(zhí)行完一條指令。1.中斷響應(yīng)條件第二十五頁,共一百一十三頁,2022年,8月28日2.中斷響應(yīng)過程圖4-4中斷響應(yīng)過程將當(dāng)前寄存器內(nèi)容壓入堆棧,如PUSHACC在中斷服務(wù)程序中實(shí)現(xiàn),解決單片機(jī)中斷后要干什么的問題。把保存在堆棧中的寄存器內(nèi)容取出,送回原來的位置,如POPACC第二十六頁,共一百一十三頁,2022年,8月28日☆中斷嵌套答案:CPU要進(jìn)行分析判斷,決定是否響應(yīng):當(dāng)CPU正在執(zhí)行中斷服務(wù)程序時(shí),又有新的中斷源發(fā)出中斷申請,響應(yīng)嗎?情況1:

同級或低級中斷源申請中斷,CPU不予理睬情況2:高級別中斷源申請中斷,CPU就要響應(yīng)。待執(zhí)行完高級別中斷服務(wù)程序后再轉(zhuǎn)回低級中斷服務(wù)程序繼續(xù)執(zhí)行,這就是中斷嵌套。第二十七頁,共一百一十三頁,2022年,8月28日圖4-5二級中斷嵌套的執(zhí)行過程第二十八頁,共一百一十三頁,2022年,8月28日軟件構(gòu)成:主程序+中斷服務(wù)程序程序編制的關(guān)鍵點(diǎn):要對題目要求進(jìn)行精確分析,明確哪些環(huán)節(jié)應(yīng)該安排在主程序中,哪些環(huán)節(jié)應(yīng)該安排在中斷服務(wù)程序中,再分別編制主程序和中斷服務(wù)程序。4.2中斷的應(yīng)用4.2.1中斷應(yīng)用指導(dǎo)1.中斷系統(tǒng)的程序編制第二十九頁,共一百一十三頁,2022年,8月28日

1.中斷系統(tǒng)的程序編制

(1)編制主程序

第一部分:主程序初始化

功能:第二部分:須由主程序完成的其它功能。此部分必須編寫用于設(shè)置堆棧位置;定義觸發(fā)方式(低電平觸發(fā)或脈沖下降沿觸發(fā))對IE和IP賦值等;第三十頁,共一百一十三頁,2022年,8月28日(2)選擇中斷服務(wù)程序的入口地址。(3)編制中斷服務(wù)程序。

1.中斷系統(tǒng)的程序編制即明確中斷服務(wù)程序的起始位置注意1:一般要保護(hù)斷點(diǎn),即保護(hù)進(jìn)入中斷時(shí)累加器A、進(jìn)/借位標(biāo)志CY和SFR的狀態(tài),并在退出中斷之前將其恢復(fù);注意2:必須在中斷服務(wù)程序中設(shè)定是否允許再次中斷(即中斷嵌套),由用戶對EX0(或EX1)位置位或清0決定。

說明:一般在中斷服務(wù)程序中涉及到關(guān)鍵數(shù)據(jù)的設(shè)置時(shí)應(yīng)關(guān)中斷,即禁止嵌套。第三十一頁,共一百一十三頁,2022年,8月28日2.中斷應(yīng)用舉例——三相交流電的故障檢測電路

例2圖4-6是三相交流電的故障檢測電路。當(dāng)A相缺電時(shí),發(fā)光二極管LEDA亮;當(dāng)B相缺電時(shí),發(fā)光二極管LEDB亮;當(dāng)C相缺電時(shí),發(fā)光二極管LEDC亮。硬件特點(diǎn):

①外部中斷由3個(gè)交流繼電器的觸點(diǎn)和一個(gè)或非門擴(kuò)展而成;②3個(gè)220V的交流繼電器的線圈ZA、ZB、ZC分別接在A、B、C各相和交流地之間。圖4-6三相交流電的故障檢測電路第三十二頁,共一百一十三頁,2022年,8月28日(1)檢測原理①三相電正常情況下3個(gè)線圈同時(shí)得電3個(gè)常開觸點(diǎn)全都閉合0001不申請外部中斷第三十三頁,共一百一十三頁,2022年,8月28日②故障情況下(假設(shè)A相掉電)(1)檢測原理線圈ZA失電常開觸點(diǎn)ZA斷開0申請外部中斷,在外部中斷服務(wù)程序中讀取P1.0引腳狀態(tài)0011產(chǎn)生A相掉電狀態(tài)信號送入P1.01在中斷服務(wù)程序中對該引腳輸出1A相故障指示燈亮線圈ZB、ZC有電常開觸點(diǎn)ZB、ZC閉合B、C相故障指示燈不亮第三十四頁,共一百一十三頁,2022年,8月28日(2)軟件設(shè)計(jì)ORG0000H LJMPMAIN ;跳至主程序 ORG0013H ;的中斷入口地址 LJMPTEST ;轉(zhuǎn)至中斷服務(wù)程序 ORG0100H MAIN:MOVP1,#15H;P1.0、P1.2、P1.4作輸入;P1.1、P1.3、P1.5輸出0 SETBEX1 ;開中斷CLRIT1;為低電平觸發(fā) SETBEA ;CPU開中斷 SJMP$ ;等待中斷TEST: JNBP1.0,LB ;A相正常,轉(zhuǎn)測B相 SETBP1.1 ;A相掉電,點(diǎn)亮LEDALB: JNBP1.2,LC ;B相正常,轉(zhuǎn)測C相 SETBP1.3 ;B相掉電,點(diǎn)亮LEDBLC: JNBP1.4,LL ;C相正常,返回 SETBP1.5 ;C相掉電,點(diǎn)亮LEDCLL:RETIEND第三十五頁,共一百一十三頁,2022年,8月28日4.2.2課題與實(shí)訓(xùn)7中斷控制流水燈一.實(shí)訓(xùn)目的學(xué)習(xí)外部中斷的基本用法掌握中斷處理程序的編程方法二.課題要求在程序正常運(yùn)行時(shí)P1口的8個(gè)LED燈作單燈左移8次而后單燈右移7次,如此循環(huán);中斷時(shí)(即按鍵按下)則P1口的8個(gè)LED閃爍3次(即全亮全滅3次)。三.背景知識(shí)1.中斷程序的設(shè)計(jì)主要涉及開中斷、設(shè)定優(yōu)先級,外中斷還

涉及觸發(fā)方式的設(shè)定。2.在軟件設(shè)計(jì)中,首先要對主程序和中斷服務(wù)程序所完成的

任務(wù)進(jìn)行劃分。根據(jù)該課題提出的要求,在主程序中應(yīng)該

完成的任務(wù)是8個(gè)LED循環(huán)左移右移;在中斷服務(wù)程序中

應(yīng)該完成的功能是8個(gè)LED閃爍3次。第三十六頁,共一百一十三頁,2022年,8月28日四.硬件電路

硬件結(jié)構(gòu)如圖,12引腳的按鍵點(diǎn)動(dòng)表示有中斷請求發(fā)出。

圖4-7實(shí)訓(xùn)7電路第三十七頁,共一百一十三頁,2022年,8月28日五.參考程序

ORG0000H LJMPSTART ORG0003H LJMPINT0 ORG0100H START:MOVSP,#60HMOVIE,#81H;開INT0中斷SETBIT0;INT0下降沿觸發(fā)L1:MOVA,#0FFH;設(shè)初值MOVR0,#8;設(shè)定左移八次CLRC;將CY清0L2:RLCA;帶進(jìn)位位循環(huán)左移一位MOVP1,A;送P1口,P1.0燈亮

第三十八頁,共一百一十三頁,2022年,8月28日ACALLDELAY;延時(shí)0.2秒DJNZR0,L2;判斷是否左移8次MOVR0,#7;移動(dòng)7次L3:RRCA;帶進(jìn)位位循環(huán)右移MOVP1,A;送P1口ACALLDELAYDJNZR0,L3;是否右移7次?AJMPL1;重新開始DELAY:MOVR5,#4;延時(shí)0.2秒D1:MOVR6,#200D2:MOVR7,#123NOPDJNZR7,$

第三十九頁,共一百一十三頁,2022年,8月28日DJNZR6,D2DJNZR5,D1RETINT0:PUSHPSW;保護(hù)PSW,ACC值PUSHACCMOVA,#00H;使8個(gè)LED全亮MOVR2,#6;閃爍3次(全亮全滅各3次)L4:MOVP1,A;A值送出LCALLDELAY;延時(shí)0.2秒CPLA;A值取反DJNZR2,L4;閃爍3次?POPACC;恢復(fù)保護(hù)的A值POPPSW;恢復(fù)保護(hù)的PSW值RETI;返回主程序END

第四十頁,共一百一十三頁,2022年,8月28日六.總結(jié)與提高

1.總結(jié):中斷服務(wù)程序與子程序?qū)Ρ裙餐c(diǎn):格式相近,執(zhí)行過程大體相同子程序執(zhí)行時(shí)刻是確定的,CPU只要執(zhí)行LCALL、ACALL等調(diào)用指令就會(huì)轉(zhuǎn)去執(zhí)行子程序中斷服務(wù)程序中斷申請往往是隨機(jī)發(fā)生的。中斷服務(wù)程序的發(fā)生可能是在開中斷后的任意時(shí)刻,也可能不發(fā)生,第四十一頁,共一百一十三頁,2022年,8月28日2.提高

編寫一個(gè)由兩個(gè)中斷(外部中斷0、外部中斷1)控制的流水燈程序。要求:

主程序不變,中斷0可使P1.0~P1.3的LED閃爍5次,中斷1可使P1.4~P1.7的LED閃爍5次,設(shè)定中斷1的優(yōu)先級比中斷0高。第四十二頁,共一百一十三頁,2022年,8月28日4.3定時(shí)/計(jì)數(shù)器

1.日常生活中定時(shí)、計(jì)數(shù)的例子:如鬧鐘、畫“正”統(tǒng)計(jì)選票、家用水表對水量的計(jì)數(shù)。

2.單片機(jī)應(yīng)用系統(tǒng)中定時(shí)計(jì)數(shù)的需求:如用單片機(jī)控制的打鈴器、空調(diào)的定時(shí)開關(guān)、啤酒自動(dòng)生產(chǎn)線上對酒瓶的計(jì)數(shù)裝置等。

3.80C51單片機(jī)片內(nèi)的定時(shí)/計(jì)數(shù)器:兩個(gè)16位可編程的定時(shí)/計(jì)數(shù)器:T0和T1,都能定時(shí)和對外部事件進(jìn)行計(jì)數(shù)。此外,T1還可以作為串行接口的波特率發(fā)生器。第四十三頁,共一百一十三頁,2022年,8月28日4.3.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)1.定時(shí)和計(jì)數(shù)的原理(1)計(jì)數(shù)

定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),其原理類似于古代用來計(jì)時(shí)的水鐘:假設(shè)計(jì)滿一小時(shí)需要100,000,000滴,這稱為水鐘的計(jì)數(shù)容量16位定時(shí)/計(jì)數(shù)器的計(jì)數(shù)容量是65536單片機(jī)是對脈沖個(gè)數(shù)計(jì)數(shù),計(jì)數(shù)器每接收到一個(gè)脈沖,計(jì)數(shù)值加1,當(dāng)接收滿65535個(gè)脈沖后,再來一個(gè)脈沖,計(jì)數(shù)值清0表明這一輪計(jì)數(shù)結(jié)束,同時(shí)將標(biāo)志位TF0或TF1置1。第四十四頁,共一百一十三頁,2022年,8月28日

(2)定時(shí)單片機(jī)內(nèi)部的計(jì)數(shù)器用作定時(shí)器時(shí),是對標(biāo)準(zhǔn)的時(shí)鐘進(jìn)行了計(jì)數(shù),每來一個(gè)時(shí)鐘脈沖,計(jì)數(shù)器加1,只要保證計(jì)數(shù)脈沖的間隔相等,則計(jì)數(shù)值就代表了時(shí)間的流逝。計(jì)數(shù)器如何能作為定時(shí)器使用呢?單片機(jī)中的定時(shí)器和計(jì)數(shù)器其實(shí)是一個(gè)器件:計(jì)數(shù)器:是對外部發(fā)生的事件進(jìn)行計(jì)數(shù),定時(shí)器:是對單片機(jī)內(nèi)部的標(biāo)準(zhǔn)時(shí)鐘脈沖進(jìn)行計(jì)數(shù)。第四十五頁,共一百一十三頁,2022年,8月28日單片機(jī)內(nèi)部的標(biāo)準(zhǔn)時(shí)鐘脈沖是如何獲得的呢?見圖4-9,它是由單片機(jī)的晶振經(jīng)過12分頻后得到。由于晶振的頻率很準(zhǔn),所以這個(gè)時(shí)鐘脈沖的時(shí)間間隔也很準(zhǔn)。不難算出,當(dāng)單片機(jī)采用12MHz的晶振時(shí),它提供給計(jì)數(shù)器的脈沖頻率是12MHz/12=1MHz,脈沖周期就是1微秒。圖4-9定時(shí)/計(jì)數(shù)器T0的結(jié)構(gòu)示意圖第四十六頁,共一百一十三頁,2022年,8月28日

單片機(jī)內(nèi)部的16位定時(shí)/計(jì)數(shù)器由高8位和低8位兩個(gè)寄存器組成:T0由TH0和TL0組成,T1由TH1和TL1組成,定時(shí)/計(jì)數(shù)器的計(jì)數(shù)值就存放在這里面。定時(shí)/計(jì)數(shù)器T1的結(jié)構(gòu)與T0相同。圖4-9定時(shí)/計(jì)數(shù)器T0的結(jié)構(gòu)示意圖

2.定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)第四十七頁,共一百一十三頁,2022年,8月28日再以水鐘為例,當(dāng)水不斷落下,下面容器中的水不斷變多,最終總有一滴水使得容器完全充滿。這時(shí)如果再有一滴水落下,就會(huì)發(fā)生“溢出”。與此類似,16位定時(shí)/計(jì)數(shù)器計(jì)滿65536個(gè)脈沖時(shí),也會(huì)發(fā)生溢出。

定時(shí)/計(jì)數(shù)器溢出后標(biāo)志位TF0(或TF1)由0變1,由此能夠引發(fā)定時(shí)中斷(在中斷定時(shí)方式下),這就像定時(shí)的時(shí)間一到,鬧鐘就會(huì)響一樣。

如果采用12MHz的晶振,對應(yīng)的脈沖周期是1微秒,計(jì)滿65536個(gè)脈沖所對應(yīng)的時(shí)間就是65.536ms。

3.定時(shí)/計(jì)數(shù)值的設(shè)置第四十八頁,共一百一十三頁,2022年,8月28日現(xiàn)實(shí)生活中,如何滿足計(jì)數(shù)值少于65536的需要?如牛奶包裝線上24盒裝箱一次。再回到水鐘的例子上去:剛才假設(shè)下面容器滴入100,000,000滴水才會(huì)滿,現(xiàn)在我們在開始滴水之前先放入一勺水,這樣問題就解決了。計(jì)數(shù)器的道理是一樣的,只要用預(yù)置數(shù)的方法先在計(jì)數(shù)容器內(nèi)存入一個(gè)初值

(通常稱為時(shí)間常數(shù)),如我們要計(jì)100,那就存入65436,只要再來100個(gè)脈沖,就剛好會(huì)溢出,引發(fā)中斷。計(jì)數(shù)器初值的設(shè)置第四十九頁,共一百一十三頁,2022年,8月28日在主頻為12MHz的情況下,每個(gè)時(shí)鐘脈沖是1微秒,則計(jì)滿65536個(gè)脈沖需65.536毫秒,如要定時(shí)10毫秒則存入初值55536,(10毫秒是10000微秒,需計(jì)數(shù)10000個(gè)脈沖)。可見,

定時(shí)器的定時(shí)時(shí)間長短與系統(tǒng)時(shí)鐘和定時(shí)器初值有關(guān)。

說明

1.當(dāng)定時(shí)/計(jì)數(shù)器用作計(jì)數(shù)器時(shí),通過引腳P3.4(P3.5)對外部輸入脈沖計(jì)數(shù)。2.定時(shí)/計(jì)數(shù)器T0(T1)啟動(dòng)運(yùn)行后,會(huì)按設(shè)定的工作方式獨(dú)立進(jìn)行計(jì)數(shù),不再占用CPU時(shí)間。當(dāng)計(jì)數(shù)器T0(T1)計(jì)滿溢出時(shí),TF0(TF1)置1,向CPU發(fā)出中斷請求信號。定時(shí)器初值的設(shè)置第五十頁,共一百一十三頁,2022年,8月28日4-10定時(shí)/計(jì)數(shù)器的控制關(guān)系第五十一頁,共一百一十三頁,2022年,8月28日

4.3.2定時(shí)/計(jì)數(shù)器的控制

在單片機(jī)中有兩個(gè)特殊功能寄存器與定時(shí)/計(jì)數(shù)有關(guān),它們就是TMOD和TCON,定時(shí)/計(jì)數(shù)器T0、T1就由它們來控制:

TMOD用于設(shè)置工作方式;TCON用于控制其啟動(dòng)、停止和中斷申請。

1.定時(shí)器工作方式寄存器TMODTMOD用于設(shè)置T0和T1的工作方式,字節(jié)地址為89H,不能按位尋址。其格式和各位的含義如下:第五十二頁,共一百一十三頁,2022年,8月28日第五十三頁,共一百一十三頁,2022年,8月28日第五十四頁,共一百一十三頁,2022年,8月28日

2.定時(shí)/計(jì)數(shù)器控制寄存器TCON

TCON的低4位用于控制外部中斷,高4位用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請。TF0(或TF1)

當(dāng)計(jì)數(shù)溢出時(shí),TF0(或TF1)會(huì)自動(dòng)由0變1,告訴我們計(jì)數(shù)已滿,我們可以通過查詢TF0(或TF1)位的狀態(tài)來判斷計(jì)時(shí)時(shí)間是否已到;

如果采用定時(shí)中斷方式,則TF0(或TF1)由0變1時(shí),能自動(dòng)引發(fā)中斷。第五十五頁,共一百一十三頁,2022年,8月28日TR0(或TR1)

由圖4-11可知,只有當(dāng)TR0(或TR1)為1時(shí),開關(guān)1才能閉合,計(jì)數(shù)脈沖才能進(jìn)入計(jì)數(shù)器,故TR0(或TR1)稱為運(yùn)行控制位,可用指令“SETBTR0(或TR1)”來置位以啟動(dòng)定時(shí)/計(jì)數(shù)器運(yùn)行;或用指令“CLRTR0(或TR1)”來關(guān)閉定時(shí)/計(jì)數(shù)器的工作,一切全靠編程人員控制。圖4-11定時(shí)/計(jì)數(shù)器T0方式0的邏輯結(jié)構(gòu)示意圖

第五十六頁,共一百一十三頁,2022年,8月28日4.3.3定時(shí)/計(jì)數(shù)器的工作方式

80C51單片機(jī)定時(shí)/計(jì)數(shù)器T0有4種工作方式(方式0、1、2、3),T1有3種工作方式(方式0、1、2)。

1.方式0

當(dāng)TMOD的M1M0=00時(shí),定時(shí)/計(jì)數(shù)器工作于方式0。方式0為13位定時(shí)/計(jì)數(shù)器,由TL0的低5位和TH0(8位)共同完成計(jì)數(shù)功能(TL0的高3位可忽略)。

當(dāng)TL0的低5位溢出時(shí),向TH0產(chǎn)生進(jìn)位;TH0溢出時(shí),將定時(shí)器中斷請求標(biāo)志位TF0置1,可申請中斷,也可對TF0進(jìn)行查詢。

第五十七頁,共一百一十三頁,2022年,8月28日圖4-11定時(shí)/計(jì)數(shù)器T0方式0的邏輯結(jié)構(gòu)示意圖第五十八頁,共一百一十三頁,2022年,8月28日2.方式1

當(dāng)M1M0=01時(shí),定時(shí)/計(jì)數(shù)器工作于方式1。方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位,TH0作為高8位共同構(gòu)成。其余操作同方式0。圖4-12定時(shí)/計(jì)數(shù)器T0方式1的邏輯結(jié)構(gòu)示意圖第五十九頁,共一百一十三頁,2022年,8月28日3.方式2

當(dāng)M1M0=10時(shí),定時(shí)/計(jì)數(shù)器工作于方式2。這是自動(dòng)重裝初值的8位計(jì)數(shù)方式,它省去了方式0和方式1在多次重復(fù)計(jì)數(shù)狀態(tài)下必須重新設(shè)定計(jì)數(shù)初值的麻煩,但是卻付出了減小定時(shí)時(shí)間的代價(jià)。圖4-13定時(shí)/計(jì)數(shù)器T0方式2的邏輯結(jié)構(gòu)示意圖特別適合于制作比較精確的脈沖信號發(fā)生器。第六十頁,共一百一十三頁,2022年,8月28日4.方式3

方式3只適用于定時(shí)/計(jì)數(shù)器T0。當(dāng)T1被設(shè)定為方式3狀態(tài)時(shí),將停止計(jì)數(shù)。當(dāng)M1M0=11時(shí),T0工作于方式3。此時(shí)TL0和TH0作為兩個(gè)相互獨(dú)立的8位定時(shí)/計(jì)數(shù)器使用。TL0既可定時(shí)又可計(jì)數(shù),它使用T0的各控制位、引腳和中斷源,即C/、GATE、TR0、TF0、T0(P3.4引腳)、(P3.2引腳);TH0此時(shí)只能用作內(nèi)部定時(shí)功能,它借用了定時(shí)/計(jì)數(shù)器T1的控制位TR1和T1的中斷標(biāo)志位TF1,其啟動(dòng)和停止只受TR1控制。第六十一頁,共一百一十三頁,2022年,8月28日圖4-14定時(shí)/計(jì)數(shù)器T0方式3的邏輯結(jié)構(gòu)示意圖

定時(shí)器T1無工作方式3,當(dāng)定時(shí)器T0工作在方式3時(shí),定時(shí)器T1可設(shè)置為方式0、方式1和方式2。

第六十二頁,共一百一十三頁,2022年,8月28日

4.4.1應(yīng)用指導(dǎo)

1.定時(shí)/計(jì)數(shù)器的定時(shí)/計(jì)數(shù)范圍定時(shí)/計(jì)數(shù)器工作于不同方式下的位數(shù)不同,它所具有的計(jì)數(shù)范圍也不一樣:

工作方式0:13位定時(shí)/計(jì)數(shù)方式,因此,最多可以計(jì)到213,也就是8192次。

工作方式1:16位定時(shí)/計(jì)數(shù)方式,因此,最多可

以計(jì)到216,也就是65536次。

工作方式2和工作方式3:都是8位定時(shí)/計(jì)數(shù)方

式,因此,最多可以計(jì)到28,也就是256次。<想一想>如果我們需要超過計(jì)數(shù)器計(jì)數(shù)范圍的定時(shí)或計(jì)數(shù)功能,應(yīng)該怎樣做?4.4定時(shí)/計(jì)數(shù)器應(yīng)用與訓(xùn)練第六十三頁,共一百一十三頁,2022年,8月28日

2.時(shí)間常數(shù)初值的計(jì)算

定時(shí)/計(jì)數(shù)器只要預(yù)設(shè)一個(gè)時(shí)間常數(shù)初值,就可以完成不超過其計(jì)數(shù)范圍的任意大小的計(jì)數(shù)。算法如下:

定時(shí)時(shí)間常數(shù)初值X:方式0X=8192-t(fosc/12) 方式1X=65536-t(fosc/12) 方式2、方式3X=256-t(fosc/12) 其中t是需要定時(shí)的時(shí)間,單位是微秒;fosc是晶振

計(jì)數(shù)時(shí)間常數(shù)X:方式0X=8192-S 方式1X=65536-S 方式2、方式3X=256-S 說明:式中S是需要計(jì)數(shù)的次數(shù)

第六十四頁,共一百一十三頁,2022年,8月28日假設(shè)流水線上一個(gè)包裝是12盒,要求每到12盒就產(chǎn)生一個(gè)動(dòng)作,用單片機(jī)的工作方式0來控制,應(yīng)當(dāng)預(yù)置的計(jì)數(shù)初值是多少呢?對了,就是8192-12=8180。3.定時(shí)/計(jì)數(shù)器的初始化對80C51單片機(jī)的定時(shí)/計(jì)數(shù)器編程的初始化方法:①對TMOD賦值,以確定T0和T1的工作方式;②計(jì)算時(shí)間常數(shù)初值,并將其寫入TH0、TL0或TH1、

TL1;③采用中斷定時(shí)方式時(shí),需對IE賦值開中斷;④置位TR0或TR1,啟動(dòng)定時(shí)/計(jì)數(shù)器。

第六十五頁,共一百一十三頁,2022年,8月28日4.4.2基本訓(xùn)練—初始化訓(xùn)練

例3:某牛奶生產(chǎn)線上一個(gè)包裝是12盒,要求每生產(chǎn)12盒就執(zhí)行裝箱操作,用80C51單片機(jī)來控制,請編寫初始化程序。

1.思路與計(jì)算:要確定定時(shí)器(T0或T1),選擇其工作方式。我們以T0的工作方式2為例,計(jì)算時(shí)間常數(shù)并賦值給TH0、TL0。X=256-S=256-12=244=0F4H第六十六頁,共一百一十三頁,2022年,8月28日

2.初始化程序:MOVTMOD,#06H;T0作計(jì)數(shù)器,工作于方式2MOVTH0,#0F4H;裝入時(shí)間常數(shù)初值MOVTL0,#0F4H;自動(dòng)重裝時(shí)間常數(shù)MOVIE,#00H;用查詢方式確定計(jì)滿12盒?(或MOVIE,#82H);使用T0中斷,計(jì)滿12盒后,;自動(dòng)申請中斷SETBTR0;啟動(dòng)T0波特率發(fā)生器

3.總結(jié):對計(jì)數(shù)過程是否結(jié)束有查詢和中斷兩種方法,要合理選擇,并在程序設(shè)計(jì)中正確體現(xiàn)。

第六十七頁,共一百一十三頁,2022年,8月28日

4.4.3應(yīng)用實(shí)例

1.

定時(shí)/計(jì)數(shù)器用于外部脈沖寬度的測量

(1)測量原理可以利用定時(shí)/計(jì)數(shù)器方式寄存器TMOD中的門控位GATE與引腳配合使用,控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止:當(dāng)GATE=1時(shí),要求TR1=l,且為高電平,才能啟動(dòng)定時(shí)器T1計(jì)數(shù)工作;如果出現(xiàn)低電平,則T1停止計(jì)數(shù);當(dāng)GATE=0時(shí),只要TR1=1就可以啟動(dòng)定時(shí)器,而與的輸入狀態(tài)無關(guān)??梢岳枚〞r(shí)/計(jì)數(shù)器方式寄存器TMOD中的門控位GATE與引腳配合使用,控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止:

當(dāng)GATE=1時(shí),要求TR1=l,且為高電平,才能啟動(dòng)定時(shí)器T1計(jì)數(shù)工作;如果出現(xiàn)低電平,則T1停止計(jì)數(shù);

當(dāng)GATE=0時(shí),只要TR1=1就可以啟動(dòng)定時(shí)器,而與的輸入狀態(tài)無關(guān)。第六十八頁,共一百一十三頁,2022年,8月28日利用上述特點(diǎn),將被測脈沖信號從(P3.3)引入,在T1的程序初始化中令GATE=1,同時(shí)“SETBTR1”,這樣脈沖信號的上升沿就能啟動(dòng)T1計(jì)數(shù),脈沖信號下降沿能使T1停止計(jì)數(shù)。利用定時(shí)器T1的計(jì)數(shù)值m乘以機(jī)器周期就可以得到被測脈沖信號的寬度TW。(2)硬件電路硬件電路簡圖如圖4-15。

第六十九頁,共一百一十三頁,2022年,8月28日(3)程序設(shè)計(jì)利用80C51的內(nèi)部RAM30H、31H單元保存被測脈沖寬度對應(yīng)的計(jì)數(shù)值。參考程序如下:

ORG0000HAJMPMAINORG0100HMAIN:MOVSP,#60H;設(shè)堆棧指針MOVTMOD,#90H;設(shè)置控制字,T1工作于方式;1,GATE=1MOVTH1,#00H;設(shè)定計(jì)數(shù)初值為00H

第七十頁,共一百一十三頁,2022年,8月28日MOVTL1,#00HL1:JBP3.3,L1;等待輸入變?yōu)榈碗娖絊ETBTR1;預(yù)置TR1=1,準(zhǔn)備啟動(dòng)T1L2:JNBP3.3,L2;等待上升沿,以便開始計(jì)數(shù)L3:JBP3.3,L3;是高電平則計(jì)數(shù)繼續(xù)CLRTR1;低電平則停止計(jì)數(shù)MOVA,TL1 ;讀低位計(jì)數(shù)值MOV30H,A ;低位計(jì)數(shù)值存于30HMOVA,TH1 ;讀高位計(jì)數(shù)值MOV31H,A ;高位計(jì)數(shù)值存于31HEND第七十一頁,共一百一十三頁,2022年,8月28日

(4)總結(jié)與思考

定時(shí)/計(jì)數(shù)器還可用于測量脈沖信號的頻率、周期等。本實(shí)例是利用定時(shí)/計(jì)數(shù)器的門控位(GATE)測量脈沖寬度。但要注意,在晶振12MHz的情況下,被測脈沖寬度范圍最大為65535×1μs=65.536ms。

<想一想>,如果要測量脈沖信號的周期,該如何去做?

2.計(jì)數(shù)器用于繞線機(jī)的控制

繞線機(jī)常用于對電機(jī)或變壓器的繞組進(jìn)行繞制,圖4-16是繞線機(jī)的控制電路。當(dāng)按下工作按鈕以后,機(jī)器啟動(dòng),繞線機(jī)在直流電機(jī)和減速齒輪的帶動(dòng)下開始工作。當(dāng)繞線架上的線圈繞到規(guī)定的圈數(shù)時(shí),繞線機(jī)會(huì)自動(dòng)停止繞線。如果再次按下工作按鈕,繞線機(jī)會(huì)重復(fù)以上過程。第七十二頁,共一百一十三頁,2022年,8月28日圖4-16繞線機(jī)的控制電路控制說明:1.軟件控制P1.0=0時(shí),繞線機(jī)開始繞線;P1.0=1時(shí),繞線機(jī)不繞線。2.繞線機(jī)每繞一圈,繞線機(jī)脈沖產(chǎn)生電路就產(chǎn)生一個(gè)脈沖信號。第七十三頁,共一百一十三頁,2022年,8月28日

(1)工作原理由于單片機(jī)復(fù)位后P1口的輸出狀態(tài)全部為1,所以系統(tǒng)上電后,P1.0輸出高電平“1”繞線機(jī)不工作。

當(dāng)按下工作按鈕以后,P1.1輸入低電平“0”,當(dāng)程序檢測到P1.1=0時(shí),在程序指令的控制下從P1.0輸出低電平“0”。繞線機(jī)開始繞線。繞線機(jī)每繞一圈,定時(shí)/計(jì)數(shù)器T1的輸入引腳上就會(huì)產(chǎn)生一個(gè)負(fù)跳變的輸入脈沖。因此,只要用定時(shí)/計(jì)數(shù)器T1的計(jì)數(shù)功能控制好輸入脈沖的個(gè)數(shù),就等于控制了繞線機(jī)的繞線圈數(shù)。

當(dāng)繞線機(jī)纏繞到指定的圈數(shù)時(shí),定時(shí)/計(jì)數(shù)器T1引發(fā)計(jì)數(shù)中斷,在程序指令的控制下,P1.0將輸出的高電平“1”,使電機(jī)停轉(zhuǎn),制動(dòng)器恢復(fù)制動(dòng),于是系統(tǒng)回到最初的停機(jī)狀態(tài)。

第七十四頁,共一百一十三頁,2022年,8月28日我們假設(shè)繞線架的規(guī)定匝數(shù)是5000圈,為控制這個(gè)圈數(shù),可以設(shè)定定時(shí)/計(jì)數(shù)器T1用作計(jì)數(shù)器且工作在方式1,于是確定其計(jì)數(shù)初值為:

初值=65536-5000=60536=0EC78H

所以(TH1)=0ECH,(TL1)=78H(2)控制程序

參考程序如下:ORG0000HAJMPMAINORG001BHAJMPCOUNTORG0100H第七十五頁,共一百一十三頁,2022年,8月28日

MAIN:MOVTMOD,#50H;設(shè)置T1為計(jì)數(shù)器,工作于方式1MOVTH1,#0ECH;設(shè)定計(jì)數(shù)初值

MOVTL1,#78HMOVSP,#60H;設(shè)堆棧指針SETBET1;開T1中斷SETBEA ;CPU開中斷CLRF0 ;用戶標(biāo)志F0清0WAIT:MOVC,P1.1 ;等待啟動(dòng)JCWAIT ;P1.1=1,等待CLRP1.0 ;啟動(dòng)設(shè)備SETBTR0 ;T1開始計(jì)數(shù)第七十六頁,共一百一十三頁,2022年,8月28日LOOP:JNBF0,$ ;等待計(jì)數(shù)5000中斷SETBP1.0 ;繞線機(jī)停止工作CLRTR0 ;T1停止計(jì)數(shù)CLRF0 ;清0SJMPWAIT ;等待重新啟動(dòng)ORG0200H ;T1中斷服務(wù)程序起始地址COUNT:MOVTH1,#0ECH ;重新設(shè)定計(jì)數(shù)初值MOVTL1,#78HSETBF0 ;用戶標(biāo)志置1RETI ;中斷返回END第七十七頁,共一百一十三頁,2022年,8月28日4.4.4課題與實(shí)訓(xùn)8簡易方波發(fā)生器一.實(shí)訓(xùn)目的掌握定時(shí)器初值的計(jì)算方法學(xué)習(xí)定時(shí)器的使用及定時(shí)中斷程序的設(shè)計(jì)方法掌握方波信號發(fā)生器的設(shè)計(jì)方法二.課題要求

1.基本要求:利用定時(shí)/計(jì)數(shù)器T1,工作于方式0,采用查詢方式,在P1.0引腳輸出頻率為500Hz的方波,并用示波器進(jìn)行觀察(晶振采用12MHz)。

2.較高要求:利用定時(shí)/計(jì)數(shù)器T1,工作于方式0,采用中斷方式,在P1.0引腳輸出頻率為500Hz的方波,并用示波器進(jìn)行觀察(晶振采用12MHz)。第七十八頁,共一百一十三頁,2022年,8月28日三.背景知識(shí)

1.方波產(chǎn)生原理

使P1.0引腳的輸出狀態(tài)定時(shí)翻轉(zhuǎn),則該端口能輸出一定頻率的方波。

2.方式0的時(shí)間常數(shù)初值定時(shí)/計(jì)數(shù)器工作于方式0狀態(tài)下,定時(shí)/計(jì)數(shù)的長度是13位。應(yīng)用前面給出的時(shí)間常數(shù)初值的計(jì)算公式

X=8192-t(fosc/12)我們可以很方便地計(jì)算出時(shí)間常數(shù)初值,但在將其裝入定時(shí)/計(jì)數(shù)器的TH、TL寄存器時(shí),必須要注意:將計(jì)算結(jié)果的高8位裝入TH1(或TH0)、低5位裝入TL1(或TL0),這一環(huán)節(jié)是非常容易出錯(cuò)的。

第七十九頁,共一百一十三頁,2022年,8月28日以該實(shí)訓(xùn)T1方式0產(chǎn)生500Hz的方波(周期是2ms)為例,需要進(jìn)行1ms的定時(shí),時(shí)間常數(shù)初值

X=8192-1×10-3×(12×106/12)=8192-1000=7192=1C18H=000以13位二進(jìn)制數(shù)表示,是1110000011000B,則(TL1)=00011000B=18H,(TH1)=11100000B=0E0H

定義TMOD=00000000B第八十頁,共一百一十三頁,2022年,8月28日四.硬件電路該實(shí)訓(xùn)硬件電路十分簡單,見圖4-17。圖4-17簡易方波發(fā)生器的硬件電路第八十一頁,共一百一十三頁,2022年,8月28日五.參考程序(1)P1.0輸出500Hz方波——查詢方式

ORG0000H LJMPMAIN ;跳至主程序 ORG0100H MAIN:MOVTMOD,#00H ;置T1工作于方式0 MOVTH1,#0E0H ;裝入時(shí)間常數(shù)初值 MOVTL1,#18H SETBTR1 ;啟動(dòng)T1LOOP:JNBTF1,LOOP ;查詢等待CLRTF1;清TF1

CPLP1.0 ;P1.0取反

第八十二頁,共一百一十三頁,2022年,8月28日MOVTH1,#0E0H ;重新裝入時(shí)間常數(shù)初值 MOVTL1,#18HAJMPLOOP;繼續(xù)生成波形 END第八十三頁,共一百一十三頁,2022年,8月28日

(2)P1.0輸出500Hz方波——中斷方式

ORG0000H LJMPMAIN ;跳至主程序 ORG001BH ;T1的中斷入口地址 LJMPFANGBO ;轉(zhuǎn)至中斷服務(wù)程序 ORG0100H MAIN:MOVTMOD,#00H ;置T1工作于方式0 MOVTH1,#0E0H ;裝入時(shí)間常數(shù)初值 MOVTL1,#18H SETBET1 ;允許T1中斷 SETBEA ;CPU開中斷 SETBTR1 ;啟動(dòng)T1

第八十四頁,共一百一十三頁,2022年,8月28日SJMP$ ;等待中斷FANGBO:CPLP1.0 ;P1.0取反 MOVTH1,#0E0H ;重新裝入時(shí)間常數(shù)初值 MOVTL1,#18H RETI ;中斷返回 END六.總結(jié)與提高

1.總結(jié)本實(shí)訓(xùn)利用定時(shí)器T1的定時(shí)功能,以兩種形式輸出頻率為500Hz方波。在實(shí)際應(yīng)用中,方波的頻率可能要根據(jù)現(xiàn)場測量參數(shù)、給定參數(shù)或按照某種函數(shù)關(guān)系而變化。因此輸出波形的頻率在編程時(shí)還是未知的。第八十五頁,共一百一十三頁,2022年,8月28日2.提高定時(shí)/計(jì)數(shù)器的計(jì)時(shí)范圍有限,當(dāng)晶振采用12MHz時(shí),方式1的計(jì)時(shí)時(shí)間最長,也只有65.536ms。當(dāng)需要定時(shí)的時(shí)間超出了定時(shí)/計(jì)數(shù)器的計(jì)數(shù)范圍,如需定時(shí)2秒,這時(shí)可以采用以下兩種方法來處理:⑴定時(shí)器+軟件計(jì)數(shù)的方法

思路是:利用定時(shí)/計(jì)數(shù)器T1,工作于方式1,實(shí)現(xiàn)50ms/次的定時(shí),只要定時(shí)40次即可實(shí)現(xiàn)2s定時(shí)。可以算出定時(shí)/計(jì)數(shù)器T1工作于方式1時(shí),時(shí)間常數(shù)初值為

X=65536-t(fosc/12)=65536-50×10-3×(12×106/12)=15536=3CB0H于是(TH1)=3CH,(TL1)=0B0H。第八十六頁,共一百一十三頁,2022年,8月28日定義TMOD=00010000B,此處只給出延時(shí)2s的查詢方式子程序。DELAY:MOVR3,#40;設(shè)置定時(shí)器溢出次數(shù)SETBTR1 ;啟動(dòng)T1開始計(jì)時(shí)D1:MOVTH1,#3CH;裝入時(shí)間常數(shù)初值 MOVTL1,#0B0H D2:JBCTF1,D3;TF1為1否?是則跳至D3,并清TF1,AJMPD2;否,則跳至D2D3:DJNZR3,D1;R3=0?不是,跳到D1CLRTR1;是,則停止計(jì)數(shù)RET第八十七頁,共一百一十三頁,2022年,8月28日⑵采用兩個(gè)定時(shí)器串聯(lián)的方法

思路是:

將兩個(gè)定時(shí)器中的一個(gè)(如T0)設(shè)置為定時(shí)方式,另一個(gè)(T1)設(shè)置成計(jì)數(shù)方式;將定時(shí)器T0計(jì)滿產(chǎn)生的輸出,通過一根I/O口線(如P1.0)連接到計(jì)數(shù)器T1的計(jì)數(shù)脈沖輸入端P3.5,從而實(shí)現(xiàn)更長時(shí)間的定時(shí)。第八十八頁,共一百一十三頁,2022年,8月28日4.5中斷與定時(shí)/計(jì)數(shù)器綜合應(yīng)用舉例

4.5.1概述定時(shí)/計(jì)數(shù)功能與中斷一樣,都是單片機(jī)的常用功能。兩者常常同時(shí)使用。如實(shí)訓(xùn)7就是簡單的中斷、定時(shí)綜合應(yīng)用實(shí)例。在這類程序的編制過程中,要注意這樣幾個(gè)問題:

選擇合適的中斷和定時(shí)/計(jì)數(shù)方式。如外部中斷是采用電平觸發(fā)還是脈沖下降沿觸發(fā);定時(shí)/計(jì)數(shù)是用自動(dòng)重裝方式還是每次定時(shí)結(jié)束后用軟件重裝。第八十九頁,共一百一十三頁,2022年,8月28日確定定時(shí)結(jié)束的判別方法,用中斷還是查詢。

如采用中斷,與其它中斷的優(yōu)先級如何確定,是否會(huì)影響系統(tǒng)功能。正確初始化。合理分配控制功能。

☆4.5.2課題與實(shí)訓(xùn)9音樂門鈴一.實(shí)訓(xùn)目的1.掌握中斷與定時(shí)/計(jì)數(shù)綜合程序的設(shè)計(jì)方法2.學(xué)習(xí)音樂門鈴的設(shè)計(jì)過程二.課題要求在單片機(jī)P1.0引腳外接揚(yáng)聲器,唱出《祝你生日快樂》歌。第九十頁,共一百一十三頁,2022年,8月28日三.背景知識(shí)

1.音頻脈沖的產(chǎn)生

聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機(jī)某個(gè)口線的“高”電平或“低”電平,則在該口線上就能產(chǎn)生一定頻率的方波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào)。

例如,要產(chǎn)生中音1。從表4-5可知,中音1的頻率為523Hz,周期T=1/523=1912μs,其半周期為1912/2=956μs,因此只要在P1.0引腳產(chǎn)生半周期為956μs的方波,即可聽到持續(xù)的1音。C調(diào)各音符頻率與計(jì)數(shù)初值的對應(yīng)表如下:第九十一頁,共一百一十三頁,2022年,8月28日注:不發(fā)音的簡譜碼用“0”表示第九十二頁,共一百一十三頁,2022年,8月28日2.音樂節(jié)拍的生成

要唱出一首歌,只產(chǎn)生出音頻脈沖還不夠,還要考慮節(jié)拍。

定義:每個(gè)音符占用一個(gè)字節(jié),字節(jié)的高4位代表音符的高低,低4位表示該音符的節(jié)拍,如果一拍為0.4秒,則1/4拍是0.1秒,只要設(shè)定延遲時(shí)間就可獲得節(jié)拍的時(shí)間。我們也可以設(shè)1/4拍為1個(gè)DELAY,則1拍應(yīng)該是4個(gè)DELAY,只要求得1/4拍的DELAY時(shí)間,其余的節(jié)拍就是它的倍數(shù)。見表表4-6節(jié)拍與節(jié)拍碼對照表第九十三頁,共一百一十三頁,2022年,8月28日

3.建立音樂的步驟:先把譜的音符找出,然后由上表建立時(shí)間常數(shù)初值T的順序表,標(biāo)號為TABLE1。建立音符和節(jié)拍表,標(biāo)號為TABLE,將構(gòu)成發(fā)音符的計(jì)數(shù)值放在其中。TABLE表的結(jié)構(gòu)為:簡譜碼(代表音符)為高4位,節(jié)拍碼(表示節(jié)拍數(shù))為低4位,在唱歌程序中對每一個(gè)有節(jié)拍的音符能通過設(shè)計(jì)共同生成音符節(jié)拍碼,本程序的音符節(jié)拍碼表見表4-5。第九十四頁,共一百一十三頁,2022年,8月28日(1)1/4拍的延遲時(shí)間=187毫秒DELAY:MOVR5,#02D1:MOVR4,#187D2:MOVR3,#248DJNZR3,$DJNZR4,D2DJNZR5,D1DJNZR6,DELAYRET(2)歌譜生日快樂歌C3/4︱5.565︱7-︱5.565︱-︱ 祝你生日快樂祝你生日快樂︱5.5︱76︱︱-︱ 我們高聲歌唱祝你生日快樂第九十五頁,共一百一十三頁,2022年,8月28日四.硬件電路圖4-18音樂的應(yīng)用電路

第九十六頁,共一百一十三頁,2022年,8月28日五.參考程序ORG0000H LJMPMAIN ;跳至主程序 ORG001BH ;T1的中斷入口地址 LJMPTIM1 ;轉(zhuǎn)至中斷服務(wù)程序 ORG0100H MAIN:MOVTMOD,#10H ;置T1工作于方式1 SETBET1 ;開T1中斷 SETBEA ;CPU開中斷MAIN1:MOV60H,#00H;取簡譜碼指針NEXT:MOVA,60H;簡譜碼指針裝入AMOVDPTR,#TABLE;指向簡譜碼TABLE表地址MOVCA,@A+DPTR;簡譜碼存入AMOVR1,A;簡譜碼暫存R1JZSTOP;是否取到結(jié)束碼00?

第九十七頁,共一百一十三頁,2022年,8月28日ANLA,#0FH;沒有,則取低4位的節(jié)拍碼MOVR6,A;取到的節(jié)拍碼存入R6MOVA,R1;將取到的簡譜碼再裝入ASWAPA;高低4位交換ANLA,#0FH;取低4位的音符碼JNZSING;取到的音符碼是否為0?CLRTR1;是,則不發(fā)音AJMPDT;轉(zhuǎn)至DT

SING:DECA;對取到的非0音符碼減1MOV22H,A;音符碼暫存22HRLA;乘2MOVDPTR,#TABLE1;至TABLE1取與高字節(jié)相;對應(yīng)的頻率初值

第九十八頁,共一百一十三頁,2022年,8月28日MOVCA,@A+DPTR;MOVTH1,A ;取到的高字節(jié)存入TH1MOV21H,A ;取到的高字節(jié)存入21HMOVA,22H;重裝取到的音符碼RLA;乘2INCA;加1MOVCA,@A+DPTR;至TABLE1取與低字節(jié)相對;應(yīng)的頻率初值MOVTL1,A ;取到的低字節(jié)存入TL1MOV20H,A ;取到的低字節(jié)存入20HSETBTR1;啟動(dòng)T1,開始計(jì)時(shí)DT:LCALLDELAY;1/4拍的基本單位時(shí)間187毫秒INC60H;將簡譜碼指針加1

第九十九頁,共一百一十三頁,2022年,8月28日AJMPNEXT;取下一個(gè)碼STOP:CLRTR1;計(jì)時(shí)停止AJMPMAIN1;重復(fù)循環(huán)TIM1:PUSHACC;保護(hù)A值PUSHPSW;保護(hù)PSWMOVTH1,21H ;重裝入時(shí)間常數(shù)初值MOVTL1,20H ;重裝入時(shí)間常數(shù)初值CPLP1.0 ;P1.0取反,發(fā)聲POPPSW;恢復(fù)PSWPOPACC;恢復(fù)ARETIDELAY:MOVR5,#2;187毫秒子程序,決定音樂節(jié)拍D2:MOVR4,#187;第一百頁,共一百一十三頁,2022年,8月28日D3:MOVR3,#248;DJNZR3,$;DJNZR4,D3;DJNZR5,D2;DJNZR6,DELAY;RETTABLE1:DW64260,64400,64524,64580DW64684,64777,64820,64898DW64968,65030,65058,65110DW65157,65178,65217TABLE:;1DB82H,01H,81H,94H,84HDB0B4H,0A4H,04HDB82H,01H,81H,94H,84HDB0C4H,0B4H,04H

第一百零一頁,共一百一十三頁,2022年,8月28日DB0E2H,01H,0E1H,0D4H,0B4HDB0C4H,0B4H,04HDB00END六.總結(jié)與提高

制作音樂門鈴的關(guān)鍵就是對樂譜建表,包括T值表和簡碼表。以表4-5的T值表為例,對于簡單的樂譜,只需再增加高音區(qū)和低音區(qū)的幾個(gè)音符,其余部分不變;而簡碼表則不然,它要隨著每個(gè)音的音符和節(jié)拍而定,因曲目而異。;2DB82H,01H,81H,0F4H,0D4HDB0B4H,0A4H,94H第一百零二頁,共一百一十三頁,2022年,8月28日

下面給出《兩只老虎》的樂譜,你能制作出它的音樂門鈴嗎?兩只老虎4/4‖1231︱1231︱345_︱345_︱ 兩只老虎兩只老虎跑得快跑得快 ︱56

5431︱56

5431︱151_︱︱151_︱一只沒有耳朵一只沒有尾巴真奇怪真奇怪第一百零三頁,共一百一十三頁,2022年,8月28日☆4.6外部中斷源的擴(kuò)展在單片機(jī)控制系統(tǒng)中,外部中斷的使用非常重要,通過它可以中斷CPU的運(yùn)行,轉(zhuǎn)去處理更為緊迫的外部事務(wù),如報(bào)警、電源掉電保護(hù)等。80C51單片機(jī)僅提供了兩個(gè)外部中斷源,在實(shí)際控制系統(tǒng)中可能出現(xiàn)多個(gè)外部中斷,因此有必要對外部中斷源進(jìn)行擴(kuò)展。4.6.1利用定時(shí)器溢出中斷擴(kuò)展外部中斷源

即把內(nèi)部不使用的定時(shí)/計(jì)數(shù)器出借給外部中斷使用,方法如下:

將80C51單片機(jī)閑置的定時(shí)/計(jì)數(shù)器的初值設(shè)為全1,只要從計(jì)數(shù)引腳(T0/T1)輸入一個(gè)脈沖就可以使其引起中斷。第一百零四頁,共一百一十三頁,2022年,8月28日可以采用下面的程序初始化T1:MOVTMOD,#60H ;T1工作于方式2MOVTL1,#0FFH ;設(shè)為全1MOVTH1,#0FFH SETBTR1 ;啟動(dòng)T1SETBET1 ;開T1中斷SETBEA ;CPU開中斷┇中斷服務(wù)程序┇ RETI第一百零五頁,共一百一十三頁,2022年,

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論