51單片機(jī)中斷【精制材料】_第1頁
51單片機(jī)中斷【精制材料】_第2頁
51單片機(jī)中斷【精制材料】_第3頁
51單片機(jī)中斷【精制材料】_第4頁
51單片機(jī)中斷【精制材料】_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第五章 中斷系統(tǒng)和定時/計數(shù)器,本章學(xué)習(xí)目標(biāo) : 理解中斷概念,能正確描繪單片機(jī)中斷響應(yīng)過程 熟記80C51單片機(jī)的5個中斷源及其中斷入口地址 能按要求正確設(shè)置特殊功能寄存器IE、IP、TCON、SCON和TMOD 熟悉中斷優(yōu)先控制的方法 能正確描繪定時/計數(shù)器的4種工作方式,重點掌握方式1、方式2的應(yīng)用 學(xué)會定時/計數(shù)初值的計算 能讀懂教材中的控制實例,學(xué)會編寫同等難度的中斷、定時/計數(shù)程序,5.1 中斷系統(tǒng),5.1.1中斷系統(tǒng)的基本概念,某人看書某人正在處理一件事A 電話鈴響出現(xiàn)另一件須立即解決的事B 暫??磿兄笰 書中作記號記錄斷點,便于接續(xù) 電話談話處理B 繼續(xù)看書繼續(xù)A的工作,保護(hù)

2、斷點,中斷響應(yīng),中斷請求,中斷返回,1.中斷的概念 (1)現(xiàn)實生活中的中斷:,中斷原因: 一個人不可能同時完成兩項任務(wù)。,單片機(jī) 只有一個CPU,一旦面臨多任務(wù),它也會 中斷嗎?,先接電話,然后再繼續(xù)看書,這樣效率最高!,5.1.1中斷系統(tǒng)的基本概念,(2)單片機(jī)中的中斷,CPU在處理某一事件A時,發(fā)生了另一事件B請求CPU迅速去處理(中斷發(fā)生或中斷請求); CPU暫時中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù)); 待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回)。,什么是中斷 ?,2.中斷技術(shù)的應(yīng)用,并行處理 CPU可以與多臺外設(shè)并行工作,并分時與他

3、們進(jìn)行信息交換,提高了CPU的工作效率。 實時控制 單片機(jī)應(yīng)用系統(tǒng)可能隨機(jī)請求CPU提供服務(wù)。有了中斷系統(tǒng),CPU就可以立即響應(yīng)并予以處理。 故障處理 單片機(jī)系統(tǒng)在工作時可能會出現(xiàn)一些突發(fā)故障,如電源斷電,存儲器出錯,程序執(zhí)行錯誤(如除數(shù)為0)等,一旦出現(xiàn)故障,CPU就可及時轉(zhuǎn)去執(zhí)行故障處理程序,而不必停機(jī)。,3.中斷系統(tǒng),為實現(xiàn)中斷功能而配置的硬件和編寫的軟件就是中斷系統(tǒng)。,中斷功能由中斷系統(tǒng)來執(zhí)行。,圖4-1 中斷系統(tǒng)的結(jié)構(gòu)框圖,5.1.2 中斷源中斷的申請方,能夠向CPU發(fā)出中斷申請的部件稱為中斷源。 80C51單片機(jī)有5個中斷源。見下表,5.1.3 中斷控制中斷的控制“工具”,中斷允許

4、寄存器IE 中斷優(yōu)先級寄存器IP 定時/計數(shù)器及外部中斷控制寄存器TCON 串口控制寄存器SCON,單片機(jī)通過對4個特殊功能寄存器實施中斷控制:,1中斷允許寄存器IE,功能: 控制單片機(jī)是否接受中斷申請,以及接受哪一種中斷申請 字節(jié)地址: A8H 其格式和每位的含義如下:,圖4-2 IE的格式,由位操作指令或數(shù)據(jù)傳送指令實現(xiàn)。 例:同時打開外部中斷0和串行口中斷,可設(shè)置為:,法1:MOV IE,#10010001B,法2:SETB EA SETB ES SETB EX0,想一想還可以怎樣實現(xiàn)?,IE的設(shè)置方法:,2中斷優(yōu)先級寄存器IP,功能: 對80C51單片機(jī)進(jìn)行高級別或低級別中斷的設(shè)置,

5、IP的字節(jié)地址: B8H 格式和每位的含義如下:,圖4-3 IP的格式,舉例,例:令串行口為高優(yōu)先級中斷,外部中斷0為低優(yōu)先級中斷。 設(shè)置方法:,法1: MOV IE,#10010001B ;開中斷 MOV IP,#00010000B ;設(shè)優(yōu)先級,法2: MOV IE,#10010001B SETB PS 說明:此時串口的優(yōu)先級高于外部中斷0的優(yōu)先級,答案: 此時CPU按自然優(yōu)先級順序確定該響應(yīng)哪個中斷請求。,注意: 自然優(yōu)先級由硬件決定,用戶不能更改。排列見表42,表42 中斷入口地址及自然優(yōu)先級,3定時/計數(shù)器及外部中斷控制寄存器TCON,功能: 字節(jié)地址: 88H,可設(shè)置外部中斷申請的形

6、式:低電平觸發(fā)還是下降沿觸發(fā) 控制定時/計數(shù)器的計時開始或停止 是各中斷源(串口中斷除外)是否申請中斷的標(biāo)志位,格式如下,各位含義見表43,表43 TCON的功能說明,續(xù)表43,例 1,編程設(shè)定TCON為低電平觸發(fā)的高優(yōu)先級中斷源。,分析: 這是典型的中斷初始化問題,方法一般如下: 1)對TCON的相關(guān)位賦值 2)設(shè)定所用中斷源的優(yōu)先級賦值IP 3)開中斷置位IE,解: 法1:CLR IT1 SETB PX1 SETB EX1 SETB EA,例 1,法2:CLR IT1 MOV IP,#04H MOV IE,#84H,4串口控制寄存器SCON,功能: 只有D1和D0位用于中斷,作為串口中斷請

7、求標(biāo)志,即串口中斷請求寄存器 字節(jié)地址: 98H 格式如下:,RI為接收中斷請求標(biāo)志位。 當(dāng)串口接收完一幀串行數(shù)據(jù)時,RI自動置1; CPU響應(yīng)中斷后,用軟件對RI清0。,TI為串行口發(fā)送中斷請求標(biāo)志。 當(dāng)串口發(fā)送完一幀串行數(shù)據(jù)時,TI自動置1,請求中斷。CPU響應(yīng)中斷后,由軟件對TI清零。,5.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)條件,2.中斷響應(yīng)過程,圖44中斷響應(yīng)過程,將當(dāng)前寄存器內(nèi)容壓入堆棧,

8、如 PUSH ACC,在中斷服務(wù)程序中實現(xiàn),解決單片機(jī)中斷后要干什么的問題。,把保存在堆棧中的寄存器內(nèi)容取出,送回原來的位置,如POP ACC,4.1.5中斷嵌套,答案:CPU要進(jìn)行分析判斷,決定是否響應(yīng):,待執(zhí)行完高級別中斷服務(wù)程序后再轉(zhuǎn)回低級中斷服務(wù)程序繼續(xù)執(zhí)行,這就是中斷嵌套。,圖45 二級中斷嵌套的執(zhí)行過程,軟件構(gòu)成:主程序+中斷服務(wù)程序 程序編制的關(guān)鍵點: 要對題目要求進(jìn)行精確分析,明確哪些環(huán)節(jié)應(yīng)該安排在主程序中,哪些環(huán)節(jié)應(yīng)該安排在中斷服務(wù)程序中,再分別編制主程序和中斷服務(wù)程序。,5.2 中斷的應(yīng)用,5.2.1中斷應(yīng)用指導(dǎo),1中斷系統(tǒng)的程序編制,1中斷系統(tǒng)的程序編制,(1)編制主程序

9、,第一部分:主程序初始化 功能:,第二部分:須由主程序完成的其它功能。,此部分必須編寫,用于設(shè)置堆棧位置; 定義觸發(fā)方式(低電平觸發(fā)或脈沖下降沿觸發(fā)) 對IE和IP賦值等;,(2)選擇中斷服務(wù)程序的入口地址。 (3)編制中斷服務(wù)程序。,1中斷系統(tǒng)的程序編制,即明確中斷服務(wù)程序的起始位置,注意1: 一般要保護(hù)斷點, 即保護(hù)進(jìn)入中斷時累加器A、進(jìn)/借位標(biāo)志CY和SFR的狀態(tài),并在退出中斷之前將其恢復(fù);,注意2: 必須在中斷服務(wù)程序中設(shè)定是否允許再次中斷(即中斷嵌套),由用戶對EX0(或EX1)位置位或清0決定。,2中斷應(yīng)用舉例三相交流電的故障檢測電路,例2 圖4-6是三相交流電的故障檢測電路。當(dāng)A

10、相缺電時,發(fā)光二極管LEDA 亮;當(dāng)B相缺電時,發(fā)光二極管LEDB亮;當(dāng)C相缺電時,發(fā)光二極管LEDC亮。,硬件特點: 外部中斷 由3個交流繼電器的觸點和一個或非門擴(kuò)展而成; 3個220V的交流繼電器的線圈ZA、ZB、ZC分別接在A、B、C各相和交流地之間。,圖4-6 三相交流電的故障檢測電路,(1)檢測原理,三相電正常情況下,3個線圈同時得電,3個常開觸點全都閉合,1,不申請外部中斷,故障情況下(假設(shè)A相掉電),(1)檢測原理,線圈ZA失電,常開觸點ZA斷開,0,申請外部中斷,在外部中斷服務(wù)程序中讀取P1.0引腳狀態(tài),產(chǎn)生A相掉電狀態(tài)信號送入P1.0,1,在中斷服務(wù)程序中對該引腳輸出1,A相

11、故障指示燈亮,線圈ZB、ZC有電,常開觸點ZB、ZC閉合,B、C相故障指示燈不亮,(2)軟件設(shè)計 ORG 0000H LJMP MAIN;跳至主程序 ORG 0013H;的中斷入口地址 LJMP TEST;轉(zhuǎn)至中斷服務(wù)程序 ORG 0100H MAIN:MOV P1,#15H;P1.0、P1.2、P1.4作輸入;P1.1、P1.3、P1.5輸出0 SETB EX1;開中斷 CLR IT1 ;為低電平觸發(fā) SETB EA;CPU開中斷 SJMP $;等待中斷 TEST:JNB P1.0,LB;A相正常,轉(zhuǎn)測B相 SETB P1.1;A相掉電,點亮LEDA LB:JNB P1.2,LC;B相正常,

12、轉(zhuǎn)測C相 SETB P1.3;B相掉電,點亮LEDB LC:JNB P1.4,LL;C相正常,返回 SETB P1.5;C相掉電,點亮LEDC LL: RETI END,5.2.2 課題與實訓(xùn)7 中斷控制流水燈,一.實訓(xùn)目的 學(xué)習(xí)外部中斷的基本用法 掌握中斷處理程序的編程方法 二.課題要求 在程序正常運行時P1口的8個LED燈作單燈左移8次而后單燈右移7次,如此循環(huán);中斷時(即按鍵按下)則P1口的8個LED閃爍3次(即全亮全滅3次)。 三.背景知識 1中斷程序的設(shè)計主要涉及開中斷、設(shè)定優(yōu)先級,外中斷還 涉及觸發(fā)方式的設(shè)定。 2在軟件設(shè)計中,首先要對主程序和中斷服務(wù)程序所完成的 任務(wù)進(jìn)行劃分。根

13、據(jù)該課題提出的要求,在主程序中應(yīng)該 完成的任務(wù)是8個LED循環(huán)左移右移;在中斷服務(wù)程序中 應(yīng)該完成的功能是8個LED閃爍3次。,四.硬件電路 硬件結(jié)構(gòu)如圖,12引腳的按鍵點動表示有中斷請求發(fā)出。,圖4-7 實訓(xùn)7電路,五.參考程序 ORG 0000H LJMP START ORG 0003H LJMP INT0 ORG 0100H START:MOV SP,#60H MOV IE,#81H ;開INT0中斷 SETB IT0 ;INT0下降沿觸發(fā) L1: MOV A,#0FFH ;設(shè)初值 MOV R0,#8 ;設(shè)定左移八次 CLR C ;將CY清0 L2: RLC A ;帶進(jìn)位位循環(huán)左移一位

14、MOV P1,A ;送P1口,P1.0燈亮,ACALL DELAY ;延時0.2秒 DJNZ R0,L2 ;判斷是否左移8次 MOV R0,#7 ;移動7次 L3: RRC A ;帶進(jìn)位位循環(huán)右移 MOV P1,A ;送P1口 ACALL DELAY DJNZ R0,L3 ;是否右移7次? AJMP L1 ;重新開始 DELAY:MOV R5,#4 ;延時0.2秒 D1: MOV R6,#200 D2: MOV R7,#123 NOP DJNZ R7,$,DJNZ R6,D2 DJNZ R5,D1 RET INT0: PUSH PSW ;保護(hù)PSW,ACC值 PUSH ACC MOV A,#0

15、0H ;使8個LED全亮 MOV R2,#6 ;閃爍3次(全亮全滅各3次) L4:MOV P1,A ;A值送出 LCALL DELAY ;延時0.2秒 CPL A ;A值取反 DJNZ R2,L4 ;閃爍3次? POP ACC ;恢復(fù)保護(hù)的A值 POP PSW ;恢復(fù)保護(hù)的PSW值 RETI ;返回主程序 END,總結(jié):中斷服務(wù)程序與子程序?qū)Ρ?2提高 編寫一個由兩個中斷(外部中斷0、外部中斷1)控制的流水燈程序。 要求: 主程序不變,中斷0可使P1.0P1.3的LED閃爍5次,中斷1可使P1.4P1.7的LED閃爍5次,設(shè)定中斷1的優(yōu)先級比中斷0高。,5.3定時計數(shù)器,1. 日常生活中定時、

16、計數(shù)的例子: 如鬧鐘、畫“正”統(tǒng)計選票、家用水表對水量的計數(shù)。 2 . 單片機(jī)應(yīng)用系統(tǒng)中定時計數(shù)的需求: 如用單片機(jī)控制的打鈴器、空調(diào)的定時開關(guān)、啤酒自動生產(chǎn)線上對酒瓶的計數(shù)裝置等。 3 . 80C51單片機(jī)片內(nèi)的定時/計數(shù)器: 兩個位可編程的定時計數(shù)器:T0和T1,都能定時和對外部事件進(jìn)行計數(shù)。 此外,T1還可以作為串行接口的波特率發(fā)生器。,5.3.1定時計數(shù)器的結(jié)構(gòu),.定時和計數(shù)的原理,(1)計數(shù) 定時計數(shù)器的實質(zhì)是加計數(shù)器(位),其原理類似于古代用來計時的水鐘:,假設(shè)計滿一小時需要100,000,000 滴,這稱為水鐘的計數(shù)容量,16位定時/計數(shù)器的計數(shù)容量是65536,單片機(jī)是對脈沖個

17、數(shù)計數(shù),計數(shù)器每接收到一個脈沖,計數(shù)值加1,,當(dāng)接收滿65535個脈沖后,再來一個脈沖,計數(shù)值清0表明這一輪計數(shù)結(jié)束,同時將標(biāo)志位TF0或TF1置1。,(2)定時 單片機(jī)內(nèi)部的計數(shù)器用作定時器時,是對標(biāo)準(zhǔn)的時鐘進(jìn)行了計數(shù),每來一個時鐘脈沖,計數(shù)器加1,只要保證計數(shù)脈沖的間隔相等,則計數(shù)值就代表了時間的流逝。,見圖4-9 ,它是由單片機(jī)的晶振經(jīng)過12分頻后得到。由于晶振的頻率很準(zhǔn),所以這個時鐘脈沖的時間間隔也很準(zhǔn)。不難算出,當(dāng)單片機(jī)采用12的晶振時,它提供給計數(shù)器的脈沖頻率是,脈沖周期就是微秒。,圖4-9 定時/計數(shù)器T0的結(jié)構(gòu)示意圖,單片機(jī)內(nèi)部的16位定時計數(shù)器由高8位和低8位兩個寄存器組成:

18、 T0由TH0和TL0組成, T1由TH1和TL1組成, 定時計數(shù)器的計數(shù)值就存放在這里面。定時/計數(shù)器T1的結(jié)構(gòu)與T0相同。,圖4-9 定時/計數(shù)器T0的結(jié)構(gòu)示意圖,2定時/計數(shù)器的結(jié)構(gòu),再以水鐘為例,當(dāng)水不斷落下,下面容器中的水不斷變多,最終總有一滴水使得容器完全充滿。這時如果再有一滴水落下,就會發(fā)生“溢出”。與此類似,16位定時計數(shù)器計滿65536個脈沖時,也會發(fā)生溢出。 定時計數(shù)器溢出后標(biāo)志位TF0(或TF1)由0變1,由此能夠引發(fā)定時中斷(在中斷定時方式下),這就像定時的時間一到,鬧鐘就會響一樣。 如果采用12的晶振,對應(yīng)的脈沖周期是微秒,計滿65536個脈沖所對應(yīng)的時間就是65.5

19、36ms。,3定時/計數(shù)值的設(shè)置,再回到水鐘的例子上去: 剛才假設(shè)下面容器滴入100,000,000滴水才會滿,現(xiàn)在我們在開始滴水之前先放入一勺水,這樣問題就解決了。,計數(shù)器的道理是一樣的,只要用預(yù)置數(shù)的方法先在計數(shù)容器內(nèi)存入一個初值 (通常稱為時間常數(shù)),如我們要計100,那就存入65436,只要再來100個脈沖,就剛好會溢出,引發(fā)中斷。,計數(shù)器初值的設(shè)置,在主頻為12MHz的情況下,每個時鐘脈沖是1微秒,則計滿65536個脈沖需65.536毫秒,如要定時10毫秒則存入初值55536,(10毫秒是10000微秒,需計數(shù)10000個脈沖)??梢姡?定時器的定時時間長短與系統(tǒng)時鐘和定時器初值有關(guān)

20、。,定時器初值的設(shè)置,4-10 定時/計數(shù)器的控制關(guān)系,5.3.2定時計數(shù)器的控制 在單片機(jī)中有兩個特殊功能寄存器與定時/計數(shù)有關(guān),它們就是TMOD和TCON,定時計數(shù)器T0、T1就由它們來控制: TMOD用于設(shè)置工作方式; TCON用于控制其啟動、停止和中斷申請。,1.定時器工作方式寄存器TMOD TMOD用于設(shè)置T0和T1的工作方式,字節(jié)地址為89H,不能按位尋址。其格式和各位的含義如下:,2定時/計數(shù)器控制寄存器TCON TCON的低4位用于控制外部中斷,高4位用于控制定時/計數(shù)器的啟動和中斷申請。 TF0(或TF1) 當(dāng)計數(shù)溢出時,TF0(或TF1)會自動由0變1,告訴我們計數(shù)已滿,我

21、們可以通過查詢TF0(或TF1)位的狀態(tài)來判斷計時時間是否已到; 如果采用定時中斷方式,則 TF0(或TF1)由0變1時,能自動引發(fā)中斷。,TR0(或TR1) 由圖4-11 可知,只有當(dāng)TR0(或TR1)為1時,開關(guān)1才能閉合,計數(shù)脈沖才能進(jìn)入計數(shù)器,故TR0(或TR1)稱為運行控制位,可用指令“SETB TR0(或TR1)”來置位以啟動定時/計數(shù)器運行;或用指令“CLR TR0(或TR1)”來關(guān)閉定時/計數(shù)器的工作,一切全靠編程人員控制。,圖4-11 定時/計數(shù)器T0方式0的邏輯結(jié)構(gòu)示意圖,5.3.3 定時/計數(shù)器的工作方式 80C51單片機(jī)定時/計數(shù)器T0有4種工作方式(方式0、1、2、3

22、),T1有3種工作方式(方式0、1、2)。 1. 方式0 當(dāng)TMOD的M1M0=00時,定時/計數(shù)器工作于方式0。 方式0為13位定時/計數(shù)器,由TL0的低5位和TH0(8位)共同完成計數(shù)功能(TL0的高3位可忽略)。,當(dāng)TL0的低5位溢出時,向TH0產(chǎn)生進(jìn)位;TH0溢出時,將定時器中斷請求標(biāo)志位TF0置1,可申請中斷,也可對TF0進(jìn)行查詢。,圖4-11 定時/計數(shù)器T0方式0的邏輯結(jié)構(gòu)示意圖,2. 方式1 當(dāng)M1M0=01時,定時/計數(shù)器工作于方式1。方式1的計數(shù)位數(shù)是16位,由TL0作為低8位,TH0作為高8位共同構(gòu)成。其余操作同方式0。,圖4-12 定時/計數(shù)器T0方式1的邏輯結(jié)構(gòu)示意圖

23、,3. 方式2 當(dāng)M1M0=10時,定時/計數(shù)器工作于方式2。這是自動重裝初值的8位計數(shù)方式,它省去了方式0和方式1在多次重復(fù)計數(shù)狀態(tài)下必須重新設(shè)定計數(shù)初值的麻煩,但是卻付出了減小定時時間的代價。,圖4-13 定時/計數(shù)器T0方式2的邏輯結(jié)構(gòu)示意圖,特別適合于制作比較精確的脈沖信號發(fā)生器。,4. 方式3 方式3只適用于定時/計數(shù)器T0。當(dāng)T1被設(shè)定為方式3狀態(tài)時,將停止計數(shù)。 當(dāng)M1M0=11時,T0工作于方式3。 此時TL0和TH0作為兩個相互獨立的8位定時/計數(shù)器使用。 TL0既可定時又可計數(shù),它使用T0的各控制位、引腳和中斷源,即C/、GATE、TR0、TF0、T0(P3.4引腳)、(P

24、3.2引腳); TH0此時只能用作內(nèi)部定時功能,它借用了定時/計數(shù)器T1的控制位TR1和T1的中斷標(biāo)志位TF1,其啟動和停止只受TR1控制。,圖4-14 定時/計數(shù)器T0方式3的邏輯結(jié)構(gòu)示意圖,定時器T1無工作方式3,當(dāng)定時器T0工作在方式3時,定時器T1可設(shè)置為方式0、方式1和方式2。,4.4.1應(yīng)用指導(dǎo) 1定時/計數(shù)器的定時/計數(shù)范圍 定時/計數(shù)器工作于不同方式下的位數(shù)不同,它所具有的計數(shù)范圍也不一樣:,工作方式0:13位定時/計數(shù)方式,因此,最多可以計到213,也就是8192次。 工作方式1:16位定時/計數(shù)方式,因此,最多可 以計到216,也就是65536次。 工作方式2和工作方式3:

25、都是8位定時/計數(shù)方 式,因此,最多可以計到2 8,也就是256次。, 如果我們需要超過計數(shù)器計數(shù)范圍的定時或計數(shù)功能,應(yīng)該怎樣做?,5.4定時/計數(shù)器應(yīng)用與訓(xùn)練,2時間常數(shù)初值的計算 定時/計數(shù)器只要預(yù)設(shè)一個時間常數(shù)初值,就可以完成不超過其計數(shù)范圍的任意大小的計數(shù)。算法如下: 定時時間常數(shù)初值X: 方式0 X=8192-t(fosc/12) 方式1 X=65536-t(fosc/12) 方式2、方式3 X=256-t(fosc/12) 其中t是需要定時的時間,單位是微秒;fosc是晶振,計數(shù)時間常數(shù)X: 方式0 X=8192-S 方式1 X=65536-S 方式2、方式3 X=256-S 說

26、明:式中S是需要計數(shù)的次數(shù),假設(shè)流水線上一個包裝是12盒,要求每到12盒就產(chǎn)生一個動作,用單片機(jī)的工作方式0來控制,應(yīng)當(dāng)預(yù)置的計數(shù)初值是多少呢? 對了,就是8192-12=8180。,3定時/計數(shù)器的初始化 對80C51單片機(jī)的定時/計數(shù)器編程的初始化方法: 對TMOD賦值,以確定T0和T1的工作方式; 計算時間常數(shù)初值,并將其寫入TH0、TL0或TH1、 TL1; 采用中斷定時方式時,需對IE賦值開中斷; 置位TR0或TR1,啟動定時/計數(shù)器。,5.4.2 基本訓(xùn)練初始化訓(xùn)練,例3:某牛奶生產(chǎn)線上一個包裝是12盒,要求每生產(chǎn)12盒就執(zhí)行裝箱操作,用80C51單片機(jī)來控制,請編寫初始化程序。

27、1思路與計算:要確定定時器(T0 或T1),選擇其工作方式。我們以T0的工作方式2為例,計算時間常數(shù)并賦值給TH0、TL0。 X=256-S=256-12=244=0F4H,2初始化程序: MOV TMOD,#06H ;T0作計數(shù)器,工作于方式2 MOV TH0,#0F4H ;裝入時間常數(shù)初值 MOV TL0,#0F4H ;自動重裝時間常數(shù) MOV IE ,#00H ;用查詢方式確定計滿12盒? (或MOV IE ,#82H);使用T0中斷,計滿12盒后, ;自動申請中斷 SETB TR0 ;啟動T0波特率發(fā)生器 3總結(jié):對計數(shù)過程是否結(jié)束有查詢和中斷兩種方法,要合理選擇,并在程序設(shè)計中正確體

28、現(xiàn)。,4.4.3應(yīng)用實例 1 定時/計數(shù)器用于外部脈沖寬度的測量 (1)測量原理,可以利用定時計數(shù)器方式寄存器TMOD中的門控位GATE與 引腳配合使用,控制定時計數(shù)器的啟動與停止: 當(dāng)GATE1時,要求TR1l,且 為高電平,才能啟動定時器T1計數(shù)工作;如果 出現(xiàn)低電平,則T1停止計數(shù); 當(dāng)GATE=0時,只要TR11就可以啟動定時器,而與 的輸入狀態(tài)無關(guān)。,可以利用定時計數(shù)器方式寄存器TMOD中的門控位GATE與 引腳配合使用,控制定時計數(shù)器的啟動與停止: 當(dāng)GATE1時,要求TR1l,且 為高電平,才能啟動定時器T1計數(shù)工作;如果 出現(xiàn)低電平,則T1停止計數(shù); 當(dāng)GATE=0時,只要TR

29、11就可以啟動定時器,而與 的輸入狀態(tài)無關(guān)。,利用上述特點,將被測脈沖信號從(P3.3)引入,在T1的程序初始化中令GATE1,同時“SETB TR1”,這樣脈沖信號的上升沿就能啟動T1計數(shù),脈沖信號下降沿能使T1停止計數(shù)。利用定時器T1的計數(shù)值m乘以機(jī)器周期就可以得到被測脈沖信號的寬度TW。,(2)硬件電路 硬件電路簡圖如圖4-15。,(3)程序設(shè)計 利用80C51的內(nèi)部RAM30H、31H單元保存被測脈沖寬度對應(yīng)的計數(shù)值。 參考程序如下: ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV SP,#60H ;設(shè)堆棧指針 MOV TMOD,#90H;設(shè)置控制字,T1

30、工作于方式 ; 1,GATE=1 MOV TH1,#00H ;設(shè)定計數(shù)初值為00H,MOV TL1,#00H L1: JB P3.3,L1 ;等待輸入變?yōu)榈碗娖?SETB TR1 ;預(yù)置TR1=1,準(zhǔn)備啟動T1 L2: JNB P3.3,L2 ;等待上升沿,以便開始計數(shù) L3: JB P3.3,L3 ;是高電平則計數(shù)繼續(xù) CLR TR1 ;低電平則停止計數(shù) MOV A,TL1 ;讀低位計數(shù)值 MOV 30H,A ;低位計數(shù)值存于30H MOV A,TH1 ;讀高位計數(shù)值 MOV 31H,A ;高位計數(shù)值存于31H END,(4)總結(jié)與思考 定時/計數(shù)器還可用于測量脈沖信號的頻率、周期等。本實例

31、是利用定時/計數(shù)器的門控位(GATE)測量脈沖寬度。但要注意,在晶振12MHz的情況下,被測脈沖寬度范圍最大為655351s=65.536ms。 ,如果要測量脈沖信號的周期,該如何去做? 2計數(shù)器用于繞線機(jī)的控制 繞線機(jī)常用于對電機(jī)或變壓器的繞組進(jìn)行繞制,圖4-16是繞線機(jī)的控制電路。當(dāng)按下工作按鈕以后,機(jī)器啟動,繞線機(jī)在直流電機(jī)和減速齒輪的帶動下開始工作。當(dāng)繞線架上的線圈繞到規(guī)定的圈數(shù)時,繞線機(jī)會自動停止繞線。如果再次按下工作按鈕,繞線機(jī)會重復(fù)以上過程。,圖4-16 繞線機(jī)的控制電路 控制說明:1軟件控制P1.0=0時,繞線機(jī)開始繞線;P1.0=1時,繞線機(jī)不繞線。 2繞線機(jī)每繞一圈,繞線機(jī)

32、脈沖產(chǎn)生電路就產(chǎn)生一個脈沖信號。,(1)工作原理 由于單片機(jī)復(fù)位后P1 口的輸出狀態(tài)全部為1,所以系統(tǒng)上電后,P1.0輸出高電平“1”繞線機(jī)不工作。 當(dāng)按下工作按鈕以后,P1.1輸入低電平“0”,當(dāng)程序檢測到P1.1=0時,在程序指令的控制下從P1.0輸出低電平“0”。繞線機(jī)開始繞線。繞線機(jī)每繞一圈,定時/計數(shù)器T1的輸入引腳上就會產(chǎn)生一個負(fù)跳變的輸入脈沖。因此,只要用定時/計數(shù)器T1的計數(shù)功能控制好輸入脈沖的個數(shù),就等于控制了繞線機(jī)的繞線圈數(shù)。 當(dāng)繞線機(jī)纏繞到指定的圈數(shù)時,定時/計數(shù)器T1引發(fā)計數(shù)中斷,在程序指令的控制下,P1.0將輸出的高電平“1”,使電機(jī)停轉(zhuǎn),制動器恢復(fù)制動,于是系統(tǒng)回到

33、最初的停機(jī)狀態(tài)。,我們假設(shè)繞線架的規(guī)定匝數(shù)是5000圈,為控制這個圈數(shù),可以設(shè)定定時/計數(shù)器T1用作計數(shù)器且工作在方式1,于是確定其計數(shù)初值為: 初值=65536-5000=60536=0EC78H 所以(TH1)=0ECH,(TL1)=78H,(2)控制程序 參考程序如下: ORG 0000H AJMP MAIN ORG 001BH AJMP COUNT ORG 0100H,MAIN: MOV TMOD,#50H ;設(shè)置T1為計數(shù)器,工作于方式1 MOV TH1,#0ECH ;設(shè)定計數(shù)初值 MOV TL1,#78H MOV SP,#60H ;設(shè)堆棧指針 SETB ET1 ;開T1中斷 SET

34、B EA ;CPU開中斷 CLR F0 ;用戶標(biāo)志F0清0,WAIT: MOV C,P1.1;等待啟動 JC WAIT;P1.1=1,等待 CLR P1.0;啟動設(shè)備 SETB TR0;T1開始計數(shù),LOOP: JNB F0,$ ;等待計數(shù)5000中斷 SETB P1.0;繞線機(jī)停止工作 CLR TR0 ;T1停止計數(shù) CLR F0 ;清0 SJMP WAIT;等待重新啟動 ORG 0200H;T1中斷服務(wù)程序起始地址COUNT:MOV TH1,#0ECH;重新設(shè)定計數(shù)初值 MOV TL1,#78H SETB F0;用戶標(biāo)志置1 RETI ;中斷返回 END,.4.4課題與實訓(xùn)8 簡易方波發(fā)生

35、器,一.實訓(xùn)目的 掌握定時器初值的計算方法 學(xué)習(xí)定時器的使用及定時中斷程序的設(shè)計方法 掌握方波信號發(fā)生器的設(shè)計方法 二.課題要求 1基本要求: 利用定時/計數(shù)器T1,工作于方式0,采用查詢方式,在P1.0引腳輸出頻率為500Hz的方波,并用示波器進(jìn)行觀察(晶振采用12MHz)。 2較高要求: 利用定時/計數(shù)器T1,工作于方式0,采用中斷方式,在P1.0引腳輸出頻率為500Hz的方波,并用示波器進(jìn)行觀察(晶振采用12MHz)。,三.背景知識 1方波產(chǎn)生原理 使P1.0引腳的輸出狀態(tài)定時翻轉(zhuǎn),則該端口能輸出一定頻率的方波。 2方式0的時間常數(shù)初值 定時/計數(shù)器工作于方式0狀態(tài)下,定時/計數(shù)的長度是

36、13位。應(yīng)用前面給出的時間常數(shù)初值的計算公式 X=8192-t(fosc/12) 我們可以很方便地計算出時間常數(shù)初值,但在將其裝入定時/計數(shù)器的TH、TL寄存器時,必須要注意:將計算結(jié)果的高8位裝入TH1(或TH0)、低5位裝入TL1(或TL0),這一環(huán)節(jié)是非常容易出錯的。,以該實訓(xùn)T1方式0產(chǎn)生500Hz的方波(周期是2ms)為例,需要進(jìn)行1ms的定時,時間常數(shù)初值 X=8192-110-3(12106/12)=8192- 1000=7192=1C18H=0001110000011000B 以13位二進(jìn)制數(shù)表示,是11100000 11000B, 則(TL1)=00011000B=18H,(

37、TH1)=11100000B=0E0H 定義TMOD=00000000B,四.硬件電路 該實訓(xùn)硬件電路十分簡單,見圖4-17。,圖4-17 簡易方波發(fā)生器的硬件電路,五.參考程序 (1) P1.0輸出500Hz方波查詢方式 ORG 0000H LJMP MAIN ;跳至主程序 ORG 0100H MAIN:MOV TMOD,#00H;置T1工作于方式0 MOV TH1,#0E0H;裝入時間常數(shù)初值 MOV TL1,#18H SETB TR1 ;啟動T1 LOOP:JNB TF1,LOOP ;查詢等待 CLR TF1 ;清TF1 CPL P1.0 ;P1.0取反,MOV TH1,#0E0H;重新

38、裝入時間常數(shù)初值 MOV TL1,#18H AJMP LOOP ;繼續(xù)生成波形 END,(2) P1.0輸出500Hz方波中斷方式 ORG 0000H LJMP MAIN ;跳至主程序 ORG 001BH ;T1的中斷入口地址 LJMP FANGBO;轉(zhuǎn)至中斷服務(wù)程序 ORG 0100H MAIN:MOV TMOD,#00H;置T1工作于方式0 MOV TH1,#0E0H;裝入時間常數(shù)初值 MOV TL1,#18H SETB ET1 ;允許T1中斷 SETB EA ;CPU開中斷 SETB TR1 ;啟動T1,SJMP $ ;等待中斷 FANGBO:CPL P1.0 ;P1.0取反 MOV T

39、H1,#0E0H;重新裝入時間常數(shù)初值 MOV TL1,#18H RETI ;中斷返回 END,六.總結(jié)與提高 1總結(jié) 本實訓(xùn)利用定時器T1的定時功能,以兩種形式輸出頻率為500Hz方波。在實際應(yīng)用中,方波的頻率可能要根據(jù)現(xiàn)場測量參數(shù)、給定參數(shù)或按照某種函數(shù)關(guān)系而變化。因此輸出波形的頻率在編程時還是未知的。,2提高 定時/計數(shù)器的計時范圍有限,當(dāng)晶振采用12MHz時,方式1的計時時間最長,也只有65.536ms。當(dāng)需要定時的時間超出了定時/計數(shù)器的計數(shù)范圍,如需定時2秒,這時可以采用以下兩種方法來處理:, 定時器+軟件計數(shù)的方法 思路是:利用定時/計數(shù)器T1,工作于方式1,實現(xiàn)50 ms/次的

40、定時,只要定時40次即可實現(xiàn)2s定時。 可以算出定時/計數(shù)器T1工作于方式1時,時間常數(shù)初值為 X=65536-t(fosc/12)=65536-5010-3(12106/12) =15536=3CB0H 于是(TH1)=3CH ,(TL1)=0B0H。,定義TMOD=00010000B,此處只給出延時2s的查詢方式子程序。 DELAY:MOV R3,#40 ;設(shè)置定時器溢出次數(shù) SETB TR1 ;啟動T1開始計時 D1: MOV TH1,#3CH ;裝入時間常數(shù)初值 MOV TL1,#0B0H,D2:JBC TF1,D3;TF1為1否?是則跳至D3,并清TF1, AJMP D2 ;否,則跳

41、至D2 D3:DJNZ R3,D1;R3=0?不是,跳到D1 CLR TR1 ;是,則停止計數(shù) RET,采用兩個定時器串聯(lián)的方法 思路是: 將兩個定時器中的一個(如T0)設(shè)置為定時方式,另一個(T1)設(shè)置成計數(shù)方式;將定時器T0計滿產(chǎn)生的輸出,通過一根I/O口線(如P1.0)連接到計數(shù)器T1的計數(shù)脈沖輸入端P3.5,從而實現(xiàn)更長時間的定時。,5.5中斷與定時計數(shù)器綜合應(yīng)用舉例,5.5.1 概述,定時/計數(shù)功能與中斷一樣,都是單片機(jī)的常用功能。兩者常常同時使用。如實訓(xùn)7就是簡單的中斷、定時綜合應(yīng)用實例。在這類程序的編制過程中,要注意這樣幾個問題:,選擇合適的中斷和定時/計數(shù)方式。 如外部中斷是采

42、用電平觸發(fā)還是脈沖下降沿觸發(fā);定時/計數(shù)是用自動重裝方式還是每次定時結(jié)束后用軟件重裝。,確定定時結(jié)束的判別方法,用中斷還是查詢。 如采用中斷,與其它中斷的優(yōu)先級如何確定,是否會影響系統(tǒng)功能。 正確初始化。 合理分配控制功能。,5.5.2課題與實訓(xùn)9 音樂門鈴,一.實訓(xùn)目的 1. 掌握中斷與定時/計數(shù)綜合程序的設(shè)計方法 2.學(xué)習(xí)音樂門鈴的設(shè)計過程 二.課題要求 在單片機(jī)P1.0引腳外接揚(yáng)聲器,唱出祝你生日快樂歌。,三.背景知識 1.音頻脈沖的產(chǎn)生 聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機(jī)某個口線的“高”電平或“低”電平,則在該口線上就能產(chǎn)生一定頻率的方波,接上喇叭就能發(fā)出一定頻

43、率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào)。 例如,要產(chǎn)生中音1。從表4-5可知,中音1的頻率為523Hz,周期T=1/523=1912s,其半周期為1912/2=956s,因此只要在P1.0引腳產(chǎn)生半周期為956s的方波,即可聽到持續(xù)的1音。C調(diào)各音符頻率與計數(shù)初值的對應(yīng)表如下:,注:不發(fā)音的簡譜碼用“0”表示,2音樂節(jié)拍的生成 要唱出一首歌,只產(chǎn)生出音頻脈沖還不夠,還要考慮節(jié)拍。 定義:每個音符占用一個字節(jié),字節(jié)的高4位代表音符的高低,低4位表示該音符的節(jié)拍,如果一拍為0.4秒,則1/4拍是0.1秒,只要設(shè)定延遲時間就可獲得節(jié)拍的時間。我們也可

44、以設(shè)1/4拍為1個DELAY,則1拍應(yīng)該是4個DELAY,只要求得1/4拍的DELAY時間,其余的節(jié)拍就是它的倍數(shù)。見表,表4-6 節(jié)拍與節(jié)拍碼對照表,3.建立音樂的步驟: 先把譜的音符找出,然后由上表建立時間常數(shù)初值T的順序表,標(biāo)號為TABLE1。 建立音符和節(jié)拍表,標(biāo)號為TABLE,將構(gòu)成發(fā)音符的計數(shù)值放在其中。 TABLE表的結(jié)構(gòu)為:簡譜碼(代表音符)為高4位,節(jié)拍碼(表示節(jié)拍數(shù))為低4位,在唱歌程序中對每一個有節(jié)拍的音符能通過設(shè)計共同生成音符節(jié)拍碼,本程序的音符節(jié)拍碼表見表4-5。,(1)1/4拍的延遲時間=187毫秒 DELAY:MOV R5,#02 D1:MOV R4,#187 D

45、2:MOV R3,#248 DJNZ R3,$ DJNZ R4,D2 DJNZ R5,D1 DJNZ R6,DELAY RET,(2)歌譜 生日快樂歌 C3/4 5 . 5 6 5 7 -5 . 5 6 5 - 祝 你生日 快 樂 祝 你 生 日 快 樂 5 . 5 7 6- 我 們高聲 歌 唱 祝 你生日 快 樂,四.硬件電路,圖4-18 音樂的應(yīng)用 電路,五.參考程序,ORG 0000H LJMP MAIN ;跳至主程序 ORG 001BH ;T1的中斷入口地址 LJMP TIM1 ;轉(zhuǎn)至中斷服務(wù)程序 ORG 0100H MAIN:MOV TMOD,#10H ;置T1工作于方式1 SETB

46、 ET1 ;開T1中斷 SETB EA ;CPU開中斷 MAIN1: MOV 60H,#00H ;取簡譜碼指針 NEXT: MOV A,60H ;簡譜碼指針裝入A MOV DPTR,#TABLE ;指向簡譜碼TABLE表地址 MOVC A,A+DPTR ;簡譜碼存入A MOV R1,A ;簡譜碼暫存R1 JZ STOP ;是否取到結(jié)束碼00?,ANL A,#0FH ;沒有,則取低4位的節(jié)拍碼 MOV R6,A ;取到的節(jié)拍碼存入R6 MOV A, R1 ;將取到的簡譜碼再裝入A SWAP A ;高低4位交換 ANL A,#0FH ;取低4位的音符碼,JNZ SING ;取到的音符碼是否為0?

47、CLR TR1 ;是,則不發(fā)音 AJMP DT ;轉(zhuǎn)至DTSING: DEC A ;對取到的非0音符碼減1 MOV 22H,A ;音符碼暫存22H RL A;乘2 MOV DPTR,#TABLE1 ;至TABLE1取與高字節(jié)相 ;對應(yīng)的頻率初值,MOVC A,A+DPTR ; MOV TH1,A ;取到的高字節(jié)存入TH1 MOV 21H,A ;取到的高字節(jié)存入21H MOV A, 22H ;重裝取到的音符碼 RL A;乘2 INC A;加1 MOVC A,A+DPTR ;至TABLE1取與低字節(jié)相對 ;應(yīng)的頻率初值 MOV TL1,A ;取到的低字節(jié)存入TL1 MOV 20H,A ;取到的低字

48、節(jié)存入20H SETB TR1 ;啟動T1,開始計時,DT: LCALL DELAY ;1/4拍的基本單位時間187毫秒 INC 60H ;將簡譜碼指針加1,AJMP NEXT ;取下一個碼 STOP: CLR TR1 ;計時停止 AJMP MAIN1 ;重復(fù)循環(huán) TIM1: PUSH ACC ;保護(hù)A值 PUSH PSW ;保護(hù)PSW MOV TH1,21H;重裝入時間常數(shù)初值 MOV TL1,20H;重裝入時間常數(shù)初值 CPL P1.0 ;P1.0取反,發(fā)聲 POP PSW ;恢復(fù)PSW POP ACC ;恢復(fù)A RETI DELAY: MOV R5,#2 ;187毫秒子程序,決定音樂節(jié)拍

49、 D2: MOV R4,#187 ;,D3: MOV R3,#248; DJNZ R3,$; DJNZ R4,D3; DJNZ R5,D2; DJNZ R6,DELAY; RET TABLE1: DW 64260,64400,64524,64580 DW 64684,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217 TABLE: ;1 DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H,DB 0E2H,01

50、H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00 END,六.總結(jié)與提高 制作音樂門鈴的關(guān)鍵就是對樂譜建表,包括T值表和簡碼表。以表4-5的T值表為例,對于簡單的樂譜,只需再增加高音區(qū)和低音區(qū)的幾個音符,其余部分不變;而簡碼表則不然,它要隨著每個音的音符和節(jié)拍而定,因曲目而異。,;2 DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H,下面給出兩只老虎的樂譜,你能制作出它的音樂門鈴嗎? 兩只老虎 4/4 1 2 3 11 2 3 13 4 53 4 5 兩只老虎 兩只老虎 跑得快跑得快 5 6 5 4 3 15 6 5 4 3 11

51、 5 11 5 1 一只沒有耳朵 一只沒有尾巴 真奇怪 真奇怪,4.6外部中斷源的擴(kuò)展,在單片機(jī)控制系統(tǒng)中,外部中斷的使用非常重要,通過它可以中斷CPU的運行,轉(zhuǎn)去處理更為緊迫的外部事務(wù),如報警、電源掉電保護(hù)等。 80C51單片機(jī)僅提供了兩個外部中斷源,在實際控制系統(tǒng)中可能出現(xiàn)多個外部中斷,因此有必要對外部中斷源進(jìn)行擴(kuò)展。,4.6.1利用定時器溢出中斷擴(kuò)展外部中斷源,即把內(nèi)部不使用的定時/計數(shù)器出借給外部中斷使用,方法如下: 將80C51單片機(jī)閑置的定時/計數(shù)器的初值設(shè)為全1,只要從計數(shù)引腳(T0/T1)輸入一個脈沖就可以使其引起中斷。,可以采用下面的程序初始化T1: MOV TMOD,#60

52、H;T1工作于方式2 MOV TL1,#0FFH;設(shè)為全1 MOV TH1,#0FFH SETB TR1 ;啟動T1 SETB ET1 ;開T1中斷 SETB EA ;CPU開中斷 中斷服務(wù)程序 RETI,4.6.2利用中斷與查詢相結(jié)合的方式擴(kuò)展,電路如圖419所示,當(dāng)CPU檢測到 的中斷請求信號時,由P1口查詢判斷中斷源,點亮相應(yīng)的發(fā)光二極管。,源程序如下: ORG 0000H AJMP MAIN ;設(shè)主程序入口 ORG 0003H ; 中斷入口 AJMP LL ;轉(zhuǎn)中斷服務(wù)程序 ORG 0100H ;主程序起始地址 MAIN:ORL P1,#0FFH ;P1口置輸入,SETB IT0 ;設(shè) 邊沿觸

溫馨提示

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

評論

0/150

提交評論