




已閱讀5頁,還剩108頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章 中斷系統(tǒng)和定時(shí)/計(jì)數(shù)器,本章學(xué)習(xí)目標(biāo) : 理解中斷概念,能正確描繪單片機(jī)中斷響應(yīng)過程 熟記80C51單片機(jī)的5個(gè)中斷源及其中斷入口地址 能按要求正確設(shè)置特殊功能寄存器IE、IP、TCON、SCON和TMOD 熟悉中斷優(yōu)先控制的方法 能正確描繪定時(shí)/計(jì)數(shù)器的4種工作方式,重點(diǎn)掌握方式1、方式2的應(yīng)用 學(xué)會(huì)定時(shí)/計(jì)數(shù)初值的計(jì)算 能讀懂教材中的控制實(shí)例,學(xué)會(huì)編寫同等難度的中斷、定時(shí)/計(jì)數(shù)程序,4.1 中斷系統(tǒng),4.1.1中斷系統(tǒng)的基本概念,某人看書某人正在處理一件事A 電話鈴響出現(xiàn)另一件須立即解決的事B 暫??磿兄笰 書中作記號(hào)記錄斷點(diǎn),便于接續(xù) 電話談話處理B 繼續(xù)看書繼續(xù)A的工作,保護(hù)斷點(diǎn),中斷響應(yīng),中斷請(qǐng)求,中斷返回,1.中斷的概念 (1)現(xiàn)實(shí)生活中的中斷:,中斷原因: 一個(gè)人不可能同時(shí)完成兩項(xiàng)任務(wù)。,單片機(jī) 只有一個(gè)CPU,一旦面臨多任務(wù),它也會(huì) 中斷嗎?,先接電話,然后再繼續(xù)看書,這樣效率最高!,4.1.1中斷系統(tǒng)的基本概念,(2)單片機(jī)中的中斷,CPU在處理某一事件A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生或中斷請(qǐng)求); CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù)); 待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回)。,什么是中斷 ?,2.中斷技術(shù)的應(yīng)用,并行處理 CPU可以與多臺(tái)外設(shè)并行工作,并分時(shí)與他們進(jìn)行信息交換,提高了CPU的工作效率。 實(shí)時(shí)控制 單片機(jī)應(yīng)用系統(tǒng)可能隨機(jī)請(qǐng)求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ī)。,3.中斷系統(tǒng),為實(shí)現(xiàn)中斷功能而配置的硬件和編寫的軟件就是中斷系統(tǒng)。,中斷功能由中斷系統(tǒng)來執(zhí)行。,圖4-1 中斷系統(tǒng)的結(jié)構(gòu)框圖,4.1.2 中斷源中斷的申請(qǐng)方,能夠向CPU發(fā)出中斷申請(qǐng)的部件稱為中斷源。 80C51單片機(jī)有5個(gè)中斷源。見下表,4.1.3 中斷控制中斷的控制“工具”,中斷允許寄存器IE 中斷優(yōu)先級(jí)寄存器IP 定時(shí)/計(jì)數(shù)器及外部中斷控制寄存器TCON 串口控制寄存器SCON,單片機(jī)通過對(duì)4個(gè)特殊功能寄存器實(shí)施中斷控制:,1中斷允許寄存器IE,功能: 控制單片機(jī)是否接受中斷申請(qǐng),以及接受哪一種中斷申請(qǐng) 字節(jié)地址: A8H 其格式和每位的含義如下:,圖4-2 IE的格式,由位操作指令或數(shù)據(jù)傳送指令實(shí)現(xiàn)。 例:同時(shí)打開外部中斷0和串行口中斷,可設(shè)置為:,法1:MOV IE,#10010001B,法2:SETB EA SETB ES SETB EX0,想一想還可以怎樣實(shí)現(xiàn)?,IE的設(shè)置方法:,2中斷優(yōu)先級(jí)寄存器IP,功能: 對(duì)80C51單片機(jī)進(jìn)行高級(jí)別或低級(jí)別中斷的設(shè)置, IP的字節(jié)地址: B8H 格式和每位的含義如下:,圖4-3 IP的格式,舉例,例:令串行口為高優(yōu)先級(jí)中斷,外部中斷0為低優(yōu)先級(jí)中斷。 設(shè)置方法:,法1: MOV IE,#10010001B ;開中斷 MOV IP,#00010000B ;設(shè)優(yōu)先級(jí),法2: MOV IE,#10010001B SETB PS 說明:此時(shí)串口的優(yōu)先級(jí)高于外部中斷0的優(yōu)先級(jí),答案: 此時(shí)CPU按自然優(yōu)先級(jí)順序確定該響應(yīng)哪個(gè)中斷請(qǐng)求。,注意: 自然優(yōu)先級(jí)由硬件決定,用戶不能更改。排列見表42,表42 中斷入口地址及自然優(yōu)先級(jí),3定時(shí)/計(jì)數(shù)器及外部中斷控制寄存器TCON,功能: 字節(jié)地址: 88H,可設(shè)置外部中斷申請(qǐng)的形式:低電平觸發(fā)還是下降沿觸發(fā) 控制定時(shí)/計(jì)數(shù)器的計(jì)時(shí)開始或停止 是各中斷源(串口中斷除外)是否申請(qǐng)中斷的標(biāo)志位,格式如下,各位含義見表43,表43 TCON的功能說明,續(xù)表43,例 1,編程設(shè)定TCON為低電平觸發(fā)的高優(yōu)先級(jí)中斷源。,分析: 這是典型的中斷初始化問題,方法一般如下: 1)對(duì)TCON的相關(guān)位賦值 2)設(shè)定所用中斷源的優(yōu)先級(jí)賦值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位用于中斷,作為串口中斷請(qǐng)求標(biāo)志,即串口中斷請(qǐng)求寄存器 字節(jié)地址: 98H 格式如下:,RI為接收中斷請(qǐng)求標(biāo)志位。 當(dāng)串口接收完一幀串行數(shù)據(jù)時(shí),RI自動(dòng)置1; CPU響應(yīng)中斷后,用軟件對(duì)RI清0。,TI為串行口發(fā)送中斷請(qǐng)求標(biāo)志。 當(dāng)串口發(fā)送完一幀串行數(shù)據(jù)時(shí),TI自動(dòng)置1,請(qǐng)求中斷。CPU響應(yīng)中斷后,由軟件對(duì)TI清零。,其他幾位的含義及用法見第5章。,4.1.4 中斷響應(yīng),無同級(jí)或高級(jí)中斷正在服務(wù) 有中斷請(qǐng)求信號(hào) 相應(yīng)的中斷源已打開,即EA=1,中斷源對(duì)應(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)容壓入堆棧,如 PUSH ACC,在中斷服務(wù)程序中實(shí)現(xiàn),解決單片機(jī)中斷后要干什么的問題。,把保存在堆棧中的寄存器內(nèi)容取出,送回原來的位置,如POP ACC,4.1.5中斷嵌套,答案:CPU要進(jìn)行分析判斷,決定是否響應(yīng):,待執(zhí)行完高級(jí)別中斷服務(wù)程序后再轉(zhuǎn)回低級(jí)中斷服務(wù)程序繼續(xù)執(zhí)行,這就是中斷嵌套。,圖45 二級(jí)中斷嵌套的執(zhí)行過程,軟件構(gòu)成:主程序+中斷服務(wù)程序 程序編制的關(guān)鍵點(diǎn): 要對(duì)題目要求進(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)的程序編制,1中斷系統(tǒng)的程序編制,(1)編制主程序,第一部分:主程序初始化 功能:,第二部分:須由主程序完成的其它功能。,此部分必須編寫,用于設(shè)置堆棧位置; 定義觸發(fā)方式(低電平觸發(fā)或脈沖下降沿觸發(fā)) 對(duì)IE和IP賦值等;,(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è)定是否允許再次中斷(即中斷嵌套),由用戶對(duì)EX0(或EX1)位置位或清0決定。,2中斷應(yīng)用舉例三相交流電的故障檢測(cè)電路,例2 圖4-6是三相交流電的故障檢測(cè)電路。當(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 三相交流電的故障檢測(cè)電路,(1)檢測(cè)原理,三相電正常情況下,3個(gè)線圈同時(shí)得電,3個(gè)常開觸點(diǎn)全都閉合,1,不申請(qǐng)外部中斷,故障情況下(假設(shè)A相掉電),(1)檢測(cè)原理,線圈ZA失電,常開觸點(diǎn)ZA斷開,0,申請(qǐng)外部中斷,在外部中斷服務(wù)程序中讀取P1.0引腳狀態(tài),產(chǎn)生A相掉電狀態(tài)信號(hào)送入P1.0,1,在中斷服務(wù)程序中對(duì)該引腳輸出1,A相故障指示燈亮,線圈ZB、ZC有電,常開觸點(diǎn)ZB、ZC閉合,B、C相故障指示燈不亮,(2)軟件設(shè)計(jì) 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)測(cè)B相 SETB P1.1 ;A相掉電,點(diǎn)亮LEDA LB: JNB P1.2,LC ;B相正常,轉(zhuǎn)測(cè)C相 SETB P1.3 ;B相掉電,點(diǎn)亮LEDB LC: JNB P1.4,LL ;C相正常,返回 SETB P1.5 ;C相掉電,點(diǎn)亮LEDC LL: RETI END,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)先級(jí),外中斷還 涉及觸發(fā)方式的設(shè)定。 2在軟件設(shè)計(jì)中,首先要對(duì)主程序和中斷服務(wù)程序所完成的 任務(wù)進(jìn)行劃分。根據(jù)該課題提出的要求,在主程序中應(yīng)該 完成的任務(wù)是8個(gè)LED循環(huán)左移右移;在中斷服務(wù)程序中 應(yīng)該完成的功能是8個(gè)LED閃爍3次。,四.硬件電路 硬件結(jié)構(gòu)如圖,12引腳的按鍵點(diǎn)動(dòng)表示有中斷請(qǐng)求發(fā)出。,圖4-7 實(shí)訓(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)左移一位 MOV P1,A ;送P1口,P1.0燈亮,ACALL DELAY ;延時(shí)0.2秒 DJNZ R0, L2 ;判斷是否左移8次 MOV R0,#7 ;移動(dòng)7次 L3: RRC A ;帶進(jìn)位位循環(huán)右移 MOV P1,A ;送P1口 ACALL DELAY DJNZ R0,L3 ;是否右移7次? AJMP L1 ;重新開始 DELAY:MOV R5,#4 ;延時(shí)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,#00H ;使8個(gè)LED全亮 MOV R2,#6 ;閃爍3次(全亮全滅各3次) L4:MOV P1,A ;A值送出 LCALL DELAY ;延時(shí)0.2秒 CPL A ;A值取反 DJNZ R2,L4 ;閃爍3次? POP ACC ;恢復(fù)保護(hù)的A值 POP PSW ;恢復(fù)保護(hù)的PSW值 RETI ;返回主程序 END,六.總結(jié)與提高 1. 總結(jié):中斷服務(wù)程序與子程序?qū)Ρ?2提高 編寫一個(gè)由兩個(gè)中斷(外部中斷0、外部中斷1)控制的流水燈程序。 要求: 主程序不變,中斷0可使P1.0P1.3的LED閃爍5次,中斷1可使P1.4P1.7的LED閃爍5次,設(shè)定中斷1的優(yōu)先級(jí)比中斷0高。,.3定時(shí)計(jì)數(shù)器,1. 日常生活中定時(shí)、計(jì)數(shù)的例子: 如鬧鐘、畫“正”統(tǒng)計(jì)選票、家用水表對(duì)水量的計(jì)數(shù)。 2 . 單片機(jī)應(yīng)用系統(tǒng)中定時(shí)計(jì)數(shù)的需求: 如用單片機(jī)控制的打鈴器、空調(diào)的定時(shí)開關(guān)、啤酒自動(dòng)生產(chǎn)線上對(duì)酒瓶的計(jì)數(shù)裝置等。 3 . 80C51單片機(jī)片內(nèi)的定時(shí)/計(jì)數(shù)器: 兩個(gè)位可編程的定時(shí)計(jì)數(shù)器:T0和T1,都能定時(shí)和對(duì)外部事件進(jìn)行計(jì)數(shù)。 此外,T1還可以作為串行接口的波特率發(fā)生器。,.3.1定時(shí)計(jì)數(shù)器的結(jié)構(gòu),.定時(shí)和計(jì)數(shù)的原理,(1)計(jì)數(shù) 定時(shí)計(jì)數(shù)器的實(shí)質(zhì)是加計(jì)數(shù)器(位),其原理類似于古代用來計(jì)時(shí)的水鐘:,假設(shè)計(jì)滿一小時(shí)需要100,000,000 滴,這稱為水鐘的計(jì)數(shù)容量,16位定時(shí)/計(jì)數(shù)器的計(jì)數(shù)容量是65536,單片機(jī)是對(duì)脈沖個(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。,(2)定時(shí) 單片機(jī)內(nèi)部的計(jì)數(shù)器用作定時(shí)器時(shí),是對(duì)標(biāo)準(zhǔn)的時(shí)鐘進(jìn)行了計(jì)數(shù),每來一個(gè)時(shí)鐘脈沖,計(jì)數(shù)器加1,只要保證計(jì)數(shù)脈沖的間隔相等,則計(jì)數(shù)值就代表了時(shí)間的流逝。,見圖4-9 ,它是由單片機(jī)的晶振經(jīng)過12分頻后得到。由于晶振的頻率很準(zhǔn),所以這個(gè)時(shí)鐘脈沖的時(shí)間間隔也很準(zhǔn)。不難算出,當(dāng)單片機(jī)采用12的晶振時(shí),它提供給計(jì)數(shù)器的脈沖頻率是,脈沖周期就是微秒。,圖4-9 定時(shí)/計(jì)數(shù)器T0的結(jié)構(gòu)示意圖,單片機(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),再以水鐘為例,當(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ì)響一樣。 如果采用12的晶振,對(duì)應(yīng)的脈沖周期是微秒,計(jì)滿65536個(gè)脈沖所對(duì)應(yīng)的時(shí)間就是65.536ms。,3定時(shí)/計(jì)數(shù)值的設(shè)置,再回到水鐘的例子上去: 剛才假設(shè)下面容器滴入100,000,000滴水才會(huì)滿,現(xiàn)在我們?cè)陂_始滴水之前先放入一勺水,這樣問題就解決了。,計(jì)數(shù)器的道理是一樣的,只要用預(yù)置數(shù)的方法先在計(jì)數(shù)容器內(nèi)存入一個(gè)初值 (通常稱為時(shí)間常數(shù)),如我們要計(jì)100,那就存入65436,只要再來100個(gè)脈沖,就剛好會(huì)溢出,引發(fā)中斷。,計(jì)數(shù)器初值的設(shè)置,在主頻為12MHz的情況下,每個(gè)時(shí)鐘脈沖是1微秒,則計(jì)滿65536個(gè)脈沖需65.536毫秒,如要定時(shí)10毫秒則存入初值55536,(10毫秒是10000微秒,需計(jì)數(shù)10000個(gè)脈沖)。可見, 定時(shí)器的定時(shí)時(shí)間長(zhǎng)短與系統(tǒng)時(shí)鐘和定時(shí)器初值有關(guān)。,定時(shí)器初值的設(shè)置,4-10 定時(shí)/計(jì)數(shù)器的控制關(guān)系,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)、停止和中斷申請(qǐng)。,1.定時(shí)器工作方式寄存器TMOD TMOD用于設(shè)置T0和T1的工作方式,字節(jié)地址為89H,不能按位尋址。其格式和各位的含義如下:,2定時(shí)/計(jì)數(shù)器控制寄存器TCON TCON的低4位用于控制外部中斷,高4位用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請(qǐ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ā)中斷。,TR0(或TR1) 由圖4-11 可知,只有當(dāng)TR0(或TR1)為1時(shí),開關(guān)1才能閉合,計(jì)數(shù)脈沖才能進(jìn)入計(jì)數(shù)器,故TR0(或TR1)稱為運(yùn)行控制位,可用指令“SETB TR0(或TR1)”來置位以啟動(dòng)定時(shí)/計(jì)數(shù)器運(yùn)行;或用指令“CLR TR0(或TR1)”來關(guān)閉定時(shí)/計(jì)數(shù)器的工作,一切全靠編程人員控制。,圖4-11 定時(shí)/計(jì)數(shù)器T0方式0的邏輯結(jié)構(gòu)示意圖,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í)器中斷請(qǐng)求標(biāo)志位TF0置1,可申請(qǐng)中斷,也可對(duì)TF0進(jìn)行查詢。,圖4-11 定時(shí)/計(jì)數(shù)器T0方式0的邏輯結(jié)構(gòu)示意圖,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)示意圖,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)示意圖,特別適合于制作比較精確的脈沖信號(hào)發(fā)生器。,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控制。,圖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。,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ì)到2 8,也就是256次。, 如果我們需要超過計(jì)數(shù)器計(jì)數(shù)范圍的定時(shí)或計(jì)數(shù)功能,應(yīng)該怎樣做?,4.4定時(shí)/計(jì)數(shù)器應(yīng)用與訓(xùn)練,2時(shí)間常數(shù)初值的計(jì)算 定時(shí)/計(jì)數(shù)器只要預(yù)設(shè)一個(gè)時(shí)間常數(shù)初值,就可以完成不超過其計(jì)數(shù)范圍的任意大小的計(jì)數(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是需要定時(shí)的時(shí)間,單位是微秒;fosc是晶振,計(jì)數(shù)時(shí)間常數(shù)X: 方式0 X=8192-S 方式1 X=65536-S 方式2、方式3 X=256-S 說明:式中S是需要計(jì)數(shù)的次數(shù),假設(shè)流水線上一個(gè)包裝是12盒,要求每到12盒就產(chǎn)生一個(gè)動(dòng)作,用單片機(jī)的工作方式0來控制,應(yīng)當(dāng)預(yù)置的計(jì)數(shù)初值是多少呢? 對(duì)了,就是8192-12=8180。,3定時(shí)/計(jì)數(shù)器的初始化 對(duì)80C51單片機(jī)的定時(shí)/計(jì)數(shù)器編程的初始化方法: 對(duì)TMOD賦值,以確定T0和T1的工作方式; 計(jì)算時(shí)間常數(shù)初值,并將其寫入TH0、TL0或TH1、 TL1; 采用中斷定時(shí)方式時(shí),需對(duì)IE賦值開中斷; 置位TR0或TR1,啟動(dòng)定時(shí)/計(jì)數(shù)器。,4.4.2 基本訓(xùn)練初始化訓(xùn)練,例3:某牛奶生產(chǎn)線上一個(gè)包裝是12盒,要求每生產(chǎn)12盒就執(zhí)行裝箱操作,用80C51單片機(jī)來控制,請(qǐng)編寫初始化程序。 1思路與計(jì)算:要確定定時(shí)器(T0 或T1),選擇其工作方式。我們以T0的工作方式2為例,計(jì)算時(shí)間常數(shù)并賦值給TH0、TL0。 X=256-S=256-12=244=0F4H,2初始化程序: MOV TMOD,#06H ;T0作計(jì)數(shù)器,工作于方式2 MOV TH0,#0F4H ;裝入時(shí)間常數(shù)初值 MOV TL0,#0F4H ;自動(dòng)重裝時(shí)間常數(shù) MOV IE ,#00H ;用查詢方式確定計(jì)滿12盒? (或MOV IE ,#82H);使用T0中斷,計(jì)滿12盒后, ;自動(dòng)申請(qǐng)中斷 SETB TR0 ;啟動(dòng)T0波特率發(fā)生器 3總結(jié):對(duì)計(jì)數(shù)過程是否結(jié)束有查詢和中斷兩種方法,要合理選擇,并在程序設(shè)計(jì)中正確體現(xiàn)。,4.4.3應(yīng)用實(shí)例 1 定時(shí)/計(jì)數(shù)器用于外部脈沖寬度的測(cè)量 (1)測(cè)量原理,可以利用定時(shí)計(jì)數(shù)器方式寄存器TMOD中的門控位GATE與 引腳配合使用,控制定時(shí)計(jì)數(shù)器的啟動(dòng)與停止: 當(dāng)GATE1時(shí),要求TR1l,且 為高電平,才能啟動(dòng)定時(shí)器T1計(jì)數(shù)工作;如果 出現(xiàn)低電平,則T1停止計(jì)數(shù); 當(dāng)GATE=0時(shí),只要TR11就可以啟動(dòng)定時(shí)器,而與 的輸入狀態(tài)無關(guān)。,可以利用定時(shí)計(jì)數(shù)器方式寄存器TMOD中的門控位GATE與 引腳配合使用,控制定時(shí)計(jì)數(shù)器的啟動(dòng)與停止: 當(dāng)GATE1時(shí),要求TR1l,且 為高電平,才能啟動(dòng)定時(shí)器T1計(jì)數(shù)工作;如果 出現(xiàn)低電平,則T1停止計(jì)數(shù); 當(dāng)GATE=0時(shí),只要TR11就可以啟動(dòng)定時(shí)器,而與 的輸入狀態(tài)無關(guān)。,利用上述特點(diǎn),將被測(cè)脈沖信號(hào)從(P3.3)引入,在T1的程序初始化中令GATE1,同時(shí)“SETB TR1”,這樣脈沖信號(hào)的上升沿就能啟動(dòng)T1計(jì)數(shù),脈沖信號(hào)下降沿能使T1停止計(jì)數(shù)。利用定時(shí)器T1的計(jì)數(shù)值m乘以機(jī)器周期就可以得到被測(cè)脈沖信號(hào)的寬度TW。,(2)硬件電路 硬件電路簡(jiǎn)圖如圖4-15。,(3)程序設(shè)計(jì) 利用80C51的內(nèi)部RAM30H、31H單元保存被測(cè)脈沖寬度對(duì)應(yīng)的計(jì)數(shù)值。 參考程序如下: ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV SP,#60H ;設(shè)堆棧指針 MOV TMOD,#90H;設(shè)置控制字,T1工作于方式 ; 1,GATE=1 MOV TH1,#00H ;設(shè)定計(jì)數(shù)初值為00H,MOV TL1,#00H L1: JB P3.3,L1 ;等待輸入變?yōu)榈碗娖?SETB TR1 ;預(yù)置TR1=1,準(zhǔn)備啟動(dòng)T1 L2: JNB P3.3,L2 ;等待上升沿,以便開始計(jì)數(shù) L3: JB P3.3,L3 ;是高電平則計(jì)數(shù)繼續(xù) CLR TR1 ;低電平則停止計(jì)數(shù) MOV A,TL1 ;讀低位計(jì)數(shù)值 MOV 30H,A ;低位計(jì)數(shù)值存于30H MOV A,TH1 ;讀高位計(jì)數(shù)值 MOV 31H,A ;高位計(jì)數(shù)值存于31H END,(4)總結(jié)與思考 定時(shí)/計(jì)數(shù)器還可用于測(cè)量脈沖信號(hào)的頻率、周期等。本實(shí)例是利用定時(shí)/計(jì)數(shù)器的門控位(GATE)測(cè)量脈沖寬度。但要注意,在晶振12MHz的情況下,被測(cè)脈沖寬度范圍最大為655351s=65.536ms。 ,如果要測(cè)量脈沖信號(hào)的周期,該如何去做? 2計(jì)數(shù)器用于繞線機(jī)的控制 繞線機(jī)常用于對(duì)電機(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ù)以上過程。,圖4-16 繞線機(jī)的控制電路 控制說明:1軟件控制P1.0=0時(shí),繞線機(jī)開始繞線;P1.0=1時(shí),繞線機(jī)不繞線。 2繞線機(jī)每繞一圈,繞線機(jī)脈沖產(chǎn)生電路就產(chǎn)生一個(gè)脈沖信號(hào)。,(1)工作原理 由于單片機(jī)復(fù)位后P1 口的輸出狀態(tài)全部為1,所以系統(tǒng)上電后,P1.0輸出高電平“1”繞線機(jī)不工作。 當(dāng)按下工作按鈕以后,P1.1輸入低電平“0”,當(dāng)程序檢測(cè)到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)。,我們假設(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)控制程序 參考程序如下: ORG 0000H AJMP MAIN ORG 001BH AJMP COUNT ORG 0100H,MAIN: MOV TMOD,#50H ;設(shè)置T1為計(jì)數(shù)器,工作于方式1 MOV TH1,#0ECH ;設(shè)定計(jì)數(shù)初值 MOV TL1,#78H MOV SP,#60H ;設(shè)堆棧指針 SETB ET1 ;開T1中斷 SETB EA ;CPU開中斷 CLR F0 ;用戶標(biāo)志F0清0,WAIT: MOV C,P1.1 ;等待啟動(dòng) JC WAIT ;P1.1=1,等待 CLR P1.0 ;啟動(dòng)設(shè)備 SETB TR0 ;T1開始計(jì)數(shù),LOOP: JNB F0,$ ;等待計(jì)數(shù)5000中斷 SETB P1.0 ;繞線機(jī)停止工作 CLR TR0 ;T1停止計(jì)數(shù) CLR F0 ;清0 SJMP WAIT ;等待重新啟動(dòng) ORG 0200H ;T1中斷服務(wù)程序起始地址COUNT:MOV TH1,#0ECH ;重新設(shè)定計(jì)數(shù)初值 MOV TL1,#78H SETB F0 ;用戶標(biāo)志置1 RETI ;中斷返回 END,.4.4課題與實(shí)訓(xùn)8 簡(jiǎn)易方波發(fā)生器,一.實(shí)訓(xùn)目的 掌握定時(shí)器初值的計(jì)算方法 學(xué)習(xí)定時(shí)器的使用及定時(shí)中斷程序的設(shè)計(jì)方法 掌握方波信號(hào)發(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)。,三.背景知識(shí) 1方波產(chǎn)生原理 使P1.0引腳的輸出狀態(tài)定時(shí)翻轉(zhuǎn),則該端口能輸出一定頻率的方波。 2方式0的時(shí)間常數(shù)初值 定時(shí)/計(jì)數(shù)器工作于方式0狀態(tài)下,定時(shí)/計(jì)數(shù)的長(zhǎng)度是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ò)的。,以該實(shí)訓(xùn)T1方式0產(chǎn)生500Hz的方波(周期是2ms)為例,需要進(jìn)行1ms的定時(shí),時(shí)間常數(shù)初值 X=8192-110-3(12106/12)=8192- 1000=7192=1C18H=0001110000011000B 以13位二進(jìn)制數(shù)表示,是11100000 11000B, 則(TL1)=00011000B=18H,(TH1)=11100000B=0E0H 定義TMOD=00000000B,四.硬件電路 該實(shí)訓(xùn)硬件電路十分簡(jiǎn)單,見圖4-17。,圖4-17 簡(jiǎn)易方波發(fā)生器的硬件電路,五.參考程序 (1) P1.0輸出500Hz方波查詢方式 ORG 0000H LJMP MAIN ;跳至主程序 ORG 0100H MAIN:MOV TMOD,#00H ;置T1工作于方式0 MOV TH1,#0E0H ;裝入時(shí)間常數(shù)初值 MOV TL1,#18H SETB TR1 ;啟動(dòng)T1 LOOP:JNB TF1,LOOP ;查詢等待 CLR TF1 ;清TF1 CPL P1.0 ;P1.0取反,MOV TH1,#0E0H ;重新裝入時(shí)間常數(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í)間常數(shù)初值 MOV TL1,#18H SETB ET1 ;允許T1中斷 SETB EA ;CPU開中斷 SETB TR1 ;啟動(dòng)T1,SJMP $ ;等待中斷 FANGBO:CPL P1.0 ;P1.0取反 MOV TH1,#0E0H ;重新裝入時(shí)間常數(shù)初值 MOV TL1,#18H RETI ;中斷返回 END,六.總結(jié)與提高 1總結(jié) 本實(shí)訓(xùn)利用定時(shí)器T1的定時(shí)功能,以兩種形式輸出頻率為500Hz方波。在實(shí)際應(yīng)用中,方波的頻率可能要根據(jù)現(xiàn)場(chǎng)測(cè)量參數(shù)、給定參數(shù)或按照某種函數(shù)關(guān)系而變化。因此輸出波形的頻率在編程時(shí)還是未知的。,2提高 定時(shí)/計(jì)數(shù)器的計(jì)時(shí)范圍有限,當(dāng)晶振采用12MHz時(shí),方式1的計(jì)時(shí)時(shí)間最長(zhǎng),也只有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)50 ms/次的定時(shí),只要定時(shí)40次即可實(shí)現(xiàn)2s定時(shí)。 可以算出定時(shí)/計(jì)數(shù)器T1工作于方式1時(shí),時(shí)間常數(shù)初值為 X=65536-t(fosc/12)=65536-5010-3(12106/12) =15536=3CB0H 于是(TH1)=3CH ,(TL1)=0B0H。,定義TMOD=00010000B,此處只給出延時(shí)2s的查詢方式子程序。 DELAY:MOV R3,#40 ;設(shè)置定時(shí)器溢出次數(shù) SETB TR1 ;啟動(dòng)T1開始計(jì)時(shí) D1: MOV TH1,#3CH ;裝入時(shí)間常數(shù)初值 MOV TL1,#0B0H,D2:JBC TF1,D3;TF1為1否?是則跳至D3,并清TF1, AJMP D2 ;否,則跳至D2 D3:DJNZ R3,D1;R3=0?不是,跳到D1 CLR TR1 ;是,則停止計(jì)數(shù) RET,采用兩個(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)更長(zhǎng)時(shí)間的定時(shí)。,.5中斷與定時(shí)計(jì)數(shù)器綜合應(yīng)用舉例,4.5.1 概述,定時(shí)/計(jì)數(shù)功能與中斷一樣,都是單片機(jī)的常用功能。兩者常常同時(shí)使用。如實(shí)訓(xùn)7就是簡(jiǎn)單的中斷、定時(shí)綜合應(yīng)用實(shí)例。在這類程序的編制過程中,要注意這樣幾個(gè)問題:,選擇合適的中斷和定時(shí)/計(jì)數(shù)方式。 如外部中斷是采用電平觸發(fā)還是脈沖下降沿觸發(fā);定時(shí)/計(jì)數(shù)是用自動(dòng)重裝方式還是每次定時(shí)結(jié)束后用軟件重裝。,確定定時(shí)結(jié)束的判別方法,用中斷還是查詢。 如采用中斷,與其它中斷的優(yōu)先級(jí)如何確定,是否會(huì)影響系統(tǒng)功能。 正確初始化。 合理分配控制功能。,.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)聲器,唱出祝你生日快樂歌。,三.背景知識(shí) 1.音頻脈沖的產(chǎn)生 聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機(jī)某個(gè)口線的“高”電平或“低”電平,則在該口線上就能產(chǎn)生一定頻率的方波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(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)各音符頻率與計(jì)數(shù)初值的對(duì)應(yīng)表如下:,注:不發(fā)音的簡(jiǎn)譜碼用“0”表示,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é)拍碼對(duì)照表,3.建立音樂的步驟: 先把譜的音符找出,然后由上表建立時(shí)間常數(shù)初值T的順序表,標(biāo)號(hào)為TABLE1。 建立音符和節(jié)拍表,標(biāo)號(hào)為TABLE,將構(gòu)成發(fā)音符的計(jì)數(shù)值放在其中。 TABLE表的結(jié)構(gòu)為:簡(jiǎn)譜碼(代表音符)為高4位,節(jié)拍碼(表示節(jié)拍數(shù))為低4位,在唱歌程序中對(duì)每一個(gè)有節(jié)拍的音符能通過設(shè)計(jì)共同生成音符節(jié)拍碼,本程序的音符節(jié)拍碼表見表4-5。,(1)1/4拍的延遲時(shí)間=187毫秒 DELAY:MOV R5,#02 D1:MOV R4,#187 D2: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 ET1 ;開T1中斷 SETB EA ;CPU開中斷 MAIN1: MOV 60H,#00H ;取簡(jiǎn)譜碼指針 NEXT: MOV A,60H ;簡(jiǎn)譜碼指針裝入A MOV DPTR,#TABLE ;指向簡(jiǎn)譜碼TABLE表地址 MOVC A,A+DPTR ;簡(jiǎn)譜碼存入A MOV R1,A ;簡(jiǎn)譜碼暫存R1 JZ STOP ;是否取到結(jié)束碼00?,ANL A,#0FH ;沒有,則取低4位的節(jié)拍碼 MOV R6,A ;取到的節(jié)拍碼存入R6 MOV A, R1 ;將取到的簡(jiǎn)譜碼再裝入A SWAP A ;高低4位交換 ANL A,#0FH ;取低4位的音符碼,JNZ SING ;取到的音符碼是否為0? CLR TR1 ;是,則不發(fā)音 AJMP DT ;轉(zhuǎn)至DT SING: DEC A ;對(duì)取到的非0音符碼減1 MOV 22H,A ;音符碼暫存22H RL A;乘2 MOV DPTR,#TABLE1 ;至TABLE1取與高字節(jié)相 ;對(duì)應(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é)相對(duì) ;應(yīng)的頻率初值 MOV TL1,A ;取到的低字節(jié)存入TL1 MOV 20H,A ;取到的低字節(jié)存入20H SETB TR1 ;啟動(dòng)T1,開始計(jì)時(shí),DT: LCALL DELAY ;1/4拍的基本單位時(shí)間187毫秒 INC 60H ;將簡(jiǎn)譜碼指針加1,AJMP NEXT ;取下一個(gè)碼 STOP: CLR TR1 ;計(jì)時(shí)停止 AJMP MAIN1 ;重復(fù)循環(huán) TIM1: PUSH ACC ;保護(hù)A值 PUSH PSW ;保護(hù)PSW MOV TH1,21H ;重裝入時(shí)間常數(shù)初值 MOV TL1,20H ;重裝入時(shí)間常數(shù)初值 CPL P1.0 ;P1.0取反,發(fā)聲 POP PSW ;恢復(fù)PSW POP ACC ;恢復(fù)A RETI DELAY: MOV R5,#2 ;187毫秒子程序,決定音樂節(jié)拍 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,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00 END,六.總結(jié)與提高 制作音樂門鈴的關(guān)鍵就是對(duì)樂譜建表,包括T值表和簡(jiǎn)碼表。以表4-5的T值表為例,對(duì)于簡(jiǎn)單的樂譜,只需再增加高音區(qū)和低音區(qū)的幾個(gè)音符,其余部分不變;而簡(jiǎn)碼表則不然,它要隨著每個(gè)音的音符和節(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 5 11 5 1 一只沒有耳朵 一只沒有尾巴 真奇怪 真奇怪,4.6外部中斷源的擴(kuò)展,在單片機(jī)控制系統(tǒng)中,外部中斷的使用非常重要,通過它可以中斷CPU的運(yùn)行,轉(zhuǎn)去處理更為緊迫的外部事務(wù),如報(bào)警、電源掉電保護(hù)等。 80C51單片機(jī)僅提供了兩個(gè)外部中斷源,在實(shí)際控制系統(tǒng)中可能出現(xiàn)多個(gè)外部中斷,因此有必要對(duì)外部中斷源進(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è)脈沖就可以使其引起中斷。,可以采用下面的程序初始化T1: MOV TMOD,#60H ;T1工作于方式2 MOV TL1,#0FFH ;設(shè)為全1 MOV TH1,#0FFH SETB TR1 ;啟動(dòng)T1 SETB ET1 ;開T1中斷 SETB EA ;CPU開中斷 中斷服務(wù)程序 RETI,4.6.2利用中斷與查詢相結(jié)合的方式擴(kuò)展,電路如圖419所示,當(dāng)CPU檢測(cè)到 的中斷請(qǐng)求信號(hào)時(shí),由P1口查詢判斷中斷源,點(diǎn)亮相應(yīng)的發(fā)光二極管。,源程序如下: ORG 0000H AJMP MAIN ;設(shè)主程序入口 ORG 0003H ; 中斷入口 AJMP LL ;轉(zhuǎn)中斷服務(wù)程序 ORG 0100H ;主程序起始地址 MAIN:ORL P1,#0FFH ;P1口置輸入,SETB IT0 ;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 裝配式建筑在房地產(chǎn)開發(fā)中的應(yīng)用與2025年政策環(huán)境分析報(bào)告
- 洞察無人零售:2025技術(shù)應(yīng)用與市場(chǎng)接受度全面研究報(bào)告
- 職業(yè)暴露防護(hù)注意事項(xiàng)
- 2025年工業(yè)互聯(lián)網(wǎng)平臺(tái)網(wǎng)絡(luò)隔離技術(shù)標(biāo)準(zhǔn)化進(jìn)程與政策解讀報(bào)告
- 2025年城市軌道交通智慧運(yùn)維系統(tǒng)與新能源應(yīng)用報(bào)告
- 農(nóng)業(yè)灌溉自動(dòng)化設(shè)備2025年技術(shù)鑒定與產(chǎn)業(yè)升級(jí)報(bào)告
- 2025-2030中國食品級(jí)亞硒酸鈉行業(yè)競(jìng)爭(zhēng)態(tài)勢(shì)與應(yīng)用前景預(yù)測(cè)報(bào)告
- 2025-2030中國風(fēng)琴式油漆過濾紙行業(yè)發(fā)展動(dòng)態(tài)與供需前景預(yù)測(cè)報(bào)告
- 2025-2030中國鋼結(jié)構(gòu)行業(yè)運(yùn)營(yíng)態(tài)勢(shì)及需求趨勢(shì)預(yù)測(cè)報(bào)告
- 2025-2030中國重力下水道行業(yè)運(yùn)行態(tài)勢(shì)與前景規(guī)劃研究報(bào)告
- 《咕咚》課件 小學(xué)語文一年級(jí)下冊(cè)
- 富士康職工檔案管理制度
- 7數(shù)滬科版期末考試卷-2024-2025學(xué)年七年級(jí)(初一)數(shù)學(xué)下冊(cè)期末考試模擬卷04
- 胃管置入術(shù)考試題及答案
- 2025年全國統(tǒng)一高考英語試卷(全國一卷)含答案
- 鄭州大學(xué)cad期末考試試題及答案
- 2025年美術(shù)教師編制考試模擬試卷:美術(shù)教育心理學(xué)在課堂管理中的應(yīng)用試題
- 保利大劇院面試題及答案
- 吉林省吉林市名校2025年七下英語期末考試模擬試題含答案
- 2025屆福建省廈門市名校數(shù)學(xué)七下期末質(zhì)量檢測(cè)試題含解析
- 北京社工考試題及答案
評(píng)論
0/150
提交評(píng)論