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

下載本文檔

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

文檔簡(jiǎn)介

第5章80C51的中斷系統(tǒng)及定時(shí)/計(jì)數(shù)器80C51單片機(jī)的中斷系統(tǒng)5.180C51單片機(jī)的中斷處理過程5.280C51單片機(jī)的定時(shí)/計(jì)數(shù)器5.380C52的定時(shí)/計(jì)數(shù)器25.42023/2/3180C51單片機(jī)的中斷系統(tǒng)5.1日常中斷的例子專心看書,突然電話鈴響記下頁數(shù)去接電話,接完電話,找到剛才頁碼繼續(xù)看書。2023/2/32計(jì)算機(jī)中的中斷概念中斷:是指由于某種隨機(jī)事件的發(fā)生,計(jì)算機(jī)暫?,F(xiàn)行程序的運(yùn)行,轉(zhuǎn)去執(zhí)行另一程序,以處理發(fā)生的事件,處理完畢后又自動(dòng)返回原來的程序繼續(xù)運(yùn)行。2023/2/33中斷的概念:中斷是計(jì)算機(jī)工作過程的隨機(jī)事件中斷源:引起中斷的事件或設(shè)備稱為中斷源采用中斷的優(yōu)點(diǎn):⑴分時(shí)操作⑵實(shí)時(shí)處理⑶故障處理如:良好的中斷系統(tǒng)使處理機(jī)具有隨機(jī)應(yīng)變的能力,從而擴(kuò)大應(yīng)用范圍,提高CPU效率51中斷系統(tǒng)的特點(diǎn):內(nèi)容豐富,結(jié)構(gòu)合理,邏輯性強(qiáng),高效實(shí)用中斷請(qǐng)求中斷請(qǐng)求2023/2/34一、中斷的一般功能1、中斷的屏蔽與開放中斷屏蔽:稱為關(guān)中斷,CPU不響應(yīng)中斷請(qǐng)求稱為開中斷,CPU可響應(yīng)中斷請(qǐng)求中斷開放:2、中斷響應(yīng)與中斷返回中斷請(qǐng)求RETI主程序響應(yīng)中斷中斷服務(wù)子程序返主程序繼續(xù)執(zhí)行主程序圖6-18(a)中斷的響應(yīng)與返回中斷請(qǐng)求PC斷點(diǎn)PC斷點(diǎn)中斷允許中斷禁止2023/2/35你正在專心看書,突然電話鈴響,于是你記下正在看的書的頁數(shù),去接電話,接電話過程中,有人敲窗戶(更緊急),先放下電話,開窗戶,處理完后,再接著聽電話,接完電話后再回來接著看書。(中斷嵌套)中斷嵌套2023/2/363、中斷優(yōu)先中斷開放的情況下,如果有幾個(gè)中斷請(qǐng)求同時(shí)發(fā)生,應(yīng)首先響應(yīng)中斷優(yōu)先級(jí)較高的中斷4、中斷嵌套低級(jí)中斷請(qǐng)求RETI主程序響應(yīng)低級(jí)中斷高級(jí)中斷服務(wù)子程序返主程序繼續(xù)執(zhí)行主程序高級(jí)中斷請(qǐng)求響應(yīng)高級(jí)中斷返低級(jí)中斷圖6-18(b)中斷的嵌套示意圖RETI低級(jí)中斷服務(wù)子程序低級(jí)中斷服務(wù)子程序掛起低級(jí)中斷掛起低級(jí)中斷低級(jí)中斷低級(jí)中斷簡(jiǎn)單說:就是中斷中斷2023/2/37中斷請(qǐng)求源5個(gè)中斷源2個(gè)優(yōu)先級(jí)2個(gè)外部中斷3個(gè)內(nèi)部中斷INT0(P3.2)INT1(P3.3)T0T1UART與中斷有關(guān)的特殊功能寄存器:IP:中斷優(yōu)先控制寄存器IE:中斷允許控制寄存器TCON:定時(shí)/計(jì)數(shù)控制寄存器SCON:UART控制寄存器中斷標(biāo)志寄存器可編程,可控MCS–51中斷要點(diǎn)MCS–51中斷要點(diǎn)2023/2/38二、中斷請(qǐng)求標(biāo)志1、定時(shí)/計(jì)數(shù)器控制寄存器TCON

TCON(88H)TF1

TF0

IE1

IT1

IE0IT0

INT1

INT0觸發(fā)方式控制位0

低電平觸發(fā)1

邊沿↓觸發(fā)

INT1

INT0外部中斷請(qǐng)求標(biāo)志1有有效觸發(fā)時(shí)0

當(dāng)CPU響應(yīng)中斷時(shí)T1T0溢出標(biāo)志1

計(jì)數(shù)器“+1”有溢出時(shí),并向CPU請(qǐng)求中斷0

當(dāng)CPU響應(yīng)中斷時(shí),也可由指令清除TR1TR0由硬件自動(dòng)由硬件自動(dòng)中斷請(qǐng)求標(biāo)志可編程控制位TR1

TR0由硬件自動(dòng)由硬件自動(dòng)在每個(gè)機(jī)器周期S5P2都采樣引腳P3.3P3.2引腳00記錄有無中斷記錄有無中斷2023/2/392、串行口控制寄存器SCONTI:串行口發(fā)送中斷標(biāo)志在方式0,串行發(fā)送到第8位結(jié)束時(shí),由硬件置“1”;或在其他方式中,串行發(fā)送到停止位的開始時(shí),由硬件置“1”,RI:串行口接收中斷標(biāo)志在方式0,串行接收到第8位結(jié)束時(shí),由硬件置“1”;或在其他方式中,串行接收到停止位的開始時(shí),由硬件置“1”,“1”發(fā)送完一幀數(shù)據(jù)后“1”接收完一幀數(shù)據(jù)后必須由軟件清“0”必須由軟件清“0”

SCON(98H)

TIRI2023/2/310三、中斷控制1、中斷允許寄存器IE

EA/

/

ES

ET1

EX1

ET0

EX0INT0INT1T1T0UARTCPU0

禁止1

允許0

禁止1

允許總中斷總中斷中斷中斷IE(A8)中斷的開放和禁止是可控,可編程的ET2T2CPUIE的相應(yīng)位被置“0”

或“1”

該相應(yīng)中斷即被“禁止”或“開放”2023/2/3112、中斷優(yōu)先級(jí)寄存器IP

//

/

PS

PT1

PX1

PT0

PX0IP(B8)ET2INT0INT1T1T0UART0

低級(jí)1高級(jí)中斷中斷T2中斷優(yōu)先級(jí)是可控,可編程的3、優(yōu)先級(jí)結(jié)構(gòu)中斷優(yōu)先級(jí)控制遵循的兩個(gè)基本原則:

⑴一個(gè)正在執(zhí)行的低級(jí)中斷服務(wù)程序,能被高優(yōu)先級(jí)中斷請(qǐng)求所中斷,但不能被同優(yōu)先級(jí)中斷請(qǐng)求所中斷。⑵一個(gè)正在執(zhí)行的高級(jí)中斷服務(wù)程序,不能被任何中斷請(qǐng)求所中斷,直到返回。2023/2/312實(shí)現(xiàn)這兩個(gè)原則的方法:中斷系統(tǒng)內(nèi)部設(shè)置了兩個(gè)不可尋址的優(yōu)先級(jí)狀態(tài)觸發(fā)器。一個(gè)指出正在處理的是:高優(yōu)先級(jí)中斷,并阻止所有其他中斷;另一個(gè)指出正在處理的是:低優(yōu)先級(jí)中斷,并阻止了除高優(yōu)先級(jí)中斷外的其他任何中斷。高優(yōu)先級(jí)狀態(tài)觸發(fā)器低優(yōu)先級(jí)狀態(tài)觸發(fā)器是不可尋址的當(dāng)CPU響應(yīng)高級(jí)中斷,并進(jìn)入中斷服務(wù)時(shí)“1”“1”RETI“0”當(dāng)CPU響應(yīng)低級(jí)中斷,并進(jìn)入中斷服務(wù)時(shí)“1”RETI“0”2023/2/313源允許圖6-19中斷系統(tǒng)總體邏輯結(jié)構(gòu)總允許優(yōu)先級(jí)自然優(yōu)先級(jí)中斷源自然優(yōu)先級(jí)中斷源查詢硬件查詢硬件低級(jí)中斷請(qǐng)求矢量地址送PCIPIETCON

SCONEX0ET0EX1ET1ESEAINT0INT1T0T1RXTXRITIIE0IE1TF0TF1

IT1

011010101010矢量地址送PC高級(jí)中斷請(qǐng)求IT0

01中斷標(biāo)志中斷標(biāo)志INT01IE0自然優(yōu)先級(jí)矢量地址送PC“+1”TF10自然優(yōu)先級(jí)矢量地址送PCEA“+1”“+1”EX0ET112023/2/314四、中斷響應(yīng)過程中斷響應(yīng)的三個(gè)條件:⑴CPU不是正在處理同級(jí)或高級(jí)中斷請(qǐng)求⑵現(xiàn)行機(jī)器周期是所執(zhí)行指令的最后一個(gè)機(jī)器周期⑶正在執(zhí)行的指令不是RETI,或不在訪問IE或IP外部中斷請(qǐng)求INT0定時(shí)/計(jì)數(shù)器T0溢出定時(shí)/計(jì)數(shù)器T1溢出串行口UART定時(shí)/計(jì)數(shù)器T2溢出外部中斷請(qǐng)求INT1中斷入口地址:0003H000BH0013H001BH0023H002BH中斷源矢量地址2023/2/315中斷處理過程

中斷處理過程分為三個(gè)階段:中斷響應(yīng)、中斷處理和中斷返回。

中斷響應(yīng)中斷處理(又稱中斷服務(wù))

中斷返回

中斷請(qǐng)求的撤除

中斷響應(yīng)中斷返回2023/2/316中斷響應(yīng)(以外部中斷0為例)中斷響應(yīng):在滿足CPU的中斷響應(yīng)條件之后,CPU對(duì)中斷源中斷請(qǐng)求予以處理。中斷響應(yīng)過程:保護(hù)斷點(diǎn)地址;中斷響應(yīng)把程序轉(zhuǎn)向中斷服務(wù)程序的入口地址(通常稱矢量地址)。特別注意:這些工作是硬件自動(dòng)完成的!

斷點(diǎn)地址中斷服務(wù)子程序的入口地址外部中斷0入口地址0003ZD0AJMPORG0003HAJMPZD0ZD02023/2/317中斷響應(yīng)中斷服務(wù)子程序入口地址又稱為中斷矢量或中斷向量。中斷響應(yīng)單片機(jī)中5個(gè)中斷源的矢量地址是固定的,不能改動(dòng)。斷點(diǎn)地址中斷服務(wù)子程序的入口地址2023/2/318程序存儲(chǔ)器ROM0000H:復(fù)位后,程序的入口地址(PC=0000H)0023H:串行口中斷入口0003H:外部中斷0入口000BH:定時(shí)器0溢出中斷入口0013H:外部中斷1入口001BH:定時(shí)器1溢出中斷入口002AH使用時(shí),通常在這些入口地址處存放一條跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到用戶安排的中斷服務(wù)程序起始地址上去!2023/2/319程序存儲(chǔ)器ROM0000H:復(fù)位后,程序的入口地址(PC=0000H)0023H:串行口中斷入口0003H:外部中斷0入口000BH:定時(shí)器0溢出中斷入口0013H:外部中斷1入口001BH:定時(shí)器1溢出中斷入口002AH包含T0中斷服務(wù)子程序的程序結(jié)構(gòu):

ORG0000H AJMPMAIN

ORG000BH AJMPINTT0

ORG0100HMAIN:...INTT0:...RETIENDAJMPMAINAJMPINTT02023/2/320中斷處理中斷服務(wù)程序從中斷子程序入口地址開始執(zhí)行,直到返回指令RETI為止,這個(gè)過程稱為中斷處理(或中斷服務(wù))。中斷服務(wù)子程序一般包括兩部分內(nèi)容,一是保護(hù)和恢復(fù)現(xiàn)場(chǎng),二是處理中斷源的請(qǐng)求。中斷響應(yīng)入口地址RETI2023/2/321中斷處理INTT0:PUSHACC PUSHDPHPUSHDPLPUSHPSW

中斷源服務(wù)

POPPSWPOPDPLPOPDPHPOPACCRETI保護(hù)現(xiàn)場(chǎng)恢復(fù)現(xiàn)場(chǎng)注意,PUSH和POP要成對(duì)出現(xiàn),不然就會(huì)使程序發(fā)生紊亂例如:少了一個(gè)POPACC會(huì)出現(xiàn)什么情況呢??2023/2/322中斷返回中斷返回是指中斷服務(wù)完后,計(jì)算機(jī)返回到原來暫停的位置(即斷點(diǎn)),繼續(xù)執(zhí)行原來的程序。中斷返回由專門的中斷返回指令RETI來實(shí)現(xiàn)。中斷響應(yīng)中斷返回2023/2/323中斷返回

RETI指令功能:把斷點(diǎn)地址取出,送回到程序計(jì)數(shù)器PC中去。另外,它還通知中斷系統(tǒng)已完成中斷處理,將清除優(yōu)先級(jí)狀態(tài)觸發(fā)器。特別注意:不能用RET指令代替RETI指令!中斷響應(yīng)中斷返回2023/2/324中斷處理過程示意圖中斷源發(fā)中斷請(qǐng)求中斷響應(yīng)條件是否滿足?中斷是否受阻?

把PC斷點(diǎn)地址壓入堆棧

相應(yīng)中斷源的中斷入口地址送入PC,轉(zhuǎn)向中斷服務(wù)程序NYYN

由硬件自動(dòng)完成2023/2/325

關(guān)中斷保護(hù)現(xiàn)場(chǎng)中斷服務(wù)

開中斷

關(guān)中斷恢復(fù)現(xiàn)場(chǎng)

開中斷中斷返回?cái)帱c(diǎn)地址由堆棧彈入PC保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的過程中不允許中斷,以免現(xiàn)場(chǎng)遭到破壞。保護(hù)和恢復(fù)現(xiàn)場(chǎng)之后的開中斷是為了允許有更高級(jí)中斷打斷此中斷服務(wù)程序。中斷服務(wù)程序硬件自動(dòng)完成2023/2/326中斷請(qǐng)求的撤除

CPU響應(yīng)某中斷請(qǐng)求后,在中斷返回前,應(yīng)該撤除該中斷請(qǐng)求,否則會(huì)引起另一次中斷。

定時(shí)器0或1溢出:CPU在響應(yīng)中斷后,硬件清除了有關(guān)的中斷請(qǐng)求標(biāo)志TFO或TF1,即中斷請(qǐng)求是自動(dòng)撤除的。

邊沿激活的外部中斷:CPU在響應(yīng)中斷后,也是用硬件自動(dòng)清除有關(guān)的中斷請(qǐng)求標(biāo)志IE0或IE1。

串行口中斷:CPU響應(yīng)中斷后,沒有用硬件清除T1、R1,故這些中斷不能自動(dòng)撤除,而要靠軟件來清除相應(yīng)的標(biāo)志。2023/2/327電平觸發(fā)外部中斷撤除方法較復(fù)雜。因?yàn)樵陔娖接|發(fā)方式中,CPU響應(yīng)中斷時(shí)不會(huì)自動(dòng)清除IE1或IE0標(biāo)志,所以在響應(yīng)中斷后應(yīng)立即撤除INT0或INT1引腳上的低電平。

在硬件上,CPU對(duì)INT0和INT1引腳的信號(hào)不能控制,所以這個(gè)問題要通過硬件,再配合軟件來解決。電平激活的外部中斷源中斷標(biāo)志的撤除2023/2/328五、外部中斷響應(yīng)時(shí)序與觸發(fā)方式1、外部中斷響應(yīng)時(shí)序M1M3M4M5M2S5P1S5P2INT被采樣并鎖存到IE0IE1中CPU進(jìn)行中斷查詢保護(hù)斷點(diǎn),長調(diào)用至入口中斷服務(wù)1、中斷響應(yīng)順利,不受阻,需要3個(gè)機(jī)器周期2、如果中斷受阻,上頁下頁回目錄即滿足上述三個(gè)條件①正在處理同級(jí)或高級(jí)中斷,這要視中斷服務(wù)程序的長短②執(zhí)行的指令不是最后一個(gè)機(jī)器周期,等待不超過3個(gè)周期1個(gè)周期(查詢)+2個(gè)周期(長調(diào)用LCALL)③若當(dāng)前指令是RET、RETI和IP、IE指令,緊接著下一條是乘除指令發(fā)生,則最長為8個(gè)周期:2個(gè)周期執(zhí)行當(dāng)前指令(其中含有1個(gè)周期查詢)+4個(gè)周期乘除指令+2個(gè)周期長調(diào)用=8個(gè)周期則需要3~8個(gè)機(jī)器周期2023/2/3292、外部中斷觸發(fā)方式⑴電平觸發(fā)方式⑵邊沿觸發(fā)方式若外部中斷(當(dāng)ITX=0時(shí))被定義為電平觸發(fā)方式其有效觸發(fā)為低電平,該低電平維持到CPU響應(yīng)該中斷為止,中斷返回之前,必須為高電平。否則CPU將再次響應(yīng)該中斷。若外部中斷(當(dāng)ITX=1時(shí))被定義為邊沿觸發(fā)方式其有效觸發(fā)為下降沿。在該觸發(fā)方式中,CPU在一個(gè)機(jī)器周期采樣為高電平,在下一機(jī)器周期采樣為低電平,↓就立即置位外部中斷請(qǐng)求標(biāo)志。*無論是那種觸發(fā)發(fā)方式,只要有有效觸發(fā),都會(huì)記錄在相應(yīng)的中斷標(biāo)志位中,若CPU即使暫不響應(yīng),中斷標(biāo)志也不會(huì)丟失,直到CPU響應(yīng)該中斷,該標(biāo)志才會(huì)清除。有效觸發(fā)標(biāo)志位記錄2023/2/330六、多外部中斷源的設(shè)計(jì)1、利用定時(shí)/計(jì)數(shù)器作外部中斷輸入使用的方法T0作為外部中斷源的初始化程序:MOVTMOD,#06HMOVTL0,#0FFHMOVTH0,#0FFHSETBEASETBET0SETBTR0…;T0計(jì)數(shù)方式,自動(dòng)裝載;置計(jì)數(shù)初值;;T0開中斷;CPU開中斷;啟動(dòng)T0工作計(jì)數(shù)器“+1”計(jì)數(shù)器向CPU發(fā)中斷請(qǐng)求向CPU發(fā)中斷請(qǐng)求TF0FFHT0FFH方式2(8位)FFHFFHTF000HFFHFFHP3.4T0引腳每輸入一個(gè)負(fù)跳變,TF0都會(huì)置1,向CPU請(qǐng)求中斷

T0腳相當(dāng)于邊沿觸發(fā)的外部中斷源輸入線。2023/2/3312、中斷與查詢相結(jié)合的方法8051INT0INT1P1.3P1.2P1.1P1.0DVT0DVT1DVT2DVT3DVT410K+5V圖6-21擴(kuò)展多個(gè)外部中斷最高級(jí)最低級(jí)“線或”2023/2/332PINT1:PUSHPSWPUSHACCJBP1.0,PDVT1JBP1.1,PDVT2JBP1.2,PDVT3JBP1.3,PDVT4PINTR:

POPACCPOPPSWRETI;進(jìn)入中斷后;注意保護(hù)現(xiàn)場(chǎng);依次查詢判斷;若是干擾信號(hào)引起;返主程序前;注意恢復(fù)現(xiàn)場(chǎng);的中斷請(qǐng)求,可被濾掉外部中斷INT1的中斷服務(wù)程序:2023/2/333PDVT1:……AJMPPINTRPDVT2:……AJMPPINTRPDVT3:……AJMPPINTRPDVT4:……AJMPPINTR;DVT1中斷服務(wù);DVT2中斷服務(wù);DVT3中斷服務(wù);DVT4中斷服務(wù)中斷處理2023/2/334⒈

中斷初始化⑴設(shè)置堆棧指針SP⑵定義中斷優(yōu)先級(jí)⑶定義外中斷觸發(fā)方式⑷開放中斷⑸中斷應(yīng)用數(shù)據(jù)初始化⒉中斷服務(wù)主程序中斷服務(wù)子程序內(nèi)容要求:⑴在中斷服務(wù)入口地址設(shè)置一條跳轉(zhuǎn)指令⑵保護(hù)現(xiàn)場(chǎng)。⑶中斷源請(qǐng)求中斷服務(wù)要求的操作。

⑷恢復(fù)現(xiàn)場(chǎng)。⑸中斷返回,最后一條指令必須是RETI。七中斷系統(tǒng)的應(yīng)用2023/2/3355.2.4中斷程序舉例

2023/2/336

ORG0000HSTART:LJMPMAINORG0003HLJMPINTOORG0030

MAIN:CLRIT0

SETBEASETBEX0

MOVDPTR,#1000H;設(shè)置數(shù)據(jù)區(qū)地址指針

……ORG0200H;中斷服務(wù)程序

INT0:PUSHPSW;保護(hù)現(xiàn)場(chǎng)

PUSHACCCLRP3.0;由P3.0輸出0NOPNOPSETBP3.0;由P3.0輸出1,撤除

MOVA,P1;輸入數(shù)據(jù)

MOVX@DPTR,A;存入數(shù)據(jù)存儲(chǔ)器

INCDPTR;修改數(shù)據(jù)指針,指向下一個(gè)單元

……POPACC;恢復(fù)現(xiàn)場(chǎng)

POPPSWRETI;中斷返回2023/2/337【例2】出租車計(jì)價(jià)器計(jì)程方法是車輪每運(yùn)轉(zhuǎn)一圈產(chǎn)生一個(gè)負(fù)脈沖,從外中斷INT0(P3.2)引腳輸入,行駛里程為輪胎周長×運(yùn)轉(zhuǎn)圈數(shù),設(shè)輪胎周長為2m,試實(shí)時(shí)計(jì)算出租車行駛里程(單位米),數(shù)據(jù)存32H、31H、30H。

解:編程如下:

ORG 0000H ;復(fù)位地址

LJMP STAT ;轉(zhuǎn)初始化

ORG 0003H ;中斷入口地址

LJMP INT ;轉(zhuǎn)中斷服務(wù)程序2023/2/338

ORG0100H ;初始化程序首地址STAT:MOVSP,#60H ;置堆棧指針

SETBIT0 ;置邊沿觸發(fā)方式

MOVIP,#01H ;置高優(yōu)先級(jí)

MOVIE,#81H ;開中

MOV30H,#0 ;里程計(jì)數(shù)器清0MOV31H,#0 ;MOV32H,#0 ;LJMPMAIN ;轉(zhuǎn)主程序,并等待中斷

ORG0200H ;中斷服務(wù)子程序首地址INT:PUSHAcc ;保護(hù)現(xiàn)場(chǎng)

PUSHPSW ; MOVA,30H ;讀低8位計(jì)數(shù)器

ADDA,#2 ;低8位計(jì)數(shù)器加2m MOV30H,A ;回存

CLRA ; ADDCA,31H ;中8位計(jì)數(shù)器加進(jìn)位

MOV31H,A ;回存

CLRA ; ADDCA,32H ;高8位計(jì)數(shù)器加進(jìn)位

MOV32H,A ;回存

POPPSW ;恢復(fù)現(xiàn)場(chǎng)

POPAcc ; RETI ;中斷返回MAIN主程序可以處理循環(huán)顯示等任務(wù)。2023/2/339【例3】通過外部中斷1,在中斷服務(wù)中將B寄存器里的內(nèi)容左環(huán)移一位。已知:(B)=01h,要求采用邊沿觸發(fā),低優(yōu)先級(jí)。此例的實(shí)際意義:在INT1引腳接一個(gè)按鈕開關(guān)到地,每按一下按鈕就申請(qǐng)一次中斷,中斷服務(wù)則是:依次點(diǎn)亮八盞燈中的一盞。

P1.0P1.7INT13002023/2/340

ORG0000H

LJMPMAIN

ORG0013H;中斷矢量

LJMPINTMAIN:SETBEA;開總中斷允許“開關(guān)”

SETBEX1;開分中斷允許“開關(guān)”

CLRPX1;0優(yōu)先級(jí)(也可不要此句)

SETBIT1;邊沿觸發(fā)

MOVB,#01H;給B寄存器賦初值HERE:SJMPHERE;原地等待中斷申請(qǐng)INT:MOVA,B;自B寄存器中取數(shù)

RLA;左環(huán)移一次

MOVB,A;存回B,備下次取用

MOVP1,A;輸出到P1口

RETI;中斷返回中斷服務(wù)程序2023/2/341

利用外部中斷實(shí)現(xiàn)單步操作:

8031+5v在主程序中:CLRIT0SETBEASETBPX0SETBEX0………在中斷服務(wù)子程序中:JNBP3.2,$JBP3.2,$RETI2023/2/342作業(yè)將中斷的全過程寫出來,給出一個(gè)ROM表和堆棧表,將中斷的初始化,中斷服務(wù)程序的位置都標(biāo)出來,任意設(shè)中斷在主程序的位置,并用語言敘述中斷的相應(yīng)過程(包含PC指針的變化,程序的走向,以及中斷的各個(gè)步驟)2023/2/34380C51單片機(jī)的定時(shí)/計(jì)數(shù)器5.32023/2/3441、定時(shí):對(duì)時(shí)間基準(zhǔn)脈沖計(jì)數(shù)本質(zhì):計(jì)數(shù)對(duì)象不同2、計(jì)數(shù):對(duì)外部隨機(jī)脈沖計(jì)數(shù)信號(hào)具有周期性信號(hào)隨機(jī)5.3.1定時(shí)/計(jì)數(shù)器工作原理一.定時(shí)和計(jì)數(shù)基本原理2023/2/345軟件定時(shí)例如延時(shí)程序。不占硬件資源,占用了CPU時(shí)間,降低了CPU的利用率。采用時(shí)基電路定時(shí)例如采用555電路,外接必要的元器件(電阻和電容)。但定時(shí)值不能由軟件控制和修改可編程定時(shí)器定時(shí)最方便的辦法是利用單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器。結(jié)合了軟件定時(shí)精確和硬件定時(shí)電路獨(dú)立的特點(diǎn)。二.常用定時(shí)方法2023/2/346三、定時(shí)計(jì)數(shù)器的結(jié)構(gòu)與工作原理1、結(jié)構(gòu)CPUTH1(8位)TL1(8位)T1

T1(P3.5)(8DH)(8BH)7070TH0(8位)TL0(8位)T0

T0(P3.4)(8CH)(8AH)7070TCON(88H)TMOD(89H)啟動(dòng)啟動(dòng)溢出溢出工作方式工作方式2023/2/3472、工作原理⑴定時(shí)器定時(shí)輸入信號(hào):晶振的1/12分頻一個(gè)機(jī)器周期做一次“+1”運(yùn)算則1TCY=12Tosc=12/12MHz=1μs若fosc=12MHz⑵計(jì)數(shù)器由外部引腳(T0為P3.4,T1為P3.5)輸入計(jì)數(shù)脈沖外部輸入脈沖寬度應(yīng)大于2個(gè)機(jī)器周期>TCY>TCY外部輸入脈沖發(fā)生負(fù)跳變時(shí),進(jìn)行“+1”計(jì)數(shù)高電平低電平TCY2023/2/348震蕩器÷12TL18位TH18位TF1中斷KC/T=0C/T=1控制11“+1”中斷16位計(jì)數(shù)器TF1“+1”“+1”1⑴定時(shí)器則1TCY=12Tosc=12/12MHz=1μs若fosc=12MHz⑵計(jì)數(shù)器外部脈沖應(yīng)大于2TCY>TCY>TCY高電平低電平一旦啟動(dòng)就工作于單一的“+1”狀態(tài),TCYTCY外部脈沖頻率應(yīng)小于fosc/242023/2/3491、方式寄存器TMODGATEC/TM1M0GATEC/TM1M0LSBMSB

(89H)TMOD控制T1控制T0門控位功能選擇位工作方式選擇四.有關(guān)SFRINT1INT0引腳輸入電平的控制GATE:門控位。設(shè)定T1、T0運(yùn)行時(shí)是否受GATE=

0不受外部中斷控制C/T=1受外部中斷控制0為定時(shí)功能1為計(jì)數(shù)功能2023/2/350

00方式013位計(jì)數(shù)器

01方式116位計(jì)數(shù)器

10方式2可自動(dòng)重新裝載初值的8位計(jì)數(shù)器

11方式3T0分為2個(gè)8位計(jì)數(shù)器,T1停止計(jì)數(shù)M1M0操作方式功能操作方式選擇2023/2/3512、控制寄存器TCONLSBMSB

(88H)TCONTF1TR1TF0TR0IE1IT1IE0IT0T1、T0

啟/??刂莆籘1、T0

溢出標(biāo)志位與外部中斷INT1、INT0有關(guān)在中斷中介紹過了“0”停止“1”啟動(dòng)“1”有溢出“0”無溢出可編程可控制“+1”亦可由指令清“0”工作“1”“0”記錄有無溢出2023/2/3525.3.2定時(shí)/計(jì)數(shù)器的4種工作方式一、方式0M1M0=0013位的定時(shí)計(jì)數(shù)器,由TH的8位和TL的低5位組成T1(P3.5)GATETR1INT1震蕩器÷12TL15位TH18位TF1中斷KC/T=0C/T=1控制圖6-3定時(shí)/計(jì)數(shù)器方式0邏輯圖111“+1”中斷TL4~0以T1為例:13位計(jì)數(shù)器TF1“+1”“+1”2023/2/353二、方式1M1M0=0116位的定時(shí)計(jì)數(shù)器,由TH的8位和TL的8位組成T1(P3.5)GATETR1INT1震蕩器÷12TL18位TH18位TF1中斷KC/T=0C/T=1控制圖6-4定時(shí)/計(jì)數(shù)器方式1邏輯圖16位計(jì)數(shù)器“+1”1以T1為例:中斷TF1“+1”“+1”2023/2/354三、方式2M1M0=10可自動(dòng)重裝載的8位計(jì)數(shù)器TH1(TH0)被定義為賦值寄存器TL1(TL0)被定義為計(jì)數(shù)器圖6-5定時(shí)/計(jì)數(shù)器方式2邏輯圖

T1(P3.5)

GATETR1INT1震蕩器÷12TL18位TF1中斷KC/T=0C/T=1控制TH18位重裝載重裝載1“+1”以T1為例:中斷TL18位TF1“+1”“+1”2023/2/355震蕩器÷121/12f0scTL08位TF0中斷KC/T=0C/T=1控制1/12f0sc

T0(P3.4)GATETR0INT0KTH08位TF1中斷控制1/12f0scTR11TH0借用了T1的TR1和TF1,因此控制了T1的中斷此時(shí)T1只能用在一些不要中斷的情況下“+1”“+1”1“+1”“+1”TF0TF1

中斷

中斷“+1”四、方式3M1M0=11T0被分成2個(gè)相互獨(dú)立的8位計(jì)數(shù)器TL0、TH02023/2/356五、定時(shí)/計(jì)數(shù)器的初始化1、初始化一般有以下幾個(gè)步驟:2、計(jì)數(shù)初值的設(shè)定:最大計(jì)數(shù)值M:不同的工作方式M值不同方式0:M=213=8192方式1:M=216=65536方式2、3:M=28=256置方式,對(duì)TMOD賦值,設(shè)初值,并寫入TH0、TL0或TH1、TL1;開中斷,中斷方式時(shí),IE啟動(dòng)定時(shí),使TR0或TR1置位2023/2/357計(jì)數(shù)初值X的計(jì)算方法:計(jì)數(shù)方式:X=M-計(jì)數(shù)值(X即為計(jì)數(shù)值的補(bǔ)碼數(shù))定時(shí)方式:(M-X)×Tc=定時(shí)值∴X=M-定時(shí)值/Tc其中T為機(jī)器周期,時(shí)鐘的12分頻,若晶振為6MHz,則Tc=2μs,若晶振為12MHz,則Tc=1s2023/2/3585.3.3定時(shí)/計(jì)數(shù)器應(yīng)用舉例1、作定時(shí)器用例5.3-1

設(shè)主頻為12MHz,利用定時(shí)器T1定時(shí)。使P1.0輸出周期為2ms的方波。解:用P1.0作方波輸出信號(hào),周期為2ms的方波即可用每1ms改變一次電平的方法完成,故定時(shí)值可設(shè)置為1ms。

可做“+1”運(yùn)算1000次,使T1工作在方式1,即16位計(jì)數(shù)器定時(shí)初值:采用方式1:(

16位計(jì)數(shù)器)X=216-(1000×10-6/10-6)=64536=FC18H1000×10-6/10-6=216-X2023/2/359GATEC/TM1M0控制T1控制T00001選擇方式1選擇定時(shí)器方式INT1不參與控制TMOD2023/2/360MOVTMOD,#10HMOVTH1,#0FCHMOVTL1,#18HSETBEASETBET1SETBTR1SJMP$ORG001BHAJMPINT_T1INT_T1:

MOVTH1,#0E0HMOVTL1,#18HCPLP1.0RETI;T1按方式1工作;給計(jì)數(shù)器賦初值;CPU開中斷;T1允許中斷;啟動(dòng)T1;T1中斷入口;;重裝T1的初值;輸出方波;返回程序:ORG0030HMAIN:MOVSP,#60HORG0000HAJMPMAIN2023/2/361例5.3-2

根據(jù)例5.3-1的要求產(chǎn)生周期為2ms的方波,但不用中斷方式,而用查詢方式工作,查詢標(biāo)志為TF1解:利用方式1,16位計(jì)數(shù)器,當(dāng)定時(shí)時(shí)間到,

T1計(jì)數(shù)器溢出使TF1置“1”,由于不采用中斷方式,TF1置“1”后,不會(huì)自動(dòng)復(fù)“0”

故需要指令給TF1清“0”初值=0

00

0H-)03E8H81CFHFC18H

10002023/2/362MOVTMOD,#10HSETBTR1LOOP:MOVTH1,#0FCHMOVTL1,#18HJNBTF1,$CPLP1.0CLRTF1SJMPLOOP;T1按方式1工作;啟動(dòng)T1定時(shí);給計(jì)數(shù)器賦初值;TF1=0,則繼續(xù)查詢;;TF1←0;輸出方波;返回程序:2023/2/363

定時(shí)時(shí)間較大時(shí)(大于65ms)。實(shí)現(xiàn)方法:一是采用1個(gè)定時(shí)器定時(shí)一定的間隔(如50ms),然后用軟件進(jìn)行計(jì)數(shù);二是采用2個(gè)定時(shí)器級(jí)聯(lián),其中一個(gè)定時(shí)器用來產(chǎn)生周期信號(hào)(如20ms為周期),然后將該信號(hào)送入另一個(gè)計(jì)數(shù)器的外部脈沖輸入端進(jìn)行脈沖計(jì)數(shù)。

【例5.3-3】編寫程序,實(shí)現(xiàn)用定時(shí)/計(jì)數(shù)器T0定時(shí),使P1.7引腳輸出周期為2s的方波。設(shè)系統(tǒng)的晶振頻率為12MHz。確定方式字:T0在定時(shí)的方式1時(shí):M1M0=01,GATE=0,C/T=0方式控制字為01H

求計(jì)數(shù)初值X:Tcy為1μSN=50ms/1μS=50

000X=65536-50000=3CB0H應(yīng)將3CH送TH0,B0H送TL0采用定時(shí)50ms,然后再計(jì)數(shù)20次的方法實(shí)現(xiàn)2023/2/364

ORG0000HLJMPMAINORG000BHLJMPDVT0ORG0030HMAIN:MOVTMOD,#01H;置T0方式1MOVTH0,#3CH;裝入計(jì)數(shù)初值

MOVTL0,#0B0H;首次計(jì)數(shù)值

MOVR7,#20;計(jì)數(shù)20次

SETBET0;T0開中斷

SETBEA;CPU開中斷

SETBTR0;啟動(dòng)T0SJMP$;等待中斷DVT0:MOVTH0,#3CHMOVTL0,#0B0HDJNZR7,NT0MOVR7,#20CPLP1.7NT0:RETIEND主程序

中斷服務(wù)程序

2023/2/365

ORG0000HLJMPMAINORG000BHLJMPDVT0ORG0030HMAIN:MOVTMOD,#01H;置T0方式1MOVTH0,#3CH;裝入計(jì)數(shù)初值

MOVTL0,#0B0H;首次計(jì)數(shù)值

MOVR7,#0;計(jì)數(shù)20次

SETBET0;T0開中斷

SETBEA;CPU開中斷

SETBTR0;啟動(dòng)T0SJMP$;等待中斷DVT0:MOVTH0,#3CHMOVTL0,#0B0Hincr7

cjner7,#20,nt0MOVR7,#0CPLP1.7NT0:RETIEND主程序

中斷服務(wù)程序

2023/2/3662、作計(jì)數(shù)器用例5.3-4

用T0監(jiān)視一生產(chǎn)流水線,每生產(chǎn)100個(gè)工件,發(fā)出一包裝命令,包裝成一箱,并記錄其箱數(shù)MCS-51

P1.0

T0Vcc包裝機(jī)包裝命令100個(gè)光源2023/2/367GATEC/TM1M0控制T1控制T0TMOD選方式2選計(jì)數(shù)器INT0不參與控制0110⑵計(jì)數(shù)初值X=M-64H=9CH⑶用P1.0啟動(dòng)外設(shè)發(fā)包裝命令⑷用R5R4作箱數(shù)計(jì)數(shù)器⑴方式字TMOD=06H2023/2/368程序:MOVTMOD,#6MOVP1.0,#0MOVR5,#0MOVR4,#0MOVTH0,#9CHMOVTL0,#9CHSETBEASETBET0SETBTR0SJMP$ORG000BHAJMPCOUNT;P1.0為低;箱數(shù)計(jì)數(shù)器清“0”;置T0工作方式;計(jì)數(shù)初值送計(jì)數(shù)器;;T0開中斷;CPU開中斷;啟動(dòng)T0;;模擬主程序;T0中斷入口;轉(zhuǎn)向中斷服務(wù)2023/2/369COUNT:MOVA,R4ADDA,#1MOVR4,AMOVA,R5ADDCA,#0MOVR5,ASETBP1.0MOVR3,#100DLY:NOPDJNZR3,DLYCLRP1.0RETI中斷服務(wù):;;;;箱計(jì)數(shù)器加“1”;;;啟動(dòng)外設(shè)包裝;給外設(shè)足夠時(shí)間;;

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論