《微控制器原理及應(yīng)用技術(shù)》課件第5章_第1頁
《微控制器原理及應(yīng)用技術(shù)》課件第5章_第2頁
《微控制器原理及應(yīng)用技術(shù)》課件第5章_第3頁
《微控制器原理及應(yīng)用技術(shù)》課件第5章_第4頁
《微控制器原理及應(yīng)用技術(shù)》課件第5章_第5頁
已閱讀5頁,還剩223頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章中斷、定時/計數(shù)器與串行口5.1中斷

5.2定時/計數(shù)器

5.3串行接口教學(xué)提示:本章主要介紹MCS51系列單片機的內(nèi)部標(biāo)準(zhǔn)功能單元中斷系統(tǒng)、定時/計數(shù)器和串行通信口。以這些片內(nèi)標(biāo)準(zhǔn)功能模塊為基礎(chǔ),通過簡化功能部件或新增其它功能部件,即可形成8051系列單片機中的高檔機型和低檔機型。所以,掌握本章內(nèi)容對了解MCS51系列單片機的原理和應(yīng)用是至關(guān)重要的。

教學(xué)要求:MCS51系列單片機片內(nèi)部標(biāo)準(zhǔn)功能單元主要包括中斷系統(tǒng)、定時/計數(shù)器和串行通信口等。通過本章的學(xué)習(xí),使學(xué)生掌握各功能模塊特有的邏輯結(jié)構(gòu)和基本功能,從而進一步了解各功能模塊在實際領(lǐng)域中的應(yīng)用,為后面章節(jié)的學(xué)習(xí)奠定重要的基礎(chǔ)。

中斷技術(shù)是計算機的重要技術(shù)之一。計算機引入中斷技術(shù),一方面可以實時處理控制現(xiàn)場瞬時發(fā)生的事件,提高計算機處理故障的能力;另一方面,可以解決CPU和外設(shè)之間的速度匹配問題,提高CPU的效率。計算機的中斷技術(shù),使計算機的工作更加靈活、效率更高。在某種條件下,可以說中斷系統(tǒng)功能的強弱是衡量計算機性能的重要技術(shù)指標(biāo)之一。5.1中斷5.1.1中斷系統(tǒng)概述

計算機與外設(shè)交換信息時,存在高速的CPU和低速的外設(shè)之間的矛盾。若采用查詢方式,不但占用CPU的操作時間,還降低了響應(yīng)速度。另外,一般還要求CPU能夠?qū)ν獠侩S機或定時出現(xiàn)的緊急事件做到及時響應(yīng)處理。為解決此類突發(fā)性問題,引入了“中斷”概念。

1.中斷的概念

在日常生活中經(jīng)常會出現(xiàn)類似中斷的現(xiàn)象,比如在課堂教學(xué)中,當(dāng)老師正在按備課教案給同學(xué)們講課時,課堂中任何一個同學(xué)都可能突然提出問題,老師如果認(rèn)為有必要馬上回答這個問題,他會暫停正在講授的課程內(nèi)容,解答同學(xué)的問題,問題解決后,老師接著剛才的內(nèi)容繼續(xù)講授課程。這樣一個過程實質(zhì)上就是一個中斷過程??梢赃@樣來理解:老師按教案講課的是“主程序”;提問的同學(xué)是“中斷源”;提問打斷老師正常授課的過程可稱為“中斷請求”;老師認(rèn)為有必要馬上回答這個問題,可稱為“中斷允許”;暫停正在講授的課程內(nèi)容解答同學(xué)的疑問,可稱為“中斷響應(yīng)”;解答疑問的過程可稱為“中斷處理”;解答完疑問繼續(xù)講授課程內(nèi)容可稱為“中斷返回”。

相應(yīng)地,單片機的“中斷”是指單片機在運行某一段程序過程中,由于單片機系統(tǒng)內(nèi)、外的某種原因,有必要中止原程序的執(zhí)行,而去執(zhí)行相應(yīng)的處理程序,待處理結(jié)束后,再返回來繼續(xù)執(zhí)行被中斷程序的過程。一個完整的中斷處理的基本過程應(yīng)包括:中斷請求、中斷響應(yīng)、中斷處理和中斷返回。單片機中實現(xiàn)中斷功能的部件稱為中斷系統(tǒng),也就是中斷管理系統(tǒng)。產(chǎn)生中斷的請求源稱為中斷源,中斷源向CPU發(fā)出的請求稱為中斷申請,CPU暫停當(dāng)前的工作轉(zhuǎn)去處理中斷源事件稱為中斷響應(yīng),中斷的地方稱為斷點,對中斷源事件的處理過程稱為中斷服務(wù),事件處理完畢CPU返回到被中斷的地方稱為中斷返回。

在上面課堂教學(xué)的例子中,如果把教學(xué)、答疑和了解教學(xué)效果都定義成課堂教學(xué)的任務(wù),顯然,按照一般的純授課模式是沒有辦法完成的,逐個去問學(xué)生了解教學(xué)的效果或存在什么疑問雖然可行,但效率太低。通過引入課堂提問機制,可以實時地了解學(xué)生存在的疑問和教學(xué)的效果,完成教學(xué)、答疑和了解教學(xué)效果的任務(wù)。對于單片機也一樣,有了中斷機制,單片機在實際應(yīng)用中將可以同時面對多項任務(wù),快速響應(yīng)并及時處理突發(fā)事件,使單片機具備實時處理的能力。尤其是當(dāng)外部設(shè)備速度較慢時,如果不采用中斷技術(shù),CPU將處于不斷等待狀態(tài),效率極低;采用中斷方式,CPU將只在外部設(shè)備提出請求時才中斷正在執(zhí)行的任務(wù),來執(zhí)行外部設(shè)備請求任務(wù),這樣極大地提升了CPU的使用效率。

2.中斷的任務(wù)

單片機可以接受的中斷申請一般不止一個,對于這些不止一個的中斷源進行管理,就是中斷系統(tǒng)的任務(wù)。這些任務(wù)一般包括以下幾方面。

1)開中斷或關(guān)中斷

中斷的開放或關(guān)閉可以通過指令對相關(guān)特殊功能寄存器的操作來實現(xiàn),這是CPU能否接收中斷申請的關(guān)鍵,只有在開中斷的情況下,才有可能接收中斷源申請。

2)中斷排隊

一般單片機系統(tǒng)都允許有多個中斷源,當(dāng)幾個中斷源同時向CPU請求中斷服務(wù)時,就出現(xiàn)了CPU優(yōu)先響應(yīng)哪一個中斷請求的問題。為此系統(tǒng)必須根據(jù)中斷源的輕重緩急進行排隊,具體實現(xiàn)方法為將各個中斷源分成若干個優(yōu)先級,再按如下原則處理:

①不同級的中斷源同時申請中斷時,先響應(yīng)高級,后響應(yīng)低級。

②同級的中斷源同時申請中斷時,按事先規(guī)定,即默認(rèn)的優(yōu)先順序。③處理低級中斷又收到高級中斷請求時,停止低級轉(zhuǎn)去先執(zhí)行高級。

④處理高級中斷又收到低級中斷請求時,不響應(yīng)它,等待做完高級處理后再處理低級中斷。

因此,面對系統(tǒng)中多個中斷源,同時申請中斷,CPU首先響應(yīng)優(yōu)先級別高的中斷申請,服務(wù)結(jié)束后再響應(yīng)級別低的中斷源。當(dāng)CPU響應(yīng)某一中斷請求并正在運行該中斷服務(wù)程序時,若有優(yōu)先級高的中斷源發(fā)出中斷申請,CPU就中斷正在處理的低級中斷服務(wù)程序,保留斷點,去響應(yīng)高級別的中斷申請,待完成了高級中斷服務(wù)程序后,再繼續(xù)從斷點處執(zhí)行被打斷的低級中斷服務(wù)程序,這就是中斷嵌套。

注意:當(dāng)發(fā)生中斷嵌套時,在中斷服務(wù)子程序編寫中,必須注意采用堆棧或其它方式對用戶數(shù)據(jù)進行保護。

3)中斷響應(yīng)

當(dāng)某一個中斷源發(fā)出中斷申請時,CPU能決定是否響應(yīng)這個中斷請求(當(dāng)CPU在執(zhí)行更急、更重要的工作時,可以暫不響應(yīng)中斷)。若允許響應(yīng)這個中斷請求,CPU必須在現(xiàn)行的指令執(zhí)行完后,把斷點處的PC值(即下一條應(yīng)執(zhí)行的指令地址)壓入堆棧保存起來,稱為保護斷點,這是由硬件自動完成的。同時,用戶在編程時要注意把有關(guān)的寄存器內(nèi)容和狀態(tài)標(biāo)志位壓入堆棧保存起來,這稱為保護現(xiàn)場。保護斷點和現(xiàn)場之后即可執(zhí)行中斷服務(wù)程序,執(zhí)行完畢,需恢復(fù)原保留的寄存器的內(nèi)容和標(biāo)志位的狀態(tài),稱為恢復(fù)現(xiàn)場,并執(zhí)行中斷返回指令,中斷返回指令的功能為恢復(fù)斷點處的PC值(稱為恢復(fù)斷點),使CPU返回斷點,繼續(xù)執(zhí)行主程序。完整的中斷過程如圖5.1所示。

圖5.1中斷的過程

4)中斷請求的撤除

在響應(yīng)中斷申請以后,返回主程序之前,中斷請求應(yīng)該撤除。否則,就等于中斷申請依然存在,這將影響對其它中斷申請的響應(yīng)。中斷請求的撤除與中斷返回指令并不是同一個過程,不同的中斷系統(tǒng)中斷請求的撤除方法不同。5.1.2MCS51單片機的中斷系統(tǒng)

為了保證系統(tǒng)安全可靠、使用靈活,51系列單片機的中斷系統(tǒng)采用了多級管理的機制。為了解決多級嵌套問題,51系列單片機還設(shè)置了兩級中斷優(yōu)先級。51系列單片機的中斷系統(tǒng)由中斷源、中斷標(biāo)志位寄存器、中斷允許寄存器(IE)、中斷優(yōu)先級寄存器(IP)及其它輔助電路組成,如圖5.2所示。

圖5.2MCS51的中斷系統(tǒng)由圖5.2可知,一個中斷的產(chǎn)生受到中斷標(biāo)志位寄存器、中斷允許寄存器(IE)、中斷優(yōu)先級寄存器(IP)的控制。中斷標(biāo)志位寄存器中有6個標(biāo)志位,對應(yīng)6個中斷請求信號,若收到有效的請求信號,則對應(yīng)標(biāo)志位將硬件置“1”。中斷允許寄存器(IE)中的每一位對應(yīng)不同的中斷源,而且每一位均可由用戶軟件設(shè)定為“允許(1)”或“禁止(0)”中斷。值得注意的是,欲使某中斷源允許中斷,設(shè)置IE對應(yīng)位的同時還必須設(shè)置IE中的最高位EA,使EA=1,即CPU開放中斷,EA相當(dāng)于中斷允許的“總開關(guān)”。至于中斷優(yōu)先級寄存器(IP),該寄存器的每一位也同樣對應(yīng)不同的中斷源,其復(fù)位清“0”將會把對應(yīng)中斷源設(shè)置為低優(yōu)先級中斷;置“1”將把對應(yīng)中斷源設(shè)置為高優(yōu)先級。例如,對于外部中斷請求0和定時器T0中斷來說,若要使T0中斷的優(yōu)先級高于外部中斷請求0中斷,則可將PX0清“0”,使之處于低優(yōu)先級,而將PT0置“1”,使之處于高優(yōu)先級。注意:單片機復(fù)位后,IE和IP均被清0。設(shè)計程序時,在程序初始化中用戶應(yīng)根據(jù)需要將上述寄存器中的相應(yīng)位置“1”或清“0”,來實現(xiàn)允許或禁止優(yōu)先級設(shè)置等內(nèi)容,中斷程序才能正常執(zhí)行。

1.中斷源與中斷請求信號

向單片機發(fā)出中斷請求的來源稱為中斷源。80C51單片機的中斷源共有5個中斷源,分別是2個外部中斷源、2個定時中斷源和1個串行中斷源。

1)外部中斷源

外部中斷是由外部原因(如打印機、鍵盤、控制開關(guān)、外部故障等)引起的,可以通過INT0(P3.2引腳)和INT1(P3.3引腳)兩個固定引腳輸入到單片機,分別稱為外部中斷0(INT0)和外部中斷1(INT1)。

外部中斷請求有兩種信號觸發(fā)方式,即電平觸發(fā)方式和脈沖觸發(fā)方式(邊沿觸發(fā)方式),可通過設(shè)置有關(guān)控制位進行定義。電平觸發(fā)方式的中斷請求是低電平有效,只要單片機在中斷請求輸入端上采樣到有效的低電平時,就觸發(fā)外部中斷。脈沖觸發(fā)方式的中斷請求是脈沖的下降沿有效,單片機在相鄰兩個機器周期中對中斷請求信號進行采樣,如果第一個機器周期采樣到高電平,第二個機器周期采樣為低電平,即得到有效的中斷請求,則觸發(fā)外部中斷

2)定時中斷源

定時中斷是由定時/計數(shù)器溢出引起的中斷,51單片機有兩個定時/計數(shù)器,所以有兩個定時中斷源。當(dāng)定時器對單片機內(nèi)部的定時脈沖進行計數(shù)而發(fā)生溢出時,表明定時時間到,由硬件自動觸發(fā)中斷。當(dāng)定時器對單片機外部的計數(shù)脈沖進行計數(shù)而發(fā)生溢出時,表明計數(shù)次數(shù)到,由硬件自動觸發(fā)中斷。外部計數(shù)脈沖是通過T0和T1引腳輸入到單片機內(nèi)的,T0輸入端是P3.4的第二功能,T1輸入端是P3.5的第二功能。

3)串行中斷源

串行中斷是為串行數(shù)據(jù)傳送的需要而設(shè)置的。每當(dāng)串口接收或發(fā)送完一幀串行數(shù)據(jù)時,就產(chǎn)生一個中斷請求,通知CPU從串口取走數(shù)據(jù)或發(fā)送下一幀數(shù)據(jù)。因為串行中斷請求是在單片機芯片內(nèi)部自動發(fā)生的,所以不需要在芯片上設(shè)置引入端。

2.中斷系統(tǒng)的控制與實現(xiàn)

MCS51單片機提供了5個中斷源,而這5個中斷源的控制與實現(xiàn)是通過MCS51單片機片內(nèi)的4個特殊功能寄存器(SFR)來實現(xiàn)的。這4個控制寄存器分別為:中斷標(biāo)志位(定時/計數(shù)器控制)寄存器(TCON)、中斷標(biāo)志位(串行口控制)寄存器(SCON)、中斷允許寄存器(IE)和中斷優(yōu)先級寄存器(IP)。下面分別介紹和中斷相關(guān)的特殊功能寄存器。

1)中斷標(biāo)志位(定時/計數(shù)器控制)寄存器(TCON)

TCON既稱為中斷標(biāo)志位寄存器,又稱為定時/計數(shù)器控制寄存器,其在RAM區(qū)的地址為88H。它主要用來控制2個定時/計數(shù)器溢出中斷標(biāo)志及2個外部中斷INT0和INT1請求標(biāo)志。與中斷相關(guān)對應(yīng)位如表5.1所示。表5.1TCON控制寄存器對應(yīng)位定義①IT0:外部中斷INT0觸發(fā)方式控制位。當(dāng)IT0=0時,外部中斷0選擇電平觸發(fā)方式(低電平有效);當(dāng)IT0=1時,外部中斷0選擇邊沿觸發(fā)方式(下降沿有效)。

②IE0:外部中斷0中斷請求標(biāo)志位。

當(dāng)IT0=0時,外部中斷0選擇電平觸發(fā)方式(低電平有效)。CPU在每個機器周期的S5P2采樣INT0引腳電平,當(dāng)采樣到低電平時,將IE0置1,向CPU請求中斷。當(dāng)采樣到高電平時,將IE0清“0”。值得一提的是,在電平觸發(fā)方式下,CPU響應(yīng)中斷時,不能自動清除IE0標(biāo)志,IE0的狀態(tài)完全由INT0的狀態(tài)決定。因此,中斷返回前必須撤除INT0引腳的低電平。當(dāng)IT0=1時,外部中斷0選擇邊沿觸發(fā)方式(下降沿有效)。CPU在每個機器周期的S5P2采樣INT0引腳電平,若在連續(xù)兩個機器周期內(nèi),第一次采到INT0引腳為高電平,第二個機器周期采樣到INT0為低電平時,則由硬件置位IE0=1,并向CPU請求中斷。當(dāng)CPU響應(yīng)中斷并轉(zhuǎn)向中斷服務(wù)程序時,IE0標(biāo)志將由硬件自動清0。注意:INT0高低電平應(yīng)至少保持一個機器周期。

對于外部中斷1的IT1、IE1,其觸發(fā)方式的控制和標(biāo)志位管理完全與上述外部中斷0類同,此處不再贅述。

③TF0(或TFl):片內(nèi)定時/計數(shù)器T0(或T1)溢出中斷請求標(biāo)志位。在啟動T0(或T1)計數(shù)后,T0(或T1)即從初值開始加1計數(shù)。當(dāng)計數(shù)值計滿后從最高位產(chǎn)生溢出時,由硬件置位TF0(或TFl),向CPU申請中斷。CPU響應(yīng)中斷時,自動復(fù)位該標(biāo)志位。

④TCON.4和TCON.6:即TR0和TR1,是定時/計數(shù)器啟動控制位,將在定時器一節(jié)詳述,此處不再贅述。

2)中斷標(biāo)志位(串行口控制)寄存器(SCON)

SCON既稱為中斷標(biāo)志位寄存器,又稱為串行口控制寄存器,其在RAM區(qū)的地址為98H。與中斷相關(guān)是SCON的低2位,用來鎖存串行口的接收中斷和發(fā)送中斷標(biāo)志,其定義如表5.2所示。表5.2SCON控制寄存器對應(yīng)位定義

①TI:串行口發(fā)送中斷標(biāo)志。在串行口以方式0發(fā)送時,每當(dāng)發(fā)送完8位數(shù)據(jù)后,由硬件置位TI;若以方式1、2、3發(fā)送時,在發(fā)送停止位的開始時置位TI。TI=1表示串行口發(fā)送器正在向CPU申請中斷。值得注意的是,當(dāng)CPU響應(yīng)該中斷后,轉(zhuǎn)向中斷服務(wù)程序時并不復(fù)位TI,TI必須由用戶在中斷服務(wù)程序中用軟件清“0”。

②RI:串行口接收中斷標(biāo)志。若串行口接收器允許接收并以方式0工作,則每當(dāng)接收到第8位數(shù)據(jù)時置位RI;若以方式1、2、3工作,且SM2=0時,則每當(dāng)接收器接收到停止位的中間時置位RI;當(dāng)串行口以方式2或方式3工作,且SM2=1時,僅當(dāng)接收到的第9位數(shù)據(jù)RB8為1后,同時還要接收到停止位的中間時置位RI。RI為1表示串行口接收器正向CPU申請中斷,同樣RI必須由用戶在中斷服務(wù)程序中清“0”。

單片機復(fù)位后,TCON和SCON寄存器各位被清“0”。

3)中斷允許寄存器(IE)

IE是中斷允許寄存器,其在RAM區(qū)的地址為A8H。CPU對中斷系統(tǒng)所有中斷以及某個中斷源的“允許”和“禁止”都是由它來控制的。IE的狀態(tài)可通過程序由軟件設(shè)定,某位設(shè)定為“1”表示相應(yīng)的中斷源被允許開放。相反,設(shè)定為“0”表示相應(yīng)的中斷源被禁止使用。單片機復(fù)位后,IE寄存器各位被清“0”,禁止所有中斷。IE寄存器的各位定義如表5.3所示。表5.3中斷允許控制寄存器的位定義

4)中斷優(yōu)先級寄存器(IP)

IP是中斷優(yōu)先級寄存器,其在RAM區(qū)的地址為B8H。MCS51單片機中有兩個中斷優(yōu)先級,可實現(xiàn)二級中斷服務(wù)嵌套。每個中斷源的中斷優(yōu)先等級均是由中斷優(yōu)先級寄存器(IP)來決定的。IP中各個位的狀態(tài)可以由軟件設(shè)定,當(dāng)置為“1”時,則相應(yīng)的中斷源被置為高優(yōu)先級。相反,當(dāng)清為“0”時,則相應(yīng)的中斷源被設(shè)為低優(yōu)先級。IP寄存器的各位定義如表5.4所示。表5.4中斷優(yōu)先級寄存器的位定義①PX0:外部中斷0優(yōu)先級控制位。

②PT0:定時器0中斷優(yōu)先級控制位。

③PXl:外部中斷1優(yōu)先級控制位。

④PTl:定時器1中斷優(yōu)先級控制位。

⑤PS:串行口中斷優(yōu)先級控制位。

MCS51單片機中規(guī)定上述對應(yīng)位,當(dāng)設(shè)置為“1”時為高優(yōu)先級,為“0”時為低優(yōu)先級。然而在多個中斷源并存的情況下,面對同一優(yōu)先級中的中斷源,單片機中規(guī)定了其中斷優(yōu)先的排隊問題。同一優(yōu)先級的中斷優(yōu)先排隊,由中斷系統(tǒng)硬件確定,其排列順序如表5.5所示。

3.中斷初始化程序

中斷初始化程序?qū)嵸|(zhì)上就是對TCON、SCON、IE和IP寄存器的管理和控制。只要這些寄存器的相應(yīng)位按照要求進行了狀態(tài)預(yù)置,CPU就會按照人們的意圖對中斷源進行管理和控制。中斷服務(wù)程序一般不獨立編寫,而是包含在主程序中,通過編寫指令對以下5個內(nèi)容進行設(shè)置:

(1)中斷服務(wù)程序入口地址的設(shè)定。

(2)某一中斷源中斷請求的允許與禁止。

(3)對于外部中斷請求,還需進行觸發(fā)方式的設(shè)定。

(4)各中斷源優(yōu)先級別的設(shè)定。

(5)CPU開中斷與關(guān)中斷。

例5.1編寫指令設(shè)置外部中斷0為電平觸發(fā)方式,高優(yōu)先級。

分析:可用兩種方法完成,即用位操作指令和字節(jié)操作指令。

①方法1:用位操作指令完成。

SETBEA;開中斷允許總控制位

SETBEX0;外中斷0開中斷

SETBPX0;外中斷0高優(yōu)先級

CLRIT0;電平觸發(fā)

②方法2:用其它指令也可完成同樣功能。

MOVIE,#81H;同時置位EA和EX0

ORLIP,#01H;置位PX0

ANLTCON,#0FEH;使IT0為0

這兩種方法都可以完成題目規(guī)定的要求。一般情況下,用方法1比較簡單。因為在編制中斷初始化程序時,只需知道控制位的名稱就可以了,而不必記住它們在寄存器中的確切位置。例5.2試編寫設(shè)置外部中斷INT0和串行接口中斷為高優(yōu)先級,外部中斷INT1為低優(yōu)先級,并屏蔽T0和T1中斷請求的初始化程序段。

分析:根據(jù)題目要求,只要能將中斷請求優(yōu)先級寄存器IP的第0、4位置“1”,其余位置“0”,將中斷請求允許寄存器的第0、2、4、7位置“l(fā)”,其余位置“0”就可以了。

編程如下:

ORG0000H

SJMPMAIN

ORG0003H;外部中斷0的入口地址

LJMPINT0INT;跳轉(zhuǎn)到外部中斷0的中斷服務(wù)程序

ORG0013H;外部中斷1的入口地址

LJMPINT1INT;跳轉(zhuǎn)到外部中斷1的中斷服務(wù)程序

ORG0023H;串口中斷的入口地址

LJMPSIOINT;跳轉(zhuǎn)到串口中斷的中斷服務(wù)程序

ORG0030H

MAIN:…;編寫主程序

MOVIP,#00010001B;設(shè)外部中斷INT0和串行口中斷為高優(yōu)先級

MOVIE,#10010101B;允許INT0、INT1串行口中斷,開CPU中斷5.1.3中斷處理過程

不同的計算機,在具體的中斷處理過程上存在一些細小的差別,但是,基本處理過程是相同的。一個完整的中斷處理的基本過程應(yīng)該包括:中斷請求、中斷響應(yīng)、中斷處理以及中斷返回。中斷處理過程如圖5.3所示。

圖5.3中斷處理不同的計算機由于中斷系統(tǒng)的硬件結(jié)構(gòu)不完全相同,因而中斷響應(yīng)的方式有所不同。在此,僅以MCS51單片機為例來介紹中斷處理的過程。

1.中斷請求

中斷請求是中斷源(或者通過接口電路)向CPU發(fā)出請求中斷的信號,要求CPU中斷原來執(zhí)行的程序,轉(zhuǎn)去為它服務(wù)。一般單片機提供有多條中斷請求線,當(dāng)中斷源有服務(wù)要求時,可通過中斷請求線向CPU發(fā)出信號,請求CPU中斷。中斷請求信號可以是電平信號,也可以是脈沖信號。中斷請求信號應(yīng)該一直保持到CPU做出反應(yīng)為止。

2.中斷響應(yīng)

中斷響應(yīng)是在滿足CPU的中斷響應(yīng)條件之后,CPU對中斷源中斷請求的回答。在這一階段,CPU要完成中斷服務(wù)以前的所有準(zhǔn)備工作,包括保護斷點和把程序轉(zhuǎn)向中斷服務(wù)程序的入口地址(通常稱為矢量地址)。

單片機在運行時,并不是任何時刻都會響應(yīng)中斷請求,而是在滿足中斷響應(yīng)條件之后才會響應(yīng)。

1)CPU的中斷響應(yīng)條件

①有中斷源發(fā)出中斷申請。

②中斷總允許位EA=1,即CPU允許所有中斷源申請中斷。

③申請中斷的中斷源的中斷允許位為1,即此中斷源可以向CPU申請中斷。

以上是CPU響應(yīng)中斷的基本條件,若滿足,CPU一般會響應(yīng)中斷。但如果有下列任何一種情況存在,中斷響應(yīng)都會受到阻斷。①CPU正在執(zhí)行一個同級或高一級的中斷服務(wù)程序。

②當(dāng)前的機器周期不是正在執(zhí)行的指令的最后一個周期,即正在執(zhí)行的指令完成前,任何中斷請求都得不到響應(yīng)。

③正在執(zhí)行的指令是返回(RETI)指令或者對專用寄存器IE、IP進行讀/寫的指令,此時,在執(zhí)行RETI或者讀寫IE或IP之后,不會馬上響應(yīng)中斷請求。

若存在上述任何一種情況,則CPU不會馬上響應(yīng)中斷,而把該中斷請求鎖存在各自的中斷標(biāo)志位中,在下一個機器周期再按順序查詢。由于存在中斷阻斷的情況而未被及時響應(yīng),待上述阻斷中斷響應(yīng)的條件被撤消之后,由于中斷標(biāo)志還存在,仍會響應(yīng)。

2)中斷響應(yīng)過程

如果中斷響應(yīng)條件滿足,且不存在中斷阻斷的情況,則CPU響應(yīng)中斷。CPU一旦響應(yīng)中斷,首先對相應(yīng)的優(yōu)先級有效觸發(fā)器置位。然后,執(zhí)行1條由硬件產(chǎn)生的長調(diào)用指令“LCALL”,自動地把斷點地址壓入堆棧保護(但不保護狀態(tài)寄存器PSW和其它寄存器內(nèi)容),再把與各中斷源對應(yīng)的中斷服務(wù)程序的入口地址送入程序計數(shù)器PC,同時清除中斷請求標(biāo)志(串行口中斷和外部電平觸發(fā)中斷除外),從而程序便轉(zhuǎn)移到中斷服務(wù)程序。以上過程均由中斷系統(tǒng)自動完成。

MCS51中斷入口地址和中斷輸入引腳是一一對應(yīng)的,從哪個中斷輸入引腳進入的中斷請求,它的中斷服務(wù)程序入口地址一定是某個固定值。如,從INT0(P3.2)引腳進入的中斷請求,轉(zhuǎn)向的中斷入口地址是0003H單元。

3.中斷處理

中斷處理又稱中斷服務(wù)程序,從中斷入口地址開始執(zhí)行,直到返回指令“RETI”為止,這個過程(或程序)稱為中斷處理。此過程一般包括保護現(xiàn)場、處理中斷源的請求及恢復(fù)現(xiàn)場三部分內(nèi)容。因為一般主程序和中斷服務(wù)程序都可能會用到累加器、PSW寄存器和一些其它寄存器。CPU在進入中斷服務(wù)程序后,用到上述寄存器時就會破壞它原來存在寄存器中的內(nèi)容,一旦中斷返回,將會造成主程序的混亂。因此,在進入中斷服務(wù)程序后,一般要先保護現(xiàn)場(即相關(guān)寄存器內(nèi)容被壓棧保存),然后再執(zhí)行處理中斷源的請求的服務(wù)程序。執(zhí)行完畢后,在返回主程序以前,要恢復(fù)現(xiàn)場(即相關(guān)寄存器內(nèi)容被恢復(fù))。

保護現(xiàn)場和恢復(fù)現(xiàn)場一般采用PUSH和POP指令來實現(xiàn)。PUSH和POP指令一般成對出現(xiàn),以保證寄存器的內(nèi)容不會改變。要注意堆棧操作的“先進后出,后進先出”原則。

下面的例5.3是一個在中斷服務(wù)程序中經(jīng)常用到的保護現(xiàn)場和恢復(fù)現(xiàn)場的實例。例5.3設(shè)在主程序中用到了寄存器PSW、ACC、B、DPTR,而在執(zhí)行中斷服務(wù)程序時需要用到這些寄存器。因此,在中斷服務(wù)程序里要保護PSW、ACC、B、DPTR的內(nèi)容,以免破壞主程序中相應(yīng)用到的寄存器PSW、ACC、B、DPTR內(nèi)容。

程序如下:

ORG0003H

AJMPSERVICE;跳轉(zhuǎn)到中斷處理程序

SERVICE:PUSHPSW;保護程序狀態(tài)字

PUSHACC;保護累加器A

PUSHB;保護寄存器B

PUSHDPL;保護數(shù)據(jù)指針低字節(jié)

PUSHDPH;保護數(shù)據(jù)指針高字節(jié)

;中斷處理具體內(nèi)容

POPDPH;恢復(fù)現(xiàn)場,即恢復(fù)各寄存器內(nèi)容

POPDPL

POPB

POPACC

POPPSW

RETI

4.中斷返回

中斷返回是指執(zhí)行完中斷服務(wù)程序后,程序返回到斷點(即原來程序執(zhí)行時被斷開的位置),繼續(xù)執(zhí)行原來的程序。中斷返回由專門的中斷返回指令RETI實現(xiàn),該指令的功能是把斷點地址取出,送回到程序計數(shù)器PC中。另外,它還通知中斷系統(tǒng)已完成中斷處理,將清除優(yōu)先級狀態(tài)觸發(fā)器。特別要注意,不能用子程序返回指令“RET”代替中斷返回指令“RETI”。因為用RET指令雖然也能控制PC返回到原來中斷的地方,但RET指令沒有清零中斷優(yōu)先級狀態(tài)觸發(fā)器的功能,中斷控制系統(tǒng)會認(rèn)為中斷仍在進行,其后果是與此同級的中斷請求將不被相應(yīng)。所以,中斷服務(wù)程序結(jié)束時必須使用RETI指令。

5.中斷響應(yīng)時間

所謂中斷響應(yīng)時間是指從查詢中斷請求標(biāo)志位到轉(zhuǎn)入中斷服務(wù)程序入口地址所需的機器周期數(shù)(對單一中斷源而言)。響應(yīng)中斷最短需要3個機器周期。若CPU查詢中斷請求標(biāo)志的周期正好是執(zhí)行1條指令的最后1個機器周期,則不需等待就可以響應(yīng)。而響應(yīng)中斷執(zhí)行1條長調(diào)用指令需要2個機器周期,加上查詢的1個機器周期,一共需要3個機器周期才開始執(zhí)行中斷服務(wù)程序。

中斷響應(yīng)的最長時間由下列情況決定:若中斷查詢時正在執(zhí)行RETI或者訪問IE或IP指令的第1個機器周期,這樣連查詢在內(nèi)需要2個機器周期(以上3條指令均需2個機器周期)。若緊接著要執(zhí)行的指令正好是MUL或DIV指令(兩者均為4周期指令),則需等該指令執(zhí)行完后才能進入中斷響應(yīng)周期,再用2個機器周期執(zhí)行1條長調(diào)用指令轉(zhuǎn)入中斷服務(wù)程序。這樣,總共需要8個機器周期。其它情況下的中斷響應(yīng)時間一般在3~8個機器周期之間。5.1.4中斷請求的撤除

CPU響應(yīng)中斷請求后,在中斷返回前,必須撤除請求,否則會錯誤地再一次引起中斷過程。51單片機的5個中斷源請求的撤除方法分別如下:

1.定時器與串口中斷請求的撤除

對于定時器0或1溢出中斷,CPU在響應(yīng)中斷后,中斷請求將會硬件自動撤除。即當(dāng)定時器0或1溢出時,中斷請求標(biāo)志TF0或TF1置1,通知CPU響應(yīng)中斷,在響應(yīng)條件滿足且不受阻的情況下CPU響應(yīng)中斷,同時用硬件自動清除了中斷請求標(biāo)志位TF0或TF1,無須采取其它措施。

對于串行口中斷,CPU響應(yīng)中斷后沒有用硬件清除中斷標(biāo)志位,必須由用戶編制的中斷服務(wù)程序來清除相應(yīng)的中斷標(biāo)志,即用指令CLRTI或CLRRI來清除串行發(fā)送或串行接收中斷標(biāo)志。

2.外部中斷請求的撤除

MCS51單片機的中斷系統(tǒng)的兩個外部中斷源有兩種觸發(fā)(申請)方式,即電平觸發(fā)和邊沿觸發(fā)??赏ㄟ^對TCON寄存器中的IT0位和ITl位清除為“0”使其工作在電平觸發(fā)方式,或設(shè)置為“1”使其工作在邊沿觸發(fā)方式。

在邊沿觸發(fā)方式中,單片機在采樣中斷輸入信號時,如果連續(xù)采樣到1個周期的高電平和緊接著1個周期的低電平,則中斷請求標(biāo)志位就被置位,并請求中斷。這種方式下,CPU響應(yīng)中斷進入中斷服務(wù)程序時,請求標(biāo)志位會被CPU自動清除。所以,該方式適合于以負脈沖形式輸入的外部中斷請求。由于外部中斷源在每個機器周期被采樣1次,所以輸入的高電平或低電平至少必須保持12個振蕩周期,以保證能被采樣到。

在電平觸發(fā)方式中,單片機在每個機器周期的S5P2期間采樣中斷輸入信號,若為低電平,則可直接觸發(fā)外部中斷。在這一觸發(fā)方式中,中斷源必須持續(xù)請求,直至中斷產(chǎn)生為止,且要求在中斷服務(wù)程序返回之前,必須撤除中斷請求信號,否則機器將認(rèn)為又發(fā)生了另一次中斷請求。因此,電平觸發(fā)方式適合于外部中斷輸入為低電平,且在中斷服務(wù)程序中能清除該中斷源的申請信號的情況。

對于電平觸發(fā)的外部中斷,由于CPU對外部中斷0和1引腳沒有控制作用,因此需要外接電路來撤除中斷請求信號。

圖5.4外部中斷請求(電平觸發(fā)方式)的撤除圖圖5.4描述了一種外部中斷撤除的可行性方案。該外部中斷請求信號通過D觸發(fā)器加到單片機外部中斷0或1引腳。當(dāng)外部中斷信號使D觸發(fā)器的CLK端發(fā)生正跳變時,由于D端接地,Q端輸出為0,因此向單片機發(fā)出中斷請求。CPU響應(yīng)中斷后,利用1根口線(如P1.0)作應(yīng)答線。

在中斷服務(wù)程序中,用以下兩條指令來撤除中斷請求:

ANLP1,#0FEH;P1.0=0,則置位端S有效,D觸發(fā)器置位,Q=1

ORLP1,#01H;P1.0=0,則置位端S無效,D觸發(fā)器接收信號

第1條指令使P1.0為0,而P1口的其它各位的狀態(tài)不變。由于P1.0接至D觸發(fā)器的置“1”端(S),故D觸發(fā)器的Q為1,從而撤除了中斷請求信號。第2條指令又使P1.0為1,即S為1,使以后產(chǎn)生新的外部中斷請求信號又能向單片機申請中斷。5.1.5中斷程序應(yīng)用舉例

MCS51共有5個中斷源,由4個特殊功能寄存器TCON、SCON、IE和IP進行管理和控制。中斷程序一般包含中斷初始化程序和中斷服務(wù)程序兩部分。

中斷服務(wù)程序是一種為中斷源的特定情況要求服務(wù)的獨立程序段,以中斷返回指令RETI結(jié)束,中斷服務(wù)完后返回到原來被中斷的地方(即斷點),繼續(xù)執(zhí)行原來的程序。中斷服務(wù)程序的固定入口:

0003H單元——外部中斷INT0的中斷服務(wù)程序入口;

000BH單元——內(nèi)部定時器/計數(shù)器T0的中斷服務(wù)程序入口;

0013H單元——外部中斷INT1的中斷服務(wù)程序入口;

001BH單元——內(nèi)部定時器/計數(shù)器T1的中斷服務(wù)程序入口;

0023H單元——串行口的中斷服務(wù)程序入口。在編寫中斷服務(wù)程序時,應(yīng)注意以下4點:

(1)各中斷源入口地址之間只相隔8個字節(jié)。中斷服務(wù)程序放在此處,一般容量是不夠的。常用的方法是在中斷入口地址單元處,存放—條無條件轉(zhuǎn)移指令,如“LJMPAddress”,使程序跳轉(zhuǎn)到用戶安排的中斷服務(wù)程序起始地址處。

(2)在執(zhí)行當(dāng)前中斷程序時,為了禁止更高優(yōu)先級中斷源的中斷請求,可先用軟件關(guān)閉CPU中斷,或屏蔽更高級中斷源的中斷,在中斷返回前再開放被關(guān)閉或被屏蔽的中斷。

(3)在多級中斷情況下,應(yīng)在保護現(xiàn)場之前關(guān)掉中斷,在恢復(fù)現(xiàn)場之后打開中斷。如果在中斷處理時允許有更高級的中斷打斷它,則在保護現(xiàn)場之后開中斷,恢復(fù)現(xiàn)場之前關(guān)中斷。

圖5.5故障顯示電路

(4)中斷時,現(xiàn)場保護由中斷服務(wù)程序來完成。因此,在編寫中斷服務(wù)程序時必須考慮保護現(xiàn)場的問題。在MCS51單片機中,現(xiàn)場一般包括累加器A、工作寄存器R0~R7及程序狀態(tài)字PSW等。

例5.4圖5.5為多個故障顯示電路,當(dāng)系統(tǒng)無故障時,4個故障源輸入端X1~X4全為低電平,顯示燈全滅;當(dāng)某部分出現(xiàn)故障,其對應(yīng)的輸入由低電平變?yōu)楦唠娖?,從而引起MCS51單片機中斷,中斷服務(wù)程序的任務(wù)是判定故障源,并用對應(yīng)的發(fā)光二極管LED1~LED4進行顯示。編程如下:ORG0000H;程序開始

AJMPMAIN;轉(zhuǎn)主程序

ORG0003H;外部中斷INT0入口地址

AJMPSERVICE;轉(zhuǎn)中斷服務(wù)程序

MAIN:ORLP1,#0FFH;燈全滅,準(zhǔn)備讀入

SETBIT0;選擇邊沿方式

SETBEX0;允許INT0中斷

SETBEA;CPU開中斷

AJMP$;等待中斷

SERVICE:JNBP1.3,N1;若X1無故障,轉(zhuǎn)

CLRP1.4;若X1有故障,LED1亮

N1:JNBP1.2,N2;若X2無故障,轉(zhuǎn)

CLRP1.5;若X2有故障,LED2亮

N2:JNBP1.1,N3;若X3無故障,轉(zhuǎn)

CLRP1.6;若X3有故障,LED3亮

N3:JNBP1.0,N4;若X4無故障,轉(zhuǎn)

CLRP1.7;若X4有故障,LED4亮

N4:RETI

這個程序主要分為主程序和中斷服務(wù)程序兩部分。主程序主要完成初始化的工作,中斷服務(wù)程序主要檢測故障源是否發(fā)生,如果某故障源發(fā)生,則將相應(yīng)的指示燈點亮。在此主程序和中斷服務(wù)程序中,不存在使用寄存器之間的干涉問題,因此,在中斷服務(wù)程序中不用保護現(xiàn)場和恢復(fù)現(xiàn)場。

例5.5利用單片機的定時器計數(shù)來產(chǎn)生中斷。假定單片機晶振選擇12MHz,選擇使用T0每1ms產(chǎn)生一次中斷請求,用于調(diào)用動態(tài)顯示程序DISP,即顯示程序在此屬于中斷服務(wù)程序。

分析:先安排好不同程序的入口地址,在主程序中完成定時器和中斷的初始化,然后打開對應(yīng)中斷允許位和總中斷允許位。在中斷服務(wù)程序中要注意保護和恢復(fù)現(xiàn)場。

主程序如下:ORG0000H

LJMPMAIN;跳轉(zhuǎn)到主程序入口

ORG000BH

LJMPDISP;跳轉(zhuǎn)到定時器T0中斷入口地址處

ORG0030H

MAIN:…

;進行定時器初始化

MOVTMOD,#00000001B;設(shè)置T0工作在模式1

MOVTH0,#0FCH;

MOVTL0,#18H;設(shè)置計數(shù)初值FC18H=64536=65536-1000

SETBTR0;TR0=1,啟動定時器T0開始計數(shù)

SETBET0;開放定時器T0中斷允許位

SETBEA;開放總中斷允許位,等待T0計數(shù)滿出…

中斷服務(wù)程序代碼:DISP:PUSHACC

PUSHPSW;保護現(xiàn)場

CLRTR0;因為已經(jīng)響應(yīng)中斷請求,故停止定時器T0

MOVTH0,#0FCH

MOVTL0,#18H;重新賦計數(shù)初值

SETBTR0;重新啟動定時器T0

…(顯示程序代碼略)…

POPPSW

POPACC;按先入后出次序恢復(fù)現(xiàn)場

RETI;中斷服務(wù)程序結(jié)束,返回斷點,必須用RETI指令

在測量控制系統(tǒng)中,常常要求有實時時鐘來實現(xiàn)定時測控或延時動作,也會要求有計數(shù)器實現(xiàn)對外部事件計數(shù),如測電機轉(zhuǎn)速、頻率、脈沖個數(shù)等。

實現(xiàn)定時/計數(shù)功能,有軟件定時、硬件定時和可編程定時/計數(shù)器3種主要方法:5.2定時/計數(shù)器

1)軟件定時

軟件定時也稱軟件延時,是讓機器執(zhí)行一個程序段。這個程序段本身沒有具體的執(zhí)行目的,通過正確的挑選指令和安排循環(huán)次數(shù)實現(xiàn)軟件延時。由于執(zhí)行每條指令都需要時間,執(zhí)行這一段程序所需要的時間就是延時時間。這種軟件定時的特點是時間精確,且不需要外加硬件電路,但要加CPU的執(zhí)行時間,降低了CPU的工作效率。因此軟件定時的時間不宜過長。此外,軟件定時方法在某些情況下無法使用。

2)硬件定時

對于時間較長的定時,常采用硬件電路完成。硬件定時的特點是定時功能完全由硬件電路來完成,不占用CPU時間,但需要通過改變電路的原件參數(shù)來調(diào)節(jié)定時時間,在使用上不夠靈活方便。例如,采用如小規(guī)模集成電路器件555,外接必要的元器件(電阻和電容),即可構(gòu)成硬件定時。這樣的定時電路簡單,但要改變定時范圍,必須改變電阻和電容,這種定時電路在硬件連接好后,修改不方便。

3)可編程定時/計數(shù)器

可編程定時/計數(shù)器是為方便微機系統(tǒng)的設(shè)計和應(yīng)用而研制的,它是硬件定時,又可以通過軟件編程來確定定時時間。這種定時方法是通過對系統(tǒng)時鐘脈沖的計數(shù)來實現(xiàn)的。計數(shù)值通過程序設(shè)定,改變計數(shù)值就改變了定時時間,使用起來既靈活又方便。此外,由于采用計數(shù)方法實現(xiàn)定時,所以本身就具有計數(shù)功能,可以對外來脈沖計數(shù)。

MCS51單片機在設(shè)計中也充分考慮了方便用戶應(yīng)用的問題,它的內(nèi)部提供了兩個16位可編程的定時/計數(shù)器:T0和T1,并且這兩個定時/計數(shù)器可以通過軟件的方式進行設(shè)置使其工作在不同的方式,給設(shè)計者帶來極大的方便,下面將對其做詳細介紹。5.2.1定時/計數(shù)器的結(jié)構(gòu)及工作原理

1.定時/計數(shù)器的結(jié)構(gòu)

MCS51單片機片內(nèi)集成有兩個16位可編程的定時/計數(shù)器:T0和T1,其結(jié)構(gòu)如圖5.6所示。

它的基本部件是兩個16位寄存器T0和T1,每個16位寄存器分成兩個8位寄存器(T0由高8位TH0和低8位TL0組成,T1由高8位TH1和低8位TL1組成)。圖5.6定時/計數(shù)器T0、T1的內(nèi)部結(jié)構(gòu)框圖TMOD是定時/計數(shù)器的工作方式寄存器,由它確定定時/計數(shù)器的工作方式和功能;TCON是定時/計數(shù)器的控制寄存器,用于控制T0、T1的啟動和停止以及設(shè)置溢出標(biāo)志。通過對這些特殊功能寄存器(SFR)的編程,可以使其工作在不同的方式和狀態(tài)。

2.定時/計數(shù)器的工作原理

圖5.7給出了定時器/計數(shù)器T0或T1的工作(結(jié)構(gòu))原理圖。由圖可看出,MCS51單片機的定時/計數(shù)器由振蕩器分頻輸入電路、外部計數(shù)脈沖輸入電路、計數(shù)脈沖選擇電路、計數(shù)啟??刂齐娐?、加1計數(shù)器和溢出標(biāo)志位組成。圖中X=0或1,代表定時/計數(shù)器T0或T1相應(yīng)的信號或寄存器的相應(yīng)位。由圖5.7可見,定時/計數(shù)器的核心是一個加1計數(shù)器,每輸入一個脈沖,計數(shù)值加1,當(dāng)計數(shù)到計數(shù)器全為1時,再輸入一個脈沖就使計數(shù)值回零,同時從最高位溢出一個脈沖使控制寄存器TCON的TFX(X=0或1)位置1,作為計數(shù)器的溢出標(biāo)志。加1計數(shù)器由兩個8位特殊功能寄存器THX和TLX(X=0或1)組成,它們可以被編程設(shè)置為不同的組合狀態(tài)(13位、16位、兩個分開的8位等),從而形成定時/計數(shù)器的4種工作方式。

圖5.7定時/計數(shù)器T0或T1的結(jié)構(gòu)原理圖加1計數(shù)器計數(shù)工作的啟動和停止由相應(yīng)的電路控制。方式寄存器TMOD的GATE位為0時,由寄存器TCON的TRX(X=0或1)位啟動(即TRX=1)或停止(即TRX=0);GATE位為1,且TRX為1時,中斷引腳INT0(或INT1)為高電平時,啟動;為低電平時,停止。

通過方式寄存器TMOD的C/位來選擇加1計數(shù)器計數(shù)脈沖的來源:當(dāng)C/=0時,計數(shù)脈沖來自系統(tǒng)的時鐘振蕩器的12分頻,由于這時的計數(shù)脈沖為一時間基準(zhǔn),脈沖數(shù)乘以脈沖間隔時間就是定時時間,這時定時/計數(shù)器工作于定時器狀態(tài);當(dāng)C/=1時,計數(shù)脈沖來自系統(tǒng)外部的脈沖源,這時定時/計數(shù)器成為外部事件計數(shù)器,工作于計數(shù)器狀態(tài)。

1)定時器狀態(tài)

作定時器使用時,加1計數(shù)器的計數(shù)脈沖來自于內(nèi)部時鐘振蕩器。此時輸入脈沖是由內(nèi)部時鐘振蕩器的輸出經(jīng)12分頻后送來的,這就是機器周期。如果晶振頻率為12MHz,則一個機器周期是1μs,定時器每接收一個輸入脈沖的時間為1μs。要定一段時間,只需計算脈沖個數(shù)即可。定時時間t的計算公式為:t=脈沖個數(shù)×機器周期。

2)計數(shù)器狀態(tài)

作計數(shù)器使用時,加1計數(shù)器的計數(shù)脈沖來自于外部引腳。此時輸入脈沖是由外部引腳P3.4(T0)或P3.5(T1)輸入到計數(shù)器的。在每個機器周期的S5P2期間采樣T0、T1引腳電平。當(dāng)某周期采樣到一高電平輸入,而下一周期又采樣到一低電平時,則計數(shù)器加“1”。由于檢測一個從“1”到“0”的下降沿需要2個機器周期,因此要求被采樣的電平至少要維持一個機器周期,否則會出現(xiàn)漏計數(shù)現(xiàn)象,所以最高計數(shù)頻率為晶振頻率的1/24。當(dāng)晶振頻率為12MHz時,最高計數(shù)頻率不超500kHz,即計數(shù)脈沖的周期要大于2μs。5.2.2定時/計數(shù)器的控制與實現(xiàn)

MCS51單片機中的定時/計數(shù)功能(狀態(tài))都是通過軟件設(shè)定來控制實現(xiàn)的。與控制實現(xiàn)相關(guān)的寄存器主要有兩個,分別為工作方式寄存器(TMOD)和控制寄存器(TCON)。另外,定時/計數(shù)器除了可用作定時器或計數(shù)器之外,還可用作串行接口的波特率發(fā)生器。

1.工作方式寄存器(TMOD)

工作方式寄存器(TMOD)用于設(shè)置定時/計數(shù)器的工作方式,其格式定義如圖5.8所示。

圖5.8TMOD的格式定義

TMOD的高4位用于管理定時器T1,低4位用于管理定時器T0。圖5.8中各位含義如下:

GATE:門控位。當(dāng)GATE=1,只有INT0(或INT1)引腳為高電平,且由軟件使TR0(或TR1)置1時,才能啟動定時器工作,即以外部中斷啟動定時器;當(dāng)GATE=0時,只要用軟件使TR0(或TR1)置位就可以啟動定時器工作,不需要參考INT0或INT1的引腳狀態(tài)。

C/T:定時/計數(shù)器方式選擇位。當(dāng)C/T=1時,選擇計數(shù)器;當(dāng)C/T=0時,選擇定時器。

M1M0:工作模式定義位,如表5.6所示。表5.6工作模式選擇

2.控制寄存器(TCON)

控制寄存器(TCON)的作用是控制定時器的啟動、停止以及溢出標(biāo)志位的管理,外部中斷觸發(fā)方式控制情況。TCON支持位尋址操作,其定義格式如表5.7所示。表5.7TCON格式定義

TF1:定時/計數(shù)器T1的溢出標(biāo)志。T1計數(shù)滿產(chǎn)生溢出時,由硬件使該位置1,并申請中斷。若中斷開放,進入中斷服務(wù)程序后,由硬件自動清0。若中斷被禁止,可以采取查詢方式,用軟件完成清0。

TR1:T1的運行控制位。用軟件控制,置1時,啟動T1;清0時,停止T1。

TF0:T0的溢出標(biāo)志。T0計數(shù)溢出時,該位由內(nèi)部硬件置位。若中斷開放,即響應(yīng)中斷,進入中斷服務(wù)程序后,由硬件自動清0;若中斷禁止,在查詢方式下用軟件清0。

TR0:T0的運行控制位。用軟件控制,置1時,啟動T0;清0時,停止T0。

IE1:外部中斷1下降沿觸發(fā)標(biāo)志位。

IE0:外部中斷0下降沿觸發(fā)標(biāo)志位。

IT1:外部中斷1觸發(fā)類型選擇位。

IT0:外部中斷0觸發(fā)類型選擇位。

TCON的低4位與中斷有關(guān),請參見本章“中斷系統(tǒng)”章節(jié)。注意:復(fù)位后TCON的所有位均清0,T0和T1均處于停止?fàn)顟B(tài)。5.2.3定時/計數(shù)器的工作方式

MCS51單片機的定時/計數(shù)器(以下簡寫為T/C),可以通過設(shè)置工作方式寄存器(TMOD)使其工作在4種不同的模式。T0有4種工作方式(方式0、1、2、3),T1有3種工作方式(方式0、1、2)。此外,T1還可以作為串行通信接口的波特率發(fā)生器。下面以定時器T0為例,分別對其4種工作模式進行介紹。

1.方式0

當(dāng)M1M0=00時,T/C設(shè)定為工作方式0,構(gòu)成13位的T/C。其邏輯結(jié)構(gòu)如圖5.9所示。在此工作方式下,T/C為13位計數(shù)器,由THX的8位和TLX的低5位組成(高3位未用),滿計數(shù)值為213。T/C啟動后立即加1計數(shù),當(dāng)TLX的低5位計數(shù)溢出時,向THX進位,THX計數(shù)溢出則對相應(yīng)的溢出標(biāo)志位TFX置位,以此作為定時器溢出中斷標(biāo)志。當(dāng)單片機進入中斷服務(wù)程序時,由內(nèi)部硬件自動清除該標(biāo)志。

圖5.9定時/計數(shù)器方式0的邏輯結(jié)構(gòu)圖當(dāng)TMOD寄存器中的C/T=0時,為定時方式,將振蕩器12分頻的信號作為輸入脈沖計數(shù);當(dāng)C/T=1時,為計數(shù)方式,對外部脈沖輸入端TX輸入的脈沖進行計數(shù)。計數(shù)脈沖能否加到計數(shù)器上,由啟動信號來控制。當(dāng)GATE=0時,或門輸出為1,與門處于開啟狀態(tài),只要TRX=1,則與門輸出為1,T/C啟動。當(dāng)GATE=1時,啟動信號TRX·INTX,此時T/C的啟動受到TRX與INTX信號的雙重控制。

13位定時/計數(shù)器是為了與Intel公司早期的產(chǎn)品MCS48系列單片機(該系列已過時,且計數(shù)初值裝入易出錯)兼容,所以在實際應(yīng)用中常由16位的方式1取代。

2.方式1

當(dāng)M1M0=01時,T/C設(shè)定為工作方式1,構(gòu)成16位定時/計數(shù)器。其中,THX作為高8位,TLX作為低8位,滿計數(shù)值為256,其余同方式0類似。其邏輯結(jié)構(gòu)如圖5.10所示。

圖5.10定時/計數(shù)器方式1的邏輯結(jié)構(gòu)圖用方式1構(gòu)成16位加1定時/計數(shù)器時,計數(shù)個數(shù)M與計數(shù)初值X的關(guān)系如下:

M=216-X

用于定時功能時,定時時間t的計算公式為:t=M×機器周期=(216-X)×機器周期;若晶振頻率為12MHz,機器周期則為1μs,初值X=0~65536時,可定時范圍為1μs~65536μs。

3.方式2

當(dāng)M1M0=10時,T/C工作在方式2,構(gòu)成1個8位的自動重裝初值的定時/計數(shù)器。其邏輯結(jié)構(gòu)如圖5.11所示。

在前述的方式0和方式1中,當(dāng)計數(shù)滿后,下一次定時/計數(shù)需用軟件向THX和TLX重新預(yù)置計數(shù)初值。而在方式2中THX和TLX被當(dāng)做兩個8位計數(shù)器,計數(shù)過程中,THX寄存8位初值并保持不變,由TLX進行8位計數(shù)。圖5.11定時/計數(shù)器方式2的邏輯結(jié)構(gòu)圖計數(shù)溢出時,由硬件使TF0置“1”產(chǎn)生溢出中斷標(biāo)志,并向CPU請求中斷,此時還自動將THX中的初值重新裝到TLX中去,即重裝初值。計數(shù)個數(shù)M與計數(shù)初值X的關(guān)系如下:

M=28-X

用于定時功能時,定時時間t的計算公式為:t=M×機器周期=(28-X)×機器周期;若晶振頻率為12MHz,機器周期則為1μs,初值X=0~255時,可定時范圍為1μs~256μs。

除此之外,方式2控制也與方式1類似。

4.方式3

方式3只適用于定時器T0。T0分成為兩個獨立的8位計數(shù)器TL0和TH0,在使用時應(yīng)注意以下幾個特點。

(1)TL0:可作為定時/計數(shù)器使用,占用了T0的控制位(C/T、GATE、TR0、TF0和INT0),其功能和操作與方式0或方式1完全相同;TH0:只能作定時器用,僅占據(jù)了定時器T1的兩個控制信號TR1和TF1。因此,TH0不受外部INT1門控,TH0的啟﹑停受TR1控制,TH0的溢出將置位TF1。

(2)TH0:只能作為定時器運行,當(dāng)T0為方式3時,定時器T1雖仍可用于方式0、1、2,但不能使用中斷方式。當(dāng)作為波特率發(fā)生器使用時,只需設(shè)置好工作方式,便可自行運行。如要停止工作,只需送入1個把它設(shè)置為方式3的方式控制字就可以了。由于定時器T1不能在方式3下使用,如果硬把它設(shè)置為方式3,就相當(dāng)于停止工作。方式3的邏輯結(jié)構(gòu)如圖5.12所示。

圖5.12定時/計數(shù)器方式3的邏輯結(jié)構(gòu)圖

5.2.4定時/計數(shù)器的應(yīng)用舉例

MCS51單片機中的定時/計數(shù)器是可編程的,一般要求在使用之前必須進行初始化。在編程時需要注意兩個事項:正確寫入控制字;正確計算計數(shù)初值。

1.初始化步驟

(1)確定工作方式:對TMOD各位按功能賦值。

(2)預(yù)置定時或計數(shù)初值:可以直接將初值寫入TH0、TH1或TL0、TL1中。

(3)根據(jù)需要開放定時/計數(shù)器中斷:直接對IE中的位進行位操作。

(4)啟動定時/計數(shù)器,分為兩種情況:①采用軟件啟動時,將對應(yīng)的TR0或TR1置1;

②采用外部中斷啟動時,則需要給外部中斷引腳(INT0或INT1)加啟動電平。

當(dāng)實現(xiàn)了啟動要求后,定時器就按規(guī)定的工作方式和初值進行計數(shù)或定時。

2.定時/計數(shù)器的初值計算

由于定時/計數(shù)器有4種工作方式,不同工作方式下,計數(shù)器的位數(shù)不同,其最大計數(shù)模值也不同。設(shè)最大計數(shù)模值為N,晶振頻率為12MHz,則各方式的N表達式為:方式0:13位計數(shù)器,N=213=8192,最大定時時間是8.192ms;

方式1:16位計數(shù)器,N=216=65536,最大定時時間是65.536ms;

方式2:8位計數(shù)器,N=28=256,最大定時時間是0.256ms;

方式3:定時器0分成兩個8位計數(shù)器,所以兩個N都是256;定時器1停止計數(shù)。定時器/計數(shù)器工作時,是從計數(shù)初值開始加1計數(shù)的,并在計數(shù)到最大值(全“1”)時,溢出產(chǎn)生中斷。定時工作時,初值X計算如下:

其中,Ttiming是定時時間,TOSC是單片機的晶振周期,12TOSC是機器周期。

例5.6設(shè)單片機工作在12MHz主頻下,要產(chǎn)生100μs的定時時間,請問工作于方式2時,計數(shù)器初值應(yīng)該是多少?分析:工作主頻是12MHz,則機器周期是1μs,計數(shù)次數(shù)為

100μs1μs=100次

工作在方式2,則計數(shù)初值為

X=N-100=256-100=156=9CH

例5.7若單片機時鐘頻率是12MHz,計算定時1ms所需的定時器初值。分析:定時器工作在方式3和方式2下時最大定時時間僅為0.256ms,所以該例必須選擇工作方式為方式0或方式1。所以剩下的工作主要就是根據(jù)定時1ms得知需要加1的次數(shù)為1000次,然后計算定時初值。

若采用方式0,定時器初值為X=N-計數(shù)值=8192-1000=7192=1C18H=1110000011000B

在二進制表達式中用空格區(qū)分傳給不同寄存器的值,即

TH0=11100000B=E0H

TL0=11000B=18H(TL0只用低5位,高3位補0)

若采用方式1,定時器初值為X=N-計數(shù)值=65536-1000=64536=FC18H即TH0=FCH,TL0=18H

3.定時/計數(shù)器應(yīng)用實例

例5.8方式1應(yīng)用:利用定時/計數(shù)器(T0)的方式1,產(chǎn)生一個50Hz的方波,此方波由P1.0引腳輸出,晶振頻率為12MHz。圖5.1350Hz方波示意圖分析:方波頻率f=50Hz,則周期T=1/50=0.02s,如果讓定時器計滿0.01s,P1.0輸出“0”,再計滿0.01s,P1.0輸出“1”,就能滿足要求如圖5.13所示。所以此題轉(zhuǎn)化為由T0產(chǎn)生0.01s定時的問題。

實現(xiàn)方法有兩種:

(1)查詢方式:通過查詢T0的溢出標(biāo)志TF0是否為“1”。當(dāng)TF=1時,定時時間已到,對P1.0取反操作。

(2)中斷方式:CPU正常執(zhí)行主程序,一旦定時時間到,TF0=1向CPU申請中斷,CPU響應(yīng)了T0的中斷,就執(zhí)行中斷程序,在中斷程序里對P1.0取反操作。解題步驟:

①計數(shù)初值:由于晶振為12MHz,所以1個機器周期為1μs。設(shè)定時0.01s的計數(shù)初值為X,則有(216-X)×1×10-6μs=0.01s,X=55536=D8F0H,因此在程序中應(yīng)給THX、TLX賦值,采用定時器T0,則(TH0)=0D8H,(TL0)=0F0H。

②確定TMOD方式字:GATE=0,C/T=0,M1M0=01,可取方式控制字為TMOD=01H,即T0的方式1。③源程序如下:

查詢方式:ORG0000H

LJMPMAIN;跳轉(zhuǎn)到主程序

ORG0100H;主程序

MAIN:MOVTMOD,#01H;置T0工作于方式1

LOOP:MOVTH0,#0D8H;裝入計數(shù)初值

MOVTL0,#0F0H

SETBTR0;啟動定時器T0

JNBTF0,$;TF0=0,定時時間未到,等待

CLRTF0;TF0=1,定時時間到,清TF0

CPLP1.0;P1.0取反輸出

SJMPLOOP

END

中斷方式:ORG0000H

LJMPMAIN;跳轉(zhuǎn)到主程序

ORG000BH;T0的中斷入口地址

LJMPT0_INT;轉(zhuǎn)向中斷服務(wù)程序

ORG0100H

MAIN:MOVTMOD,#01H;置T0工作于方式1

MOVTH0,#0D8H;裝入計數(shù)初值

MOVTL0,#0F0H

SETBET0;T0開中斷

SETBEA;CPU開中斷

SETBTR0;啟動T0

…;繼續(xù)執(zhí)行主程序其它部分

SJMP$;等待中斷

T0_INT:CPLP1.0;P1.0取反輸出

MOVTH0,#0D8H;重新裝入計數(shù)初值

MOVTL0,#0F0H

RETI;中斷返回

END例5.9方式2應(yīng)用:用T1方式2計數(shù),要求每計滿100次,將P1.0端取反。

分析:外部計數(shù)信號由T1(P3.5)引入,每跳變一次計數(shù)器加1,由程序查詢TF1。

①計數(shù)初值:X=N-計數(shù)值=256-100=156=9CH,TH1=TL1=9CH。

②確定TMOD方式字:根據(jù)題意,可設(shè)置TMOD=60H。

③源程序如下:MOVTMOD,#60H;設(shè)置T1為方式2計數(shù)器

MOVTH1,#9CH;賦初值

MOVTL1,#9CH;

SETBTR1;啟動計數(shù)器工作

DEL:JBCTF1,REP;查詢是否計數(shù)溢出

AJMPDEL;

REP:CPLP1.0;若計數(shù)溢出,則輸出取反

AJMPDEL

例5.10方式3應(yīng)用:設(shè)晶振頻率為6MHz,定時/計數(shù)器T0工作于方式3,TL0和TH0作為兩個獨立的8位定時器,通過TL0和TH0的中斷分別使P1.0和P1.1口產(chǎn)生400μs和800μs的方波。分析:當(dāng)采用方式3時,對于TH0來說,需要借用定時器T1的控制信號。

①計算計數(shù)初值:

X0=28-200×10-62×10-6=156=9CH

X1=28-400×10-62×10-6=56=38H

②確定TMOD方式字:對定時器T0來說,M1M0=11、C/T=0、GATE=0,定時器T1不用,取為全0,則TMOD=00000011B=03H

③程序如下:

ORG1000H;主程序

MAIN:MOVTMOD,#03H;T0工作于方式3

MOVTL0,#9CH;置計數(shù)初值

MOVTH0,#38H

SETBTR0;啟動TL0

SETBET0;允許T0中斷(用于TL0)

SETBTR1;啟動TH0

SETBET1;允許T1中斷(用于TH0)

SETBEA;CPU開中斷

HALT:SJMPHALT;暫停,等待中斷

ORG000BH;TL0中斷服務(wù)程序

CPLP1.0;P1.0取反

MOVTL0,#9CH;重新裝入計數(shù)初值

RETI;中斷返回

ORG001BH;TH0中斷服務(wù)程序

CPLP1.1;P1.1取反

MOVTH0,#38H;重新裝入計數(shù)初值

RETI;中斷返回

在復(fù)雜的控制系統(tǒng)中往往存在多個控制單元,其中控制單元之間的通信無疑是支撐整個控制系統(tǒng)的重要環(huán)節(jié)。常用的通信方式有:并行通信、串行通信、以太網(wǎng)通信及現(xiàn)場總線通信等。由于串行通信具有結(jié)構(gòu)簡單、使用信號線少、成本低廉等優(yōu)點,所以是控制系統(tǒng)中最簡單、使用最廣泛的一種通信方式。5.3串行接口5.3.1串行通信的基本概念

1.并行通信與串行通信

計算機的數(shù)據(jù)交換(傳送)方式可分為兩種:并行通信和串行通信。

1)并行通信

在數(shù)據(jù)傳輸時,如果一個數(shù)據(jù)編碼字符的所有位都同時發(fā)送、并排傳輸,又同時被接收,則將這種傳送方式稱為并行通信。并行通信要求物理信道為并行內(nèi)總線或者并行外總線。并行通信的特點是傳送速度快、效率高。但由于需要的傳送數(shù)據(jù)線多,因而傳輸成本高。并行數(shù)據(jù)傳輸?shù)木嚯x通常小于30米。在計算機內(nèi)部的數(shù)據(jù)傳送都是并行傳送的。

2)串行通信

在數(shù)據(jù)傳輸時,如果一個數(shù)據(jù)編碼字符的所有位都不是同時發(fā)送,而是按一定順序,一位接一位地在信道中被發(fā)送和接收,則將這種傳送方式稱為串行通信。串行通信的物理信道為串行總線。串行通信可借助串行I/O口實現(xiàn)數(shù)據(jù)傳送,數(shù)據(jù)依次按位發(fā)送或接收,排列成隊,僅用一條傳輸線路。因此,串行通信節(jié)省傳輸成本,尤其對大數(shù)據(jù)量和遠距離數(shù)據(jù)通信,選用該方式最適合。

串行通信的特點是成本低,但速度慢。通常計算機與外界的數(shù)據(jù)傳送大多是采用串行通信,其傳送距離可以從幾米直到上千公里。

2.串行通信的種類

根據(jù)數(shù)據(jù)傳輸方式的不同,可將串行通信分為同步通信和異步通信。

1)同步通信

同步通信是一種數(shù)據(jù)連續(xù)傳輸?shù)拇型ㄐ欧绞?,通信時發(fā)送方把需要發(fā)送的多個字節(jié)數(shù)據(jù)和校驗信息連接起來,組成數(shù)據(jù)塊,如圖5.14所示。發(fā)送時,發(fā)送方只需在數(shù)據(jù)塊前插入1~2個特殊的同步字符,然后按特定速率逐位輸出(發(fā)送)數(shù)據(jù)塊內(nèi)的各位數(shù)據(jù)。接收方在接收到特定的同步字符后,也按相同速率接收數(shù)據(jù)塊內(nèi)的各位數(shù)據(jù)。在這種通信方式中,數(shù)據(jù)塊內(nèi)的各位數(shù)據(jù)之間沒有間隔,傳輸效率高,但發(fā)送、接收雙方必須保持同步(使用同一時鐘信號),且數(shù)據(jù)塊長度越大,對同步要求就越高。因此,同步通信的特點是:傳輸效率高,但設(shè)備復(fù)雜(發(fā)送方能自動插入同步字符,接收方能自動檢出同步字符,且發(fā)送和接收時鐘相同,即除了數(shù)據(jù)線外,還需要時鐘線),成本高,一般只用在高速數(shù)字通信系統(tǒng)中。典型的同步通信格式如下:

圖5.14同步通信幀格式

2)異步通信

異步通信是以字符幀為單位進行傳輸。每幀數(shù)據(jù)由4部分組成:起始位(占1位)、數(shù)據(jù)位(占5~8位)、奇偶校驗位(占1位,也可以沒有校驗位)、停止位(占1或2位),如圖5.15所示。圖中給出的是8位數(shù)據(jù)位、1位奇偶校驗位、1位停止位和1位起始位,共11位組成一個傳輸幀。

圖5.15異步通信幀格式對于發(fā)送方,傳送時先輸出起始位“0”作為聯(lián)絡(luò)信號,接下來

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論