




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章單片機(jī)中斷和定時(shí)器/計(jì)數(shù)器5.1單片機(jī)的中斷系統(tǒng)5.2單片機(jī)的定時(shí)器/計(jì)數(shù)器思考與練習(xí)
5.1單片機(jī)的中斷系統(tǒng)
中斷系統(tǒng)在計(jì)算機(jī)系統(tǒng)中起著十分重要的作用,一個(gè)功能很強(qiáng)的中斷系統(tǒng),能大大提高計(jì)算機(jī)對(duì)外部事件的處理效率,增強(qiáng)實(shí)時(shí)性。MCS51單片機(jī)具備一套完善的中斷系統(tǒng),包括5個(gè)中斷源、2個(gè)中斷優(yōu)先級(jí),可以實(shí)現(xiàn)兩級(jí)中斷嵌套,開(kāi)發(fā)者通過(guò)軟件可實(shí)現(xiàn)對(duì)中斷的控制。
5.1.1中斷系統(tǒng)的基本概念和基本結(jié)構(gòu)
1.中斷的基本概念
在日常生活中,有很多中斷的例子。例如一個(gè)人正在家中看書,突然門鈴或電話鈴響了(必須馬上處理),他必須暫時(shí)停止看書,做好記號(hào),去開(kāi)門或者接電話,待事情處理完畢后,按照標(biāo)記的記號(hào)再繼續(xù)之前的閱讀工作。這種正常的工作過(guò)程被外部事件打斷的現(xiàn)象就是中斷。
在單片機(jī)中,當(dāng)CPU正在處理某件事情的時(shí)候(如正在執(zhí)行主程序時(shí)),單片機(jī)外部或內(nèi)部發(fā)生的某一事件(如某個(gè)引腳上電平的變化,一個(gè)脈沖沿的發(fā)生或計(jì)數(shù)器的計(jì)數(shù)溢出等)請(qǐng)求CPU迅速去處理,于是CPU暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)去處理所發(fā)生的事件,事件處理完畢后,CPU再回到剛剛被暫停的地方繼續(xù)原來(lái)的工作,這個(gè)過(guò)程稱為中斷,如圖5-1所示。
能引起CPU產(chǎn)生中斷的事件,稱為中斷源。中斷源向CPU提出的處理請(qǐng)求,稱為中斷請(qǐng)求。CPU接受中斷請(qǐng)求,暫時(shí)中止自身的事情轉(zhuǎn)去處理事件的過(guò)程,稱為中斷響應(yīng)過(guò)
程。CPU對(duì)事件的整個(gè)處理過(guò)程,稱為中斷服務(wù)。為實(shí)現(xiàn)中斷而編寫的服務(wù)程序,稱為中斷服務(wù)程序。事件處理完畢,再回到原來(lái)被中斷的地方(即斷點(diǎn)),稱為中斷返回。單片機(jī)是通過(guò)相應(yīng)的硬件電路和軟件程序來(lái)完成中斷功能的,所以將能完成中斷功能的硬件系統(tǒng)和軟件系統(tǒng)統(tǒng)稱為中斷系統(tǒng)。圖5-1中斷過(guò)程流程圖
中斷是MCS51單片機(jī)的一個(gè)重要功能。采用中斷技術(shù)可以使單片機(jī)實(shí)現(xiàn)以下功能:
(1)分時(shí)操作。單片機(jī)的中斷系統(tǒng)可以使CPU與外設(shè)同步工作。CPU在啟動(dòng)外設(shè)后,可以繼續(xù)執(zhí)行主程序。而外設(shè)把數(shù)據(jù)準(zhǔn)備好后,發(fā)出中斷請(qǐng)求,CPU響應(yīng)該中斷請(qǐng)求并為其服務(wù)。中斷處理完成后,CPU恢復(fù)執(zhí)行主程序,外設(shè)也繼續(xù)工作。因此,CPU可以指揮多個(gè)外設(shè)同時(shí)工作,從而大大提高了CPU的利用率和輸入/輸出的速度。
(2)實(shí)時(shí)處理。當(dāng)單片機(jī)用于實(shí)時(shí)控制時(shí),現(xiàn)場(chǎng)采集到的各種參數(shù)、信息隨時(shí)可能發(fā)出中斷請(qǐng)求,若中斷是開(kāi)放的,CPU就可以立即響應(yīng)并加以處理。
(3)故障處理。如果單片機(jī)在運(yùn)行過(guò)程中出現(xiàn)了事先預(yù)料不到的情況或故障(如掉電、存儲(chǔ)器奇偶校驗(yàn)出錯(cuò)、運(yùn)算溢出等),可以利用中斷系統(tǒng)自行處理而不必停機(jī)。
2.中斷系統(tǒng)的基本結(jié)構(gòu)
MCS-51單片機(jī)的中斷系統(tǒng)包括5個(gè)中斷源、2個(gè)中斷優(yōu)先級(jí)(可以實(shí)現(xiàn)兩級(jí)中斷嵌套)、4個(gè)用于中斷控制的寄存器(IE、IP、TCON和SCON),其中斷系統(tǒng)結(jié)構(gòu)如圖5-2所示。
MCS-51單片機(jī)的5個(gè)中斷源分別為:
(1)INT0:外部中斷0請(qǐng)求,可由IT0選擇其有效方式。當(dāng)CPU檢測(cè)到INT0(P3.2)引腳上出現(xiàn)有效的中斷信號(hào)時(shí),置位IE0,向CPU申請(qǐng)中斷。
(2)INT1:外部中斷1請(qǐng)求,可由IT1選擇其有效方式。當(dāng)CPU檢測(cè)到INT1(P3.3)引腳上出現(xiàn)有效的中斷信號(hào)時(shí),置位IE1,向CPU申請(qǐng)中斷。
(3)T0:定時(shí)器/計(jì)數(shù)器T0溢出中斷請(qǐng)求。當(dāng)定時(shí)器/計(jì)數(shù)器T0發(fā)生溢出時(shí),置位TF0,向CPU申請(qǐng)中斷。
(4)T1:定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求。當(dāng)定時(shí)器/計(jì)數(shù)器T1發(fā)生溢出時(shí),置位TF1,向CPU申請(qǐng)中斷。
(5)TxD/RxD:串行口中斷請(qǐng)求。當(dāng)串行口接收完一幀串行數(shù)據(jù)時(shí)置位RI,或當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)時(shí)置位TI,向CPU申請(qǐng)中斷。圖5-2MCS-51單片機(jī)的中斷系統(tǒng)結(jié)構(gòu)
通常,外部中斷源有以下幾種:
(1)I/O設(shè)備中斷源。鍵盤、打印機(jī)、A/D轉(zhuǎn)換器等I/O設(shè)備在完成自身的操作后,向單片機(jī)發(fā)出中斷請(qǐng)求,請(qǐng)求單片機(jī)對(duì)其進(jìn)行處理。
(2)控制對(duì)象中斷源。當(dāng)單片機(jī)用作實(shí)時(shí)控制時(shí),被控對(duì)象常常被用作中斷源,用于產(chǎn)生中斷請(qǐng)求信號(hào),要求單片機(jī)及時(shí)采集系統(tǒng)的控制參量、越限參數(shù)以及要求發(fā)送和接收
數(shù)據(jù)等。例如,電壓、電流、溫度、壓力、流量和流速等超越上限和下限以及開(kāi)關(guān)和繼電器的閉合或斷開(kāi)都可以作為中斷源來(lái)產(chǎn)生中斷請(qǐng)求信號(hào),并要求單片機(jī)通過(guò)執(zhí)行中斷服務(wù)程序來(lái)加以處理。
(3)故障中斷源。單片機(jī)外部故障源引起外部中斷,如掉電中斷等。在掉電時(shí),掉電檢測(cè)電路檢測(cè)到它時(shí)就自動(dòng)產(chǎn)生一個(gè)掉電中斷請(qǐng)求,單片機(jī)檢測(cè)到后便可以在大濾波電容維持正常供電的幾秒內(nèi)通過(guò)執(zhí)行掉電中斷服務(wù)程序來(lái)保護(hù)現(xiàn)場(chǎng)和啟用備用電池,以便電源恢復(fù)正常后繼續(xù)執(zhí)行掉電前的用戶程序。
5.1.2中斷系統(tǒng)的控制與實(shí)現(xiàn)
MCS-51單片機(jī)對(duì)中斷的控制是通過(guò)4個(gè)特殊功能寄存器實(shí)現(xiàn)的,它們分別是中斷請(qǐng)求標(biāo)志寄存器TCON、串行口控制寄存器SCON、中斷允許控制寄存器IE和中斷優(yōu)先級(jí)控制寄存器IP。
1.中斷請(qǐng)求控制
1)TCON中的中斷標(biāo)志位
TCON是定時(shí)器/計(jì)數(shù)器T0和T1的控制寄存器,同時(shí)也鎖存T0和T1的溢出中斷請(qǐng)求標(biāo)志及外部中斷0和外部中斷1的中斷請(qǐng)求標(biāo)志等。TCON是可位尋址的特殊功能寄存器,寄存器字節(jié)地址為88H,位地址為88H~8FH。TCON的格式如下:
與中斷有關(guān)的標(biāo)志位有6個(gè),具體含義如下:
①IT0:外部中斷0觸發(fā)方式控制位。該位由軟件置1或清0。
當(dāng)IT0=0時(shí),外部中斷0為電平觸發(fā)方式。CPU在每個(gè)機(jī)器周期的S5P2時(shí)刻對(duì)INT0(P3.2)引腳的電平進(jìn)行采樣,若采樣到低電平,則表示中斷信號(hào)有效。
電平觸發(fā)方式時(shí),外部中斷源的有效低電平必須保持到請(qǐng)求獲得響應(yīng)時(shí)為止,否則就會(huì)漏掉;在中斷服務(wù)結(jié)束之前,中斷源的有效低電平必須撤除,否則中斷返回之后將再次產(chǎn)生中斷。該方式適合于外部中斷輸入為低電平,且在中斷服務(wù)程序中能清除外部中斷請(qǐng)求源的情況。如并行接口芯片8255的中斷請(qǐng)求線在接受讀或?qū)懖僮骱蠹幢粡?fù)位,因此以其去請(qǐng)求電平觸發(fā)方式的中斷比較方便。
當(dāng)IT0=1時(shí),外部中斷0為邊沿觸發(fā)方式,CPU在每個(gè)機(jī)器周期的S5P2時(shí)刻對(duì)INT0(P3.2)引腳的電平進(jìn)行采樣,如果在連續(xù)的兩個(gè)機(jī)器周期檢測(cè)到INT0引腳由高電平變?yōu)榈碗娖?則表示中斷信號(hào)有效。
邊沿觸發(fā)方式時(shí),在相繼兩次采樣中,先采樣到外部中斷輸入為高電平,下一個(gè)周期采樣到外部中斷輸入為低電平,則置位中斷申請(qǐng)標(biāo)志IE0。若CPU暫時(shí)不能響應(yīng),中斷申請(qǐng)標(biāo)志也不會(huì)丟失,直到CPU響應(yīng)此中斷時(shí)才清0。另外,為了保證下降沿能夠被可靠地采樣到,INT0引腳上的負(fù)脈沖寬度至少要保持一個(gè)機(jī)器周期。邊沿觸發(fā)方式適合于以負(fù)脈沖形式輸入的外部中斷請(qǐng)求,如ADC0809的轉(zhuǎn)換結(jié)束信號(hào)EOC為正脈沖,經(jīng)反相后就可以作為MCS51的外部中斷請(qǐng)求信號(hào)。
②IE0:外部中斷0的中斷請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到INT0引腳上出現(xiàn)有效的中斷信號(hào)時(shí)(若IT0=0,且檢測(cè)到INT0引腳為低電平時(shí);若IT0=1,且檢測(cè)到INT0引腳出現(xiàn)
負(fù)跳變時(shí)),IE0由硬件置1,向CPU申請(qǐng)中斷。
③IT1:外部中斷1觸發(fā)方式控制位。其功能與IT0類似。
④IE1:外部中斷1的中斷請(qǐng)求標(biāo)志位。其功能與IE0類似。
⑤TF0:T0溢出中斷請(qǐng)求標(biāo)志位。當(dāng)啟動(dòng)定時(shí)器/計(jì)數(shù)器T0計(jì)數(shù)后,T0從初值開(kāi)始加1計(jì)數(shù),當(dāng)最高位產(chǎn)生溢出時(shí),TF0由硬件置1,向CPU申請(qǐng)中斷。
CPU響應(yīng)TF0中斷時(shí),由硬件清0TF0。
⑥TF1:T1溢出中斷請(qǐng)求標(biāo)志位。其功能與TF0類似。
2)SCON中的中斷標(biāo)志位
SCON是串行口控制寄存器,也是可位尋址的特殊功能寄存器,寄存器字節(jié)地址為98H,位地址為98H~9FH。SCON的格式如下:
與中斷有關(guān)的標(biāo)志位有兩個(gè),具體含義如下:
①TI:串行口發(fā)送中斷請(qǐng)求標(biāo)志位。每當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)后,TI由硬件自動(dòng)置1。CPU響應(yīng)該中斷時(shí),不能自動(dòng)清除TI,必須在中斷服務(wù)程序中用軟件對(duì)TI標(biāo)志位清0。
②RI:串行口接收中斷請(qǐng)求標(biāo)志位。每當(dāng)串行口接收完一幀串行數(shù)據(jù)后,RI由硬件自動(dòng)置1。CPU響應(yīng)該中斷時(shí),不能自動(dòng)清除RI,必須在中斷服務(wù)程序中用軟件對(duì)RI標(biāo)志位清0。
2.中斷允許控制
MCS51單片機(jī)對(duì)中斷源的開(kāi)放或屏蔽,是由中斷允許寄存器IE控制的。IE是可位尋址的特殊功能寄存器,寄存器字節(jié)地址為A8H,位地址為A8H~AFH。IE格式如下:
IE中各位的含義如下:
①EA:中斷允許總控制位。若EA=0,則所有中斷請(qǐng)求被屏蔽(CPU關(guān)中斷);若EA=1,則CPU開(kāi)放所有中斷(CPU開(kāi)中斷),但5個(gè)中斷源的中斷請(qǐng)求是否被允許,還要由IE中的低5位所對(duì)應(yīng)的5個(gè)中斷請(qǐng)求允許控制位的狀態(tài)來(lái)決定,即IE對(duì)中斷的開(kāi)放和關(guān)閉為兩級(jí)控制。
②ES:串行中斷允許位。若ES=0,則禁止串行口中斷;若ES=1,則允許串行口中斷。
③ET1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位。若ET1=0,則禁止T1溢出中斷;若ET1=1,則允許T1溢出中斷。
④EX1:外部中斷1中斷允許位。若EX1=0,則禁止外部中斷1中斷;若EX1=1,則允許外部中斷1中斷。
⑤ET0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位。若ET0=0,則禁止T0溢出中斷;若ET0=1,則允許T0溢出中斷。
⑥EX0:外部中斷0中斷允許位。若EX0=0,則禁止外部中斷0中斷;若EX0=1,則允許外部中斷0中斷。
【例5-1】假設(shè)允許外部中斷0和定時(shí)器/計(jì)數(shù)器0中斷,禁止其他中斷源的中斷請(qǐng)求,試根據(jù)假設(shè)設(shè)置IE的相應(yīng)值。
分析:本例的功能可以分別利用位操作指令和字節(jié)操作指令來(lái)實(shí)現(xiàn)。
3.中斷優(yōu)先級(jí)控制
MCS-51單片機(jī)的中斷源有兩個(gè)中斷優(yōu)先級(jí),每一個(gè)中斷源均可由軟件設(shè)定為高優(yōu)先級(jí)中斷或低優(yōu)先級(jí)中斷,可實(shí)現(xiàn)兩級(jí)中斷嵌套,即當(dāng)CPU正在處理一個(gè)中斷請(qǐng)求時(shí),又出現(xiàn)了另一個(gè)優(yōu)先級(jí)比它高的中斷請(qǐng)求,這時(shí),CPU就暫時(shí)中止原中斷服務(wù)程序的執(zhí)行,保護(hù)當(dāng)前斷點(diǎn),轉(zhuǎn)去響應(yīng)優(yōu)先級(jí)更高的中斷請(qǐng)求。等到處理完更高級(jí)別的中斷服務(wù)程序后,再繼續(xù)執(zhí)行原來(lái)較低級(jí)的中斷服務(wù)程序。兩級(jí)中斷嵌套的過(guò)程如圖-3所示。圖5-3兩級(jí)中斷嵌套
由圖5-3可見(jiàn),一個(gè)正在執(zhí)行的低優(yōu)先級(jí)中斷程序能被高優(yōu)先級(jí)的中斷源所中斷,但不能被另一個(gè)低優(yōu)先級(jí)的中斷源所中斷。若CPU正在執(zhí)行高優(yōu)先級(jí)的中斷,則不能被任
何中斷源所中斷。
MCS-51單片機(jī)各中斷源的優(yōu)先級(jí)都是由中斷優(yōu)先級(jí)控制寄存器IP中的相應(yīng)位來(lái)規(guī)定的。IP是可位尋址的特殊功能寄存器,寄存器字節(jié)地址為B8H,位地址為B8H~BFH。
IP的格式如下:
IP中各位的含義如下:
①PX0:外部中斷0中斷優(yōu)先級(jí)設(shè)定控制位。若PX0=1,則外部中斷0被設(shè)定為高優(yōu)先級(jí)中斷;若PX0=0,則外部中斷0被設(shè)定為低優(yōu)先級(jí)中斷。
②PT0:定時(shí)器/計(jì)數(shù)器0中斷優(yōu)先級(jí)設(shè)定控制位。若PT0=1,則T0被設(shè)定為高優(yōu)先級(jí)中斷;若PT0=0,則T0被設(shè)定為低優(yōu)先級(jí)中斷。
③PX1:外部中斷1中斷優(yōu)先級(jí)設(shè)定控制位。若PX1=1,則外部中斷1被設(shè)定為高優(yōu)先級(jí)中斷;若PX1=0,則外部中斷1被設(shè)定為低優(yōu)先級(jí)中斷。
④PT1:定時(shí)器/計(jì)數(shù)器1中斷優(yōu)先級(jí)設(shè)定控制位。若PT1=1,則T1被設(shè)定為高優(yōu)先級(jí)中斷;若PT1=0,則T1被設(shè)定為低優(yōu)先級(jí)中斷。
⑤PS:串行口中斷優(yōu)先級(jí)設(shè)定控制位。若PS=1,則串行口被設(shè)定為高優(yōu)先級(jí)中斷;若PS=0,則串行口被設(shè)定為低優(yōu)先級(jí)中斷。
MCS-51單片機(jī)復(fù)位后,IP被全部清0,即全部設(shè)置為低優(yōu)先級(jí)中斷。當(dāng)同時(shí)接收到多個(gè)同優(yōu)先級(jí)的中斷請(qǐng)求時(shí),響應(yīng)哪個(gè)中斷源取決于內(nèi)部硬件的查詢順序。同級(jí)中斷源的優(yōu)先級(jí)順序如表5-1所示。
由此可知,各中斷源在同一個(gè)優(yōu)先級(jí)的條件下,外部中斷0的優(yōu)先權(quán)最高,串行口的優(yōu)先權(quán)最低。
MCS-51的中斷系統(tǒng)有兩個(gè)不可尋址的“優(yōu)先級(jí)激活觸發(fā)器”:一個(gè)用來(lái)指示某高優(yōu)先級(jí)的中斷正在執(zhí)行,所有后來(lái)的中斷均被阻止;另一個(gè)用來(lái)指示某低優(yōu)先級(jí)的中斷正在
執(zhí)行,所有同級(jí)中斷都被阻止,但不阻斷高優(yōu)先級(jí)的中斷請(qǐng)求。
【例5-2】設(shè)MCS-51的外部中斷0和定時(shí)器/計(jì)數(shù)器0中斷為高優(yōu)先級(jí),其他中斷請(qǐng)求為低優(yōu)先級(jí),試設(shè)置IP寄存器的相應(yīng)值。
5.1.3中斷系統(tǒng)的處理過(guò)程
中斷處理過(guò)程可分為三個(gè)階段,即中斷響應(yīng)、中斷處理和中斷返回。
1.中斷響應(yīng)
1)中斷響應(yīng)條件
CPU響應(yīng)中斷的條件如下:
(1)有中斷源發(fā)出中斷請(qǐng)求。
(2)中斷總允許位EA=1,即CPU開(kāi)中斷。
(3)申請(qǐng)中斷的中斷源的中斷允許位為1,即該中斷沒(méi)有被屏蔽。
(4)無(wú)同級(jí)或更高級(jí)中斷正在被服務(wù)。
(5)當(dāng)前指令已執(zhí)行到最后一個(gè)機(jī)器周期,即在完成正在執(zhí)行的指令前,不會(huì)響應(yīng)中斷,從而保證每條指令在執(zhí)行過(guò)程中不被打斷。
(6)若當(dāng)前正在執(zhí)行的指令是RETI或是訪問(wèn)IE、IP的指令,則在執(zhí)行RETI或?qū)懭隝E、IP指令之后,不能馬上響應(yīng)中斷請(qǐng)求,至少再執(zhí)行一條其他指令之后才會(huì)響應(yīng)。
2)中斷響應(yīng)過(guò)程
MCS-51單片機(jī)的CPU在每個(gè)機(jī)器周期的S5P2時(shí)刻順序采樣每個(gè)中斷源的中斷標(biāo)志位,然后在下一個(gè)機(jī)器周期查詢?cè)摬蓸印H绻樵兊侥硞€(gè)中斷標(biāo)志為1,則表明該中斷源有中斷請(qǐng)求。如果滿足中斷響應(yīng)的條件,則在下一個(gè)機(jī)器周期開(kāi)始時(shí)按優(yōu)先級(jí)進(jìn)行中斷處理,并響應(yīng)該中斷。
MCS-51單片機(jī)一旦響應(yīng)中斷,首先置位相應(yīng)的中斷“優(yōu)先級(jí)激活觸發(fā)器”,以阻止同級(jí)和低級(jí)中斷,然后由硬件自動(dòng)生成一條長(zhǎng)調(diào)用指令“LCALLaddr16”,把PC(程序計(jì)數(shù)器)當(dāng)前值壓入堆棧,以保護(hù)斷點(diǎn),再將相應(yīng)的中斷入口地址送入PC,使程序轉(zhuǎn)向該中斷入口地址單元中,以執(zhí)行中斷服務(wù)程序。各中斷源的入口地址如表5-2所示。
由表5-2可知,MCS-51單片機(jī)的兩個(gè)相鄰中斷源的入口地址只相差8個(gè)字節(jié),一般的中斷服務(wù)程序都超過(guò)8個(gè)字節(jié),所以通常是在中斷入口地址單元放一條長(zhǎng)轉(zhuǎn)移指令LJMP,這樣可以使中斷服務(wù)程序靈活地安排在64KBROM中的任何地方,如圖5-1所示。
中斷服務(wù)程序從中斷入口地址開(kāi)始執(zhí)行,一直到返回指令RETI為止,CPU執(zhí)行完這條指令后,把響應(yīng)中斷時(shí)所置位的優(yōu)先級(jí)激活觸發(fā)器清0,然后從堆棧中彈出斷點(diǎn)地址放入PC,使CPU返回主程序。
3)中斷響應(yīng)時(shí)間
從查詢中斷請(qǐng)求標(biāo)志位到轉(zhuǎn)向中斷服務(wù)入口地址所需的機(jī)器周期數(shù)稱為中斷響應(yīng)時(shí)間。
根據(jù)中斷響應(yīng)條件,如果查詢到中斷請(qǐng)求信號(hào)的這個(gè)機(jī)器周期恰好處于正在執(zhí)行指令的最后一個(gè)機(jī)器周期,那么在這個(gè)機(jī)器周期結(jié)束后,將由CPU自動(dòng)執(zhí)行一條硬件子程序
調(diào)用指令LCALL,以轉(zhuǎn)到相應(yīng)的中斷入口地址單元,從而對(duì)中斷進(jìn)行處理。因?yàn)椴樵冎袛鄻?biāo)志需要1個(gè)機(jī)器周期,長(zhǎng)調(diào)用指令需要2個(gè)機(jī)器周期,所以中斷響應(yīng)時(shí)間最短為3個(gè)機(jī)器周期。
如果查詢到中斷請(qǐng)求信號(hào)時(shí)剛好是剛開(kāi)始執(zhí)行RETI或是訪問(wèn)IE、IP的指令,則需要把當(dāng)前指令執(zhí)行完再繼續(xù)執(zhí)行一條指令后,才能響應(yīng)中斷。執(zhí)行上述的RETI或是訪問(wèn)
IE、IP的指令最長(zhǎng)需要2個(gè)機(jī)器周期,而接著再執(zhí)行的一條指令,最長(zhǎng)需要4個(gè)機(jī)器周期(乘法指令MUL或除法指令DIV),再加上硬件子程序調(diào)用指令LCALL需要2個(gè)機(jī)器周
期,所以中斷響應(yīng)時(shí)間最長(zhǎng)為8個(gè)機(jī)器周期。
對(duì)于一個(gè)單中斷系統(tǒng),中斷響應(yīng)時(shí)間總是在3~8個(gè)機(jī)器周期之間。
4)中斷請(qǐng)求的撤銷
中斷請(qǐng)求被響應(yīng)后,要及時(shí)撤銷中斷請(qǐng)求,否則會(huì)引起重復(fù)響應(yīng)。
(1)定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求的撤銷。
中斷請(qǐng)求被響應(yīng)后,硬件自動(dòng)將中斷請(qǐng)求標(biāo)志位TF0或TF1清0,因此定時(shí)器/計(jì)數(shù)器中斷請(qǐng)求是自動(dòng)撤銷的。
(2)外部中斷請(qǐng)求的撤銷。
外部中斷請(qǐng)求的撤銷包括中斷標(biāo)志位的清0和外部中斷信號(hào)的撤銷。
邊沿觸發(fā)方式:中斷被響應(yīng)后,IE0或IE1由硬件自動(dòng)清0,由于負(fù)脈沖信號(hào)過(guò)后就消失了,所以外部中斷請(qǐng)求也是自動(dòng)撤銷的。
電平觸發(fā)方式:中斷被響應(yīng)后,IE0或IE1由硬件自動(dòng)清0,但中斷請(qǐng)求信號(hào)的低電平可能繼續(xù)存在,在以后的機(jī)器采樣中,又會(huì)把已清0的IE0或IE1重新置1,造成重復(fù)中斷。為了避免這種情況出現(xiàn),應(yīng)盡量采用邊沿觸發(fā)方式。
如果采用電平觸發(fā)方式,要徹底撤銷外部中斷請(qǐng)求,需在中斷響應(yīng)后把中斷請(qǐng)求信號(hào)引腳從低電平強(qiáng)制改變?yōu)楦唠娖健R驗(yàn)镃PU無(wú)法直接干預(yù)外電路,所以在引腳處用硬件電路(再配合相應(yīng)的軟件)來(lái)撤銷外電路過(guò)期的中斷請(qǐng)求。圖5-4給出了一種低電平觸發(fā)后的中斷標(biāo)志位撤銷電路。
為實(shí)現(xiàn)圖5-4所示電路的撤銷中斷請(qǐng)求功能,需要在中斷服務(wù)程序中加如下兩條指令:圖5-4電平方式外部中斷請(qǐng)求的撤銷電路
(3)串行口中斷請(qǐng)求的撤銷。
串行口中斷被響應(yīng)后,CPU無(wú)法知道是接收中斷還是發(fā)送中斷,還需測(cè)試這兩個(gè)中斷標(biāo)志位的狀態(tài),以判定是接收操作還是發(fā)送操作。所以串行口中斷請(qǐng)求的撤銷只能使用軟件方法,即在中斷服務(wù)程序中用如下指令清除標(biāo)志位:
2.中斷處理
CPU響應(yīng)中斷后即轉(zhuǎn)至中斷服務(wù)程序的入口,執(zhí)行中斷服務(wù)程序。從中斷服務(wù)程序的第一條指令開(kāi)始到返回指令為止,這個(gè)過(guò)程稱為中斷處理或中斷服務(wù)。不同的中斷源服務(wù)的內(nèi)容及要求各不相同,其處理過(guò)程也就有所區(qū)別。一般情況下,中斷處理包括兩部分內(nèi)容:一是保護(hù)現(xiàn)場(chǎng),二是為中斷源服務(wù)。
所謂現(xiàn)場(chǎng),是指中斷時(shí)刻單片機(jī)中某些寄存器(狀態(tài)寄存器PSW、累加器A、工作寄存器等)和存儲(chǔ)器單元中的數(shù)據(jù)或狀態(tài)。為了使中斷服務(wù)程序的執(zhí)行不破壞這些數(shù)據(jù)或狀
態(tài),以免在中斷返回后影響主程序的運(yùn)行,要求把它們送入堆棧中保存起來(lái),這就是現(xiàn)場(chǎng)保護(hù)。中斷處理結(jié)束后,在返回主程序前,需要把保存的現(xiàn)場(chǎng)內(nèi)容從堆棧中彈出,以恢復(fù)那些寄存器和存儲(chǔ)器單元中的原有內(nèi)容,這就是現(xiàn)場(chǎng)恢復(fù)。現(xiàn)場(chǎng)保護(hù)一定要位于中斷處理程序的前面,而現(xiàn)場(chǎng)恢復(fù)一定要位于中斷處理程序的后面。至于要保護(hù)哪些內(nèi)容,應(yīng)該由用戶根據(jù)中斷處理程序的具體情況來(lái)決定。
所謂中斷源服務(wù),是指根據(jù)中斷源的具體要求進(jìn)行相應(yīng)的處理。
編寫中斷處理程序時(shí)應(yīng)注意以下幾點(diǎn):
(1)如果中斷服務(wù)程序的長(zhǎng)度超過(guò)8字節(jié)(即兩個(gè)相鄰中斷源入口地址單元之間的距離),則需在中斷入口地址單元處放一條無(wú)條件轉(zhuǎn)移指令LJMP,使中斷服務(wù)程序可靈活地安排在64KBROM中的任何空間。
(2)若在執(zhí)行當(dāng)前中斷程序時(shí)禁止更高優(yōu)先級(jí)中斷,則應(yīng)用軟件關(guān)閉CPU中斷或屏蔽更高級(jí)中斷源的中斷,在中斷返回前再開(kāi)放中斷。
(3)在現(xiàn)場(chǎng)保護(hù)和現(xiàn)場(chǎng)恢復(fù)時(shí),為了不使現(xiàn)場(chǎng)信息受到破壞或造成混亂,一般應(yīng)關(guān)閉CPU中斷,使CPU暫不響應(yīng)新的中斷請(qǐng)求。這樣,在編寫中斷服務(wù)程序時(shí),應(yīng)注意在現(xiàn)場(chǎng)保護(hù)之前要關(guān)閉中斷,在現(xiàn)場(chǎng)保護(hù)之后若允許高優(yōu)先級(jí)中斷嵌套,則應(yīng)開(kāi)中斷。同樣,在現(xiàn)場(chǎng)恢復(fù)之前應(yīng)關(guān)閉中斷,在現(xiàn)場(chǎng)恢復(fù)之后再開(kāi)中斷。在確定沒(méi)有高級(jí)中斷時(shí),上述過(guò)程也可以簡(jiǎn)化。
中斷處理流程圖如圖5-5所示。圖5-5中斷處理流程圖
【例5-3】假設(shè)需要將PSW、A和工作寄存器R0~R7(00H~07H)的內(nèi)容進(jìn)行現(xiàn)場(chǎng)保護(hù),請(qǐng)根據(jù)中斷處理流程圖編寫中斷處理程序。
說(shuō)明:
①因?yàn)镽n(n=0~7)的物理地址是由PSW中RS1和RS0的狀態(tài)決定的,所以在對(duì)PSW進(jìn)行保護(hù)之后,可以通過(guò)修改RS1或RS0的值實(shí)現(xiàn)對(duì)Rn的現(xiàn)場(chǎng)保護(hù)。
本例中的R0~R7屬于第0組工作寄存器,對(duì)應(yīng)地址為00H~07H,若要采用壓入堆棧的方式進(jìn)行保護(hù),則執(zhí)行中斷處理程序前需要執(zhí)行8條PUSH指令,執(zhí)行中斷處理程序后還需要8條POP指令與之對(duì)應(yīng),程序?qū)?huì)變得很繁瑣。
而本例只是執(zhí)行一條“SETBRS0”指令,便將工作寄存器組由第0組變?yōu)榈?組,R0~R7的對(duì)應(yīng)地址變?yōu)?8H~0FH,原來(lái)R0~R7對(duì)應(yīng)的00H~07H的內(nèi)容便被保護(hù)起來(lái)。
當(dāng)執(zhí)行完中斷處理程序后,在恢復(fù)PSW值的同時(shí),工作寄存器組又恢復(fù)為第0組,R0~R7繼續(xù)對(duì)應(yīng)00H~07H。
②“中斷處理程序段”應(yīng)根據(jù)中斷任務(wù)的具體要求來(lái)編寫。
③如果本中斷服務(wù)程序不允許被其他的中斷所中斷,則將“中斷處理程序段”前后的“SETBEA”和“CLREA”兩條指令去掉。
④若改變Rn的物理地址(修改RS1或RS0),則必須考慮堆棧區(qū)設(shè)置的問(wèn)題。因?yàn)槟J(rèn)堆棧區(qū)和第1組工作寄存器組的物理地址(08H~0FH)重疊。
3.中斷返回
中斷處理程序的最后一條執(zhí)行指令必須是RETI。CPU執(zhí)行完這條指令時(shí),一方面要清除中斷響應(yīng)時(shí)所置位的優(yōu)先級(jí)激活觸發(fā)器,另一方面要從堆棧中彈出斷點(diǎn)地址放入PC,
使程序回到原斷點(diǎn)處,繼續(xù)執(zhí)行原來(lái)的程序。
RET指令雖然也能控制PC返回到原來(lái)中斷的地方,但RET指令沒(méi)有清0中斷優(yōu)先級(jí)激活觸發(fā)器的功能。若采用RET指令作中斷處理程序的最后一條執(zhí)行指令,返回到主程序后中斷控制系統(tǒng)會(huì)認(rèn)為中斷仍在進(jìn)行,其后果是與此同級(jí)或低級(jí)的中斷請(qǐng)求將不被響應(yīng)。所以,不能用RET指令代替RETI指令。
另外,如果用戶在中斷服務(wù)程序中進(jìn)行了入棧操作,則在RETI指令執(zhí)行前應(yīng)進(jìn)行相應(yīng)的出棧操作,即在中斷服務(wù)程序中PUSH指令與POP指令必須成對(duì)使用,否則不能正確返回?cái)帱c(diǎn)。
4.中斷請(qǐng)求的深入理解
MCS-51單片機(jī)有6個(gè)中斷請(qǐng)求標(biāo)志位,即IE0、IE1、TF0、TF1、RI、TI,對(duì)應(yīng)著5個(gè)中斷。當(dāng)滿足中斷請(qǐng)求的條件時(shí),由硬件置位(=1),如:外中斷引腳輸入信號(hào)產(chǎn)生下降
沿、計(jì)數(shù)器產(chǎn)生計(jì)數(shù)滿額溢出等。如果這時(shí)滿足中斷響應(yīng)條件,則會(huì)產(chǎn)生中斷,我們可以編寫中斷服務(wù)程序完成相應(yīng)的工作。
假設(shè)沒(méi)有開(kāi)放中斷,在滿足條件的情況下,中斷請(qǐng)求標(biāo)志位也會(huì)由單片機(jī)硬件置位。這樣,我們就可以通過(guò)對(duì)中斷請(qǐng)求標(biāo)志位的查詢,完成同樣的任務(wù),即編寫查詢程序來(lái)替
代中斷服務(wù)程序。只是在查詢時(shí)需要注意對(duì)中斷請(qǐng)求標(biāo)志位的清0。
表5-3給出了中斷請(qǐng)求標(biāo)志位的變化情況。
5.1.4中斷系統(tǒng)的應(yīng)用
1.中斷程序的結(jié)構(gòu)
MCS-51單片機(jī)復(fù)位后,(PC)=0000H,即程序要從起始地址0000H開(kāi)始執(zhí)行,而0003H、000BH、0013H、001BH、0023H分別為各中斷源的入口地址。為了跳過(guò)各中斷源的入口地址,編程時(shí)應(yīng)在0000H處使用一條無(wú)條件轉(zhuǎn)移指令,跳轉(zhuǎn)到主程序,主程序一般從地址0030H開(kāi)始,參見(jiàn)圖4-1。也可以不設(shè)定主程序的開(kāi)始地址,只設(shè)定標(biāo)號(hào),地址自
然順延,如下面的程序。
另外,各中斷入口地址之間只差8個(gè)字節(jié),如果中斷服務(wù)程序的指令代碼少于8個(gè)字節(jié),則可以從規(guī)定的中斷入口地址處直接編寫中斷服務(wù)程序。若中斷服務(wù)程序的指令代碼
超過(guò)8個(gè)字節(jié),則需要在中斷入口地址處放置一條無(wú)條件轉(zhuǎn)移指令,把中斷服務(wù)程序跳轉(zhuǎn)到合適的位置。
2.中斷程序的內(nèi)容
中斷程序一般包含中斷初始化程序和中斷服務(wù)程序兩部分。
對(duì)中斷實(shí)現(xiàn)控制實(shí)質(zhì)上就是對(duì)與中斷有關(guān)的特殊功能寄存器進(jìn)行管理和控制。單片機(jī)復(fù)位后,這些寄存器的內(nèi)容都被清0,所有中斷源都被屏蔽,要想開(kāi)放CPU中斷,允許某些中斷源中斷,必須對(duì)相關(guān)寄存器進(jìn)行狀態(tài)預(yù)置。中斷初始化程序是指用戶對(duì)相關(guān)寄存器中的各控制位進(jìn)行賦值,即對(duì)如下內(nèi)容進(jìn)行初始化:
①設(shè)置中斷允許控制寄存器IE,允許相應(yīng)中斷源中斷。
②設(shè)置中斷優(yōu)先級(jí)寄存器IP,選擇并分配所使用中斷源的優(yōu)先級(jí)。
③若是外部中斷源,還要設(shè)置中斷請(qǐng)求的觸發(fā)方式IT0或IT1,以決定采用電平觸發(fā)方式還是邊沿觸發(fā)方式。
中斷服務(wù)程序要根據(jù)中斷任務(wù)的具體要求進(jìn)行編寫。在編寫中斷服務(wù)程序時(shí),要根據(jù)需要對(duì)一些重要寄存器或存儲(chǔ)器的內(nèi)容進(jìn)行現(xiàn)場(chǎng)保護(hù),在中斷返回前還要進(jìn)行現(xiàn)場(chǎng)恢復(fù),
并且中斷服務(wù)程序的最后一條指令必須是RETI。
【例5-4】試編寫設(shè)置外部中斷0為邊沿觸發(fā)的高優(yōu)先級(jí)中斷源的初始化程序。
3.外部中斷源的應(yīng)用程序
【例5-5】如圖5-6所示,89C51的P1口接有8個(gè)發(fā)光二極管,在外部中斷1上接有一個(gè)按鍵,試編程實(shí)現(xiàn)如下功能:通過(guò)外部中斷1,依次點(diǎn)亮8個(gè)發(fā)光二極管中的一個(gè)。
分析:因?yàn)?個(gè)發(fā)光二極管采用共陽(yáng)極連接,所以若想通過(guò)外部中斷1依次點(diǎn)亮8個(gè)發(fā)光二極管中的一個(gè),首先要保證從P1口輸出的數(shù)據(jù)中只有1位為“0”,其余7位為“1”,然后在中斷服務(wù)程序中,將該數(shù)據(jù)循環(huán)左移或循環(huán)右移,即可實(shí)現(xiàn)依次點(diǎn)亮8個(gè)發(fā)光二極管中的一個(gè)。因?yàn)橹噶頡L或RR的操作數(shù)必須是A,所以需要先將數(shù)據(jù)送給累加器A,然后通過(guò)A輸出到P1口。
假設(shè)外部中斷1采用邊沿觸發(fā),高優(yōu)先級(jí)。圖5-6例5-5電路圖
【例5-6】對(duì)于圖5-6所示的電路,試編程實(shí)現(xiàn)如下功能:當(dāng)無(wú)外部中斷請(qǐng)求時(shí),每隔1s,依次點(diǎn)亮8個(gè)發(fā)光二極管中的1個(gè);當(dāng)有外部中斷請(qǐng)求時(shí),8個(gè)發(fā)光二極管的顯示
狀態(tài)改為閃爍顯示(假設(shè)二極管點(diǎn)亮及熄滅的時(shí)間都是1s),閃爍5次后,繼續(xù)依次點(diǎn)亮。假設(shè)系統(tǒng)時(shí)鐘頻率為12MHz。
分析:根據(jù)題意,在無(wú)外部中斷請(qǐng)求時(shí),依次點(diǎn)亮8個(gè)發(fā)光二極管中的1個(gè),所以數(shù)據(jù)循環(huán)左移或循環(huán)右移的程序段要放在主程序中。當(dāng)有外部中斷請(qǐng)求時(shí),再根據(jù)要求修改P1口的狀態(tài)。圖5-7例5-7電路圖
4.外部中斷源的擴(kuò)展及應(yīng)用
MCS-51單片機(jī)只有兩個(gè)外部中斷源的輸入端,但實(shí)際應(yīng)用中可能需要兩個(gè)以上的外部中斷源,這時(shí)就要對(duì)外部中斷源的輸入端進(jìn)行擴(kuò)展。擴(kuò)展外部中斷源的方法有定時(shí)
器/計(jì)數(shù)器擴(kuò)展法、中斷和查詢相結(jié)合的擴(kuò)展法、硬件電路擴(kuò)展法。這里僅介紹中斷和查詢相結(jié)合的擴(kuò)展法。
利用MCS-51單片機(jī)的兩個(gè)外部中斷線,每個(gè)中斷線可以通過(guò)“與”的關(guān)系連接多個(gè)外部中斷源,同時(shí)利用MCS51的I/O端口作為各中斷源的識(shí)別標(biāo)志,其原理如圖5-8
所示。
圖5-8中的三個(gè)外部中斷源在沒(méi)有中斷事件時(shí)輸出高電平,通過(guò)與門輸入到INT0端的電平為高電平,表示沒(méi)有中斷事件發(fā)生。當(dāng)任意一個(gè)外部中斷源有中斷請(qǐng)求并送出一個(gè)
低電平時(shí),CPU能立即響應(yīng)該中斷請(qǐng)求。在中斷服務(wù)程序中,查詢P1.0、P1.1、P1.2引腳上哪一個(gè)有低電平,判斷是哪一個(gè)外部中斷源發(fā)出的中斷請(qǐng)求,并執(zhí)行相應(yīng)的中斷處理程
序(如查詢到P1.0引腳上有低電平,則表明是外部中斷源X1發(fā)出的中斷請(qǐng)求,執(zhí)行完X1的處理程序后返回主程序)。圖5-8中斷和查詢相結(jié)合的外部中斷源擴(kuò)展電路
【例5-8】用單片機(jī)監(jiān)測(cè)X1、X2、X3三個(gè)外部設(shè)備在運(yùn)行過(guò)程中是否有故障。無(wú)論哪個(gè)設(shè)備出現(xiàn)故障,都必須立刻處理,所以采用中斷系統(tǒng)來(lái)檢測(cè)這三個(gè)外部設(shè)備。當(dāng)系統(tǒng)無(wú)故障時(shí),3個(gè)故障源輸入端X1~X3全為低電平,對(duì)應(yīng)的3個(gè)顯示燈全滅;當(dāng)某個(gè)設(shè)備出現(xiàn)故障時(shí),其對(duì)應(yīng)的輸入端由低電平轉(zhuǎn)為高電平,從而引起MCS51單片機(jī)中斷,中斷服務(wù)程序的任務(wù)是判定故障,并點(diǎn)亮對(duì)應(yīng)的發(fā)光二極管。實(shí)現(xiàn)上述功能的電路如圖5-9所示。其中,發(fā)光二極管ED1~LED3對(duì)應(yīng)3個(gè)輸入端X1~X3。3個(gè)故障源通過(guò)或非門與89C51的外部中斷0的輸入端相連,同時(shí),X1~X3與P1口的P1.0~P1.2引腳相連,3個(gè)發(fā)光二極管LED1~LED3分別與P1口的P1.3~P1.5相連。圖5-9多故障檢測(cè)電路
分析:根據(jù)題意,在進(jìn)行故障檢測(cè)之前,要先對(duì)P1口進(jìn)行處理,不僅要使二極管不發(fā)光,還要保證外部中斷0通道暢通,能夠隨時(shí)接收中斷,為實(shí)現(xiàn)該功能可以將P1口與11111000B相或。進(jìn)入中斷后,要利用查詢方式對(duì)中斷源進(jìn)行判斷,處理方法為:若P1.0為高電平,說(shuō)明X1有故障,則將P1.3位清0,使二極管LED1導(dǎo)通發(fā)光,若P1.0為低電平,說(shuō)明X1無(wú)故障(P1.0=0),繼續(xù)判斷P1.1;若X2有故障(P1.1=1),則將P1.4位清0,使二極管LED2導(dǎo)通發(fā)光,否則繼續(xù)判斷P1.2;若X3有故障(P1.2=1),則將P1.5位清0,使二極管LED3導(dǎo)通發(fā)光,否則,程序繼續(xù)返回到主程序。
5.2.1定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)和工作原理
1.定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)
定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)如圖5-10所示。
由圖5-10可知,T0由2個(gè)8位特殊功能寄存器TH0和TL0組成,T1由TH1和TL1組成。T0和T1的工作方式通過(guò)特殊功能寄存器TMOD來(lái)設(shè)定,T0和T1的啟動(dòng)及停止由特殊功能寄存器TCON來(lái)控制。
5.2單片機(jī)的定時(shí)器/計(jì)數(shù)器圖5-10定時(shí)器/計(jì)數(shù)器的基本結(jié)構(gòu)
2.定時(shí)器/計(jì)數(shù)器的工作原理
圖5-11所示是定時(shí)器/計(jì)數(shù)器的工作原理圖。
由圖5-11可知,定時(shí)器/計(jì)數(shù)器的核心部件是加1計(jì)數(shù)器。根據(jù)輸入脈沖的來(lái)源不同,定時(shí)器/計(jì)數(shù)器分為兩種工作模式:定時(shí)模式和計(jì)數(shù)模式。
當(dāng)T0或T1設(shè)置為定時(shí)模式時(shí),定時(shí)器對(duì)單片機(jī)內(nèi)部的機(jī)器周期(系統(tǒng)內(nèi)部振蕩器輸出脈沖的12分頻)進(jìn)行自動(dòng)加1計(jì)數(shù),將計(jì)數(shù)值乘以機(jī)器周期就得到了定時(shí)時(shí)間。圖5-11定時(shí)器/計(jì)數(shù)器的工作原理圖
當(dāng)T0或T1設(shè)置為計(jì)數(shù)模式時(shí),計(jì)數(shù)器對(duì)來(lái)自輸入引腳T0(P3.4)或T1(P3.5)的負(fù)脈沖信號(hào)進(jìn)行計(jì)數(shù)。為確保電平信號(hào)在變化之前至少被采樣一次,要求輸入的高電平和低電平信號(hào)至少應(yīng)維持一個(gè)完整的機(jī)器周期,即它至少需要兩個(gè)機(jī)器周期來(lái)識(shí)別一個(gè)高電平到低電平的跳變,所以計(jì)數(shù)模式時(shí)的計(jì)數(shù)頻率最高為f
osc(晶振))的1/24。
定時(shí)器/計(jì)數(shù)器無(wú)論工作在定時(shí)模式還是計(jì)數(shù)模式,對(duì)輸入脈沖的計(jì)數(shù)都不占用CPU的時(shí)間,除非定時(shí)器或計(jì)數(shù)器溢出,才能中斷CPU的當(dāng)前操作。定時(shí)器/計(jì)數(shù)器計(jì)滿溢出時(shí)硬件令TCON中的TF0或TF1置1,可以采用中斷方式加以響應(yīng),也可以采用查詢方式來(lái)處理。由此可見(jiàn),定時(shí)器/計(jì)數(shù)器是單片機(jī)中效率高而且工作靈活的部件。
定時(shí)器本質(zhì)上是一個(gè)計(jì)數(shù)器,由于初值可以根據(jù)需要設(shè)定,實(shí)際計(jì)數(shù)值就可控,則定時(shí)時(shí)間也是可控的。
5.2.2定時(shí)器/計(jì)數(shù)器的控制與狀態(tài)
MCS-51單片機(jī)中有兩個(gè)特殊功能寄存器與定時(shí)器/計(jì)數(shù)器有關(guān),其中TMOD用于設(shè)置定時(shí)器/計(jì)數(shù)器的工作模式和工作方式,TCON用于控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)、停止和中斷請(qǐng)求。
1.工作方式寄存器TMOD
工作方式寄存器TMOD用于選擇定時(shí)器/計(jì)數(shù)器的工作模式和工作方式,是不可位尋址的特殊功能寄存器,其字節(jié)地址為89H。TMOD的格式如下:
由此格式看出,TMOD的8位分為兩組,其中高4位用于控制T1,低4位用于控制T0。TMOD中各位的含義如下:
①M(fèi)1、M0:工作方式選擇位。定時(shí)器/計(jì)數(shù)器有4種工作方式,由M1、M0進(jìn)行設(shè)置,如表5-4所示。
2.中斷請(qǐng)求標(biāo)志寄存器TCON
設(shè)定好TMOD后,定時(shí)器/計(jì)數(shù)器還不能進(jìn)入工作狀態(tài),還必須通過(guò)設(shè)置TCON中的某些位來(lái)啟動(dòng)它。TCON的低4位與外部中斷設(shè)置有關(guān),TCON的高4位用于控制定時(shí)
器/計(jì)數(shù)器的啟動(dòng)、停止和中斷申請(qǐng)。TCON格式如下:
5.2.3定時(shí)器/計(jì)數(shù)器的工作方式
MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器共有4種工作方式(方式0、1、2、3),T0和T1均可以設(shè)置在前3種工作方式(方式0、1、2),且T0和T1的工作原理相同,方式0、1、2對(duì)T0和T1均有效,只有T0才可以設(shè)置為工作方式3。下面以T0為例介紹定時(shí)器/計(jì)數(shù)器的4種工作方式。
1.方式0
當(dāng)TMOD的M1M0為00時(shí),定時(shí)器/計(jì)數(shù)器工作于方式0,如圖5-12所示。
方式0為13位計(jì)數(shù)器,由TL0的低5位和TH0的高8位組成。當(dāng)TL0的低5位計(jì)滿溢出時(shí)向TH0進(jìn)位,當(dāng)TH0計(jì)滿溢出時(shí),將中斷標(biāo)志位TF0置位,并向CPU申請(qǐng)中
斷。該方式是為兼容MCS48而設(shè)的,在實(shí)際應(yīng)用中幾乎不再使用。
方式0和方式1的結(jié)構(gòu)與操作基本相同,其差別僅僅在于計(jì)數(shù)的位數(shù)不同。方式0為13位計(jì)數(shù)器,而方式1為16位計(jì)數(shù)器,詳細(xì)內(nèi)容參考方式1。圖5-12方式0的邏輯結(jié)構(gòu)框圖
2.方式1
當(dāng)TMOD的M1M0為01時(shí),定時(shí)器/計(jì)數(shù)器工作于方式1,如圖5-3所示。
方式1為16位計(jì)數(shù)器。T0工作在方式1時(shí),由TL0的低8位和TH0的高8位組成。
當(dāng)TL0的低8位計(jì)滿溢出時(shí)向TH0進(jìn)位,當(dāng)TH0計(jì)滿溢出時(shí),將中斷標(biāo)志位TF0置位,并向CPU申請(qǐng)中斷。
當(dāng)C/T=0時(shí),多路轉(zhuǎn)換開(kāi)關(guān)MUX接振蕩器12分頻的輸出端,即T0工作于定時(shí)模式,對(duì)機(jī)器周期進(jìn)行計(jì)數(shù)。計(jì)數(shù)值乘以機(jī)器周期等于定時(shí)時(shí)間。圖5-13方式1的邏輯結(jié)構(gòu)框圖
3.方式2
當(dāng)TMOD的M1M0為10時(shí),定時(shí)器/計(jì)數(shù)器工作于方式2,如圖5-14所示。
方式2是具有自動(dòng)重裝初值功能的8位計(jì)數(shù)器。
方式0和方式1計(jì)數(shù)溢出后,TH0和TL0的初值均變?yōu)?,所以在編制循環(huán)程序時(shí)需要反復(fù)設(shè)定初值,既不方便又影響定時(shí)精度。方式2將TL0作為8位計(jì)數(shù)器,TH0僅保
存計(jì)數(shù)初值而不參與計(jì)數(shù)。初始化時(shí)TL0和TH0的值均是初值,且相等。當(dāng)TL0計(jì)滿溢出時(shí),CPU在將溢出中斷請(qǐng)求標(biāo)志位TF0置“1”的同時(shí)自動(dòng)將TH0中的初值重新裝入
TL0中,使TL0從初值重新開(kāi)始計(jì)數(shù)。
方式2省去了重裝初值的時(shí)間,可以實(shí)現(xiàn)精確的定時(shí)。其中T1采用方式2,常用于產(chǎn)生單片機(jī)串行通信中的波特率,并且只有T1才能產(chǎn)生波特率信號(hào)。圖5-14方式2的邏輯結(jié)構(gòu)框圖
4.方式3
當(dāng)TMOD的M1M0為11時(shí),定時(shí)器/計(jì)數(shù)器工作于方式3,如圖5-15所示。圖5-15方式3的邏輯結(jié)構(gòu)框圖
方式3只適用于T0,當(dāng)T0工作在方式3時(shí),TL0和TH0成為兩個(gè)獨(dú)立的8位計(jì)數(shù)器。TL0使用T0的所有控制位:C/T、GATE、TR0、TF0和INT0,它的操作與方式0和方式1類似。TH0要借用T1的運(yùn)行控制位TR1和溢出標(biāo)志位TF1,且只能作8位定時(shí)器,即只能對(duì)機(jī)器周期進(jìn)行計(jì)數(shù),而不能對(duì)外部脈沖進(jìn)行計(jì)數(shù)。
當(dāng)T0工作在方式3時(shí),T1可以工作在方式0、1、2。因?yàn)樗荒苤梦籘F1,所以只能用于不需要中斷控制的場(chǎng)合,或用作串行口的波特率發(fā)生器。通常,當(dāng)T1用作串行口波特率發(fā)生器時(shí),T0才定義為方式3,以增加一個(gè)8位計(jì)數(shù)器。
方式1和方式2是實(shí)際應(yīng)用中最常用的兩種方式,應(yīng)重點(diǎn)掌握。
5.2.4定時(shí)器/計(jì)數(shù)器的初值計(jì)算和初始化
1.計(jì)數(shù)初值的計(jì)算
MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器具有4種工作方式,因?yàn)椴煌ぷ鞣绞较掠?jì)數(shù)器的位數(shù)不同,所以計(jì)數(shù)的最大值也不同。假設(shè)當(dāng)前工作方式下的最大計(jì)數(shù)值用M表示,則各
種工作方式的最大計(jì)數(shù)值如下:
MCS-51單片機(jī)采用特殊功能寄存器TH0和TL0來(lái)存放定時(shí)器T0的計(jì)數(shù)初值,TH1和TL1來(lái)存放定時(shí)器T1的計(jì)數(shù)初值。T0和T1從初值開(kāi)始以“加1”方式進(jìn)行計(jì)數(shù),
當(dāng)計(jì)數(shù)值達(dá)到最大值時(shí)會(huì)產(chǎn)生溢出,并產(chǎn)生中斷申請(qǐng)。由于計(jì)數(shù)初值可以由軟件設(shè)定,所以定時(shí)時(shí)間是可控的。假設(shè)用X表示計(jì)數(shù)初值,N表示能產(chǎn)生溢出的計(jì)數(shù)值,可得計(jì)數(shù)模
式下,計(jì)數(shù)值N與計(jì)數(shù)初值X之間的關(guān)系式:
2.定時(shí)器/計(jì)數(shù)器的初始化
由于定時(shí)器/計(jì)數(shù)器是可編程的,因此在利用定時(shí)器/計(jì)數(shù)器進(jìn)行定時(shí)或計(jì)數(shù)之前,要先通過(guò)軟件對(duì)其進(jìn)行初始化。初始化的步驟如下:
(1)根據(jù)要求為工作方式寄存器TMOD賦值,以設(shè)定T0和T1的工作模式和工作方式。
(2)根據(jù)需要計(jì)算計(jì)數(shù)初值,并將初值送入TH0、TL0、TH1、TL1。
(3)根據(jù)需要給IE和IP賦值,以開(kāi)放相應(yīng)中斷和設(shè)置中斷優(yōu)先級(jí)。
(4)設(shè)置TCON中的TR0、TR1,以啟動(dòng)或禁止T0、T1的運(yùn)行。
5.2.5定時(shí)器/計(jì)數(shù)器的應(yīng)用
1.初值計(jì)算和初始化
【例5-9】假設(shè)定時(shí)時(shí)間為5ms,單片機(jī)的主頻(晶振頻率)為6MHz,使用T0,求方式1的計(jì)數(shù)初值。
其中低8位3CH送入TL0,高8位F6H送入TH0。
【例5-10】假設(shè)T0為定時(shí)模式,按方式2工作,TH0
、TL0的初值均為0FH,且允許T0中斷,試對(duì)該定時(shí)器進(jìn)行初始化。
2.計(jì)數(shù)應(yīng)用
【例5-11】在某工廠的一條自動(dòng)飲料生產(chǎn)線上,每生產(chǎn)12瓶飲料,就需要發(fā)出一個(gè)包裝控制信號(hào)自動(dòng)執(zhí)行裝箱操作,試編寫程序完成這一計(jì)數(shù)任務(wù)。假設(shè)用T0完成計(jì)數(shù),
用P1.0發(fā)出控制信號(hào),包裝流水線示意圖如圖5-16所示。
分析:(1)選擇工作方式:因?yàn)橛?jì)數(shù)值為12,所以選用T0的工作方式2來(lái)完成此任務(wù)。假設(shè)此時(shí)T1不工作,則方式控制字為TMOD=06H。圖5-16包裝流水線示意圖
(2)求計(jì)數(shù)初值X:
因此,TL0和TH0的初值都為F4H。
本題可以采用查詢和中斷兩種方式進(jìn)行編程,如圖5-17所示。無(wú)論采用哪種方式,都要先按照定時(shí)器/計(jì)數(shù)器的初始化步驟對(duì)相關(guān)特殊功能寄存器進(jìn)行設(shè)置,并且當(dāng)計(jì)數(shù)值達(dá)到要求后,對(duì)P1.0進(jìn)行設(shè)置。本例假設(shè)P1.0為高電平時(shí)發(fā)出控制信號(hào),且該控制信號(hào)只要持續(xù)2個(gè)機(jī)器周期以上即可。
需要注意的是:
①若采用中斷方式進(jìn)行控制,一旦計(jì)數(shù)值達(dá)到要求,計(jì)數(shù)器便產(chǎn)生溢出,從而進(jìn)入中斷服務(wù)程序,同時(shí)硬件自動(dòng)將中斷標(biāo)志位TF0清0。
②若采用查詢方式進(jìn)行控制,程序需要不斷對(duì)中斷標(biāo)志位TF0進(jìn)行查詢:若TF0為0,計(jì)數(shù)器未溢出,則程序在當(dāng)前指令循環(huán);若TF0為1,計(jì)數(shù)器溢出,則執(zhí)行下面的程序,此時(shí)T0雖然發(fā)出中斷請(qǐng)求,但因?yàn)镮E中的相應(yīng)開(kāi)關(guān)斷開(kāi),所以該中斷請(qǐng)求不會(huì)得到響應(yīng),為此需要利用軟件將TF0清0。圖5-17例5-11的流程圖
【例5-12】利用定時(shí)器T1的方式2對(duì)外部信號(hào)計(jì)數(shù),要求每計(jì)滿100個(gè)數(shù)將P1.7取反。
分析:(1)確定方式字:假設(shè)此時(shí)T0不工作,則T1工作在方式2的控制字為TMOD=60H。
(2)計(jì)算初值:
因此,TL1和TH1的初值都為9CH。
本例與例5-11類似,都是實(shí)現(xiàn)計(jì)數(shù)功能,所以實(shí)現(xiàn)方法類似,既可以采用中斷方式又可以采用查詢方式,這里只介紹中斷方式,查詢方式的編程方法可以參考例5-11。
3.定時(shí)應(yīng)用
【例5-13】假設(shè)系統(tǒng)時(shí)鐘頻率為6MHz,現(xiàn)欲利用定時(shí)器T0每隔1ms產(chǎn)生寬度為1個(gè)機(jī)器周期的正脈沖,并由P1.0送出,如圖5-18所示,請(qǐng)編程實(shí)現(xiàn)該功能。圖5-18例5-12輸出波形圖
分析:(1)選擇工作方式:因?yàn)門cy=12/fosc=2ms,由定時(shí)器各種工作方式的特性,可計(jì)算出方式0最長(zhǎng)可定時(shí)16.
384ms,方式1最長(zhǎng)可定時(shí)131.072ms,方式2、3最長(zhǎng)可定
時(shí)512ms。
本例中定時(shí)時(shí)間t=1ms,故選擇T0的工作方式1來(lái)完成此任務(wù)。假設(shè)此時(shí)T1不工作,則方式控制字為TMOD=01H。
(2)計(jì)算初值X:
因此T0的初值為TH0=0FEH,TL0=0CH。
本例與例5-11類似,也可以采用查詢和中斷兩種方式進(jìn)行編程,處理過(guò)程也大致相同,與例5-11最大的不同之處在于本例的定時(shí)器/計(jì)數(shù)器將工作于定時(shí)模式。
【例5-14】設(shè)時(shí)鐘頻率為12MHz,編程實(shí)現(xiàn)用定時(shí)器T0產(chǎn)生50Hz的方波,并由P1.0輸出此方波。
分析:(1)選擇工作方式:因?yàn)門cy=12/fosc=1ms,由定時(shí)器各種工作方式的特性,可計(jì)算出方式0最長(zhǎng)可定時(shí)8.912ms,方式1最長(zhǎng)可定時(shí)65.536ms,方式2、3最長(zhǎng)可定時(shí)256ms。
因?yàn)?0Hz方波的周期為20ms,所以只要每隔10ms變化一次P1.0的電平,就可獲得50Hz的方波,即本例的定時(shí)時(shí)間為10ms,所以選擇T0的工作方式1來(lái)完成此任務(wù)。假設(shè)此時(shí)T1不工作,則方式控制字為TMOD=01H。
(2)計(jì)算初值X:
因此T0的初值為TH0=0D8H,TL0=0F0H。
【例5-15】假設(shè)系統(tǒng)時(shí)鐘頻率為fosc=3MHz,利用定時(shí)器編程實(shí)現(xiàn)如下功能:從P1.7引腳輸出一個(gè)脈沖波形,高電平持續(xù)50ms,低電平持續(xù)150ms,如圖5-19所示。圖5-19例5-15的波形圖
分析1:因?yàn)楦唠娖胶偷碗娖匠掷m(xù)時(shí)間不同,考慮用兩個(gè)定時(shí)器/計(jì)數(shù)器T0和T1。因?yàn)門cy=12/fosc=4ms,考慮到定時(shí)時(shí)間較長(zhǎng),只能選擇方式1,最大計(jì)數(shù)值是65536,最大
定時(shí)時(shí)間是65536×4ms=262ms。兩個(gè)時(shí)間均可以用一次中斷來(lái)定時(shí)。計(jì)數(shù)初值分別是
T0定時(shí)50ms,則TH0=CFH,TL0=2CH;T1定時(shí)150ms,則TH1=6DH,TL1=84H。
①在初始化程序中,對(duì)T0賦初值,啟動(dòng)T0,關(guān)閉T1,P1.7置“1”,T0開(kāi)始第一個(gè)50ms定時(shí)。
②當(dāng)定時(shí)50ms到時(shí),進(jìn)入中斷T0INT,對(duì)T1賦初值,啟動(dòng)T1,關(guān)閉T0,P1.7置“0”,T1開(kāi)始第一個(gè)150ms定時(shí)。
③當(dāng)定時(shí)150ms到時(shí),進(jìn)入中斷T1INT,對(duì)T0賦初值,啟動(dòng)T0,關(guān)閉T1,P1.7置“1”,T0開(kāi)始第二個(gè)50ms定時(shí)。
分析2:因?yàn)?50ms是50ms的3倍,可以用一個(gè)定時(shí)器/計(jì)數(shù)器T0。選擇方式1,最大計(jì)數(shù)值是65536,最大定時(shí)時(shí)間是65536×4ms=262ms。定時(shí)時(shí)間50ms。計(jì)數(shù)初值是
X=216-50ms/4ms=65536-12500=53036=CF2CH
則TH0=CFH,TL0=2CH。
設(shè)定一個(gè)程序計(jì)數(shù)器R7,每次中斷到來(lái)時(shí)+1,然后判斷是否“=1”或“=4”,分別對(duì)應(yīng)50ms和150m
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 少兒美術(shù)培訓(xùn)內(nèi)容
- 長(zhǎng)卷西游記課件
- 廉政培訓(xùn)學(xué)習(xí)心得體會(huì)
- 民族風(fēng)情繪畫課件
- 高考生物核心考點(diǎn)考前沖刺 人類活動(dòng)對(duì)生態(tài)環(huán)境的影響(含解析)
- 中班健康安全教案《預(yù)防傳染病》
- 專業(yè)眼科測(cè)試題及答案
- 幼兒園小班美術(shù)教案五彩的氣球
- java后端開(kāi)發(fā)sql面試題及答案
- 2025年石蠟項(xiàng)目申請(qǐng)報(bào)告模板
- MOOC 細(xì)胞生物學(xué)實(shí)驗(yàn)-河南大學(xué) 中國(guó)大學(xué)慕課答案
- 可可西里守護(hù)神杰桑·索南達(dá)杰事跡學(xué)習(xí)
- 機(jī)房施工方案及技術(shù)措施
- 員工培訓(xùn)矩陣表
- 摜蛋大賽招商方案
- 電影特效制作課件
- 304不銹鋼管焊接工藝
- 網(wǎng)絡(luò)安全教育安全教育
- 醫(yī)療器械經(jīng)銷商和代理商法規(guī)義務(wù)
- 糖尿病專科護(hù)士培訓(xùn)學(xué)習(xí)匯報(bào)課件
- 心理健康教育C證面試20個(gè)題目參考答案
評(píng)論
0/150
提交評(píng)論