




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