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

下載本文檔

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

文檔簡介

第三章MCS-51系列單片機(jī)的中斷系統(tǒng)及定時(shí)器/計(jì)數(shù)器3。1中斷的概念

?眾所周知,CPU的工作速度愈來愈快,CPU啟動(dòng)外部設(shè)備輸入/輸出一個(gè)字節(jié)數(shù)據(jù)只需要微秒級甚至更短的時(shí)間,而低速的外設(shè)工作速度一般在毫秒級,若CPU和外部設(shè)備是串行工作的,則CPU就浪費(fèi)了很多時(shí)間去等待外設(shè),其效率大大降低.若沒有中斷技術(shù),CPU難于為多個(gè)設(shè)備服務(wù),對故障的處理能力也極差。為了解決這些問題,在計(jì)算機(jī)中引入了中斷技術(shù),目前全部的計(jì)算機(jī)都有中斷處理的能力.??3.1.1中斷的基本概念及相關(guān)術(shù)語??中斷是CPU在執(zhí)行現(xiàn)行程序的過程中,發(fā)生隨機(jī)大事和特殊懇求時(shí),使CPU中止現(xiàn)行程序的執(zhí)行,而轉(zhuǎn)去執(zhí)行隨機(jī)大事或特殊懇求的處理程序,待處理完畢后,再返回被中止的程序連續(xù)執(zhí)行的過程。實(shí)現(xiàn)中斷的硬件規(guī)律和實(shí)現(xiàn)中斷功能的指令統(tǒng)稱為中斷系統(tǒng).引起中斷的大事稱為中斷源,實(shí)現(xiàn)中斷功能的處理程序稱為中斷服務(wù)程序.中斷的響應(yīng)過程如圖3。1所示,(a)為單級中斷,(b)為兩級中斷嵌套.?

對于中斷系統(tǒng)來說,引起中斷的大事稱為中斷源;由中斷源向CPU所發(fā)出的懇求中斷的信號(hào)稱為中斷懇求信號(hào);CPU中止現(xiàn)行程序執(zhí)行的位置稱為中斷斷點(diǎn);中斷斷點(diǎn)處的程序位置稱為中斷現(xiàn)場;由中斷服務(wù)程序返回到原來程序的過程稱為中斷返回;CPU接受中斷懇求而中止現(xiàn)行程序,轉(zhuǎn)去為中斷源服務(wù)稱為中斷響應(yīng).??在中斷系統(tǒng)中,對中斷斷點(diǎn)的保護(hù)是CPU在響應(yīng)中斷時(shí)自動(dòng)完成的,中斷服務(wù)完成時(shí)執(zhí)行中斷返回指令而得到恢復(fù);對于中斷斷點(diǎn)處其他數(shù)據(jù)的保護(hù)與恢復(fù)是通過在中斷服務(wù)程序中采納堆棧操作指令PUSH及POP來實(shí)現(xiàn)的,這種操作通常稱為保護(hù)現(xiàn)場與恢復(fù)現(xiàn)場。

?3。1.2中斷的作用??中斷系統(tǒng)在計(jì)算機(jī)系統(tǒng)中有很重要的作用,利用中斷可以實(shí)現(xiàn)以下功能:??(1)分時(shí)操作。利用中斷系統(tǒng)可以實(shí)現(xiàn)CPU和多臺(tái)外設(shè)并行工作,能對多道程序分時(shí)操作,以及實(shí)現(xiàn)多機(jī)系統(tǒng)中各機(jī)間的聯(lián)系,提高計(jì)算機(jī)系統(tǒng)的工作效率。??(2)實(shí)時(shí)處理。利用中斷系統(tǒng)可以對生產(chǎn)過程的隨機(jī)信息準(zhǔn)時(shí)采集和處理,實(shí)現(xiàn)實(shí)時(shí)掌握,提高計(jì)算機(jī)掌握系統(tǒng)的靈敏性。?(3)故障處理。利用中斷系統(tǒng)可以監(jiān)視現(xiàn)行程序的程序性錯(cuò)誤(如運(yùn)算溢出、地址錯(cuò)等)和系統(tǒng)故障(如電源掉電、I/O總線奇偶錯(cuò)誤等),實(shí)現(xiàn)故障診斷和故障的自行處理,提高計(jì)算機(jī)系統(tǒng)的故障處理能力。??3.1.3中斷源??通常,計(jì)算機(jī)的中斷源有下列幾種:??(1)一般輸入/輸出設(shè)備.當(dāng)外設(shè)籌備就緒時(shí)可以向CPU發(fā)出中斷懇求,從而實(shí)現(xiàn)外設(shè)與CPU的通信。如鍵盤、打印機(jī)等.??(2)實(shí)時(shí)時(shí)鐘或計(jì)數(shù)信號(hào)。如定時(shí)時(shí)間或計(jì)數(shù)次數(shù)一到,則向CPU發(fā)出中斷懇求,要求CPU予以處理0??(3)故障源.當(dāng)采樣或運(yùn)算結(jié)果消滅超出范圍或系統(tǒng)停電時(shí),可以通過報(bào)警、掉電等信號(hào)向CPU發(fā)出中斷懇求,要求CPU加以處理。

?(4)為調(diào)試程序而設(shè)置的中斷源。為了便于掌握程序的調(diào)試,準(zhǔn)時(shí)檢查中間結(jié)果可以在程序中設(shè)置一些斷點(diǎn)或單步執(zhí)行等。?3.1。4中斷系統(tǒng)的基本功能??為了滿意系統(tǒng)中各種中斷懇求的要求,中斷系統(tǒng)應(yīng)該具備如下的基本功能:??(1)識(shí)別中斷源.在中斷系統(tǒng)中必須能夠正確識(shí)別各個(gè)中斷源,以便區(qū)分各個(gè)中斷懇求,從而為不同的中斷懇求服務(wù)。

?(2)能實(shí)現(xiàn)中斷響應(yīng)及中斷返回。當(dāng)CPU收到中斷懇求申請后,能依據(jù)簡略情況決定是否響應(yīng)中斷,如果沒有更高級別的中斷懇求,則在執(zhí)行完當(dāng)前指令后響應(yīng)這一懇求。響應(yīng)過程應(yīng)包括:保護(hù)斷點(diǎn)、保護(hù)現(xiàn)場、執(zhí)行相應(yīng)的中斷服務(wù)程序、恢復(fù)現(xiàn)場、恢復(fù)斷點(diǎn)等。當(dāng)中斷服務(wù)程序執(zhí)行完畢后返回被中斷的程序連續(xù)執(zhí)行。

?(3)能實(shí)現(xiàn)中斷優(yōu)先權(quán)排隊(duì)。如果在系統(tǒng)中有多個(gè)中斷源,可能會(huì)消滅兩個(gè)或多個(gè)中斷源同時(shí)向CPU提出中斷懇求的情況,這樣就必必要求設(shè)計(jì)者事先依據(jù)輕重緩急,給每個(gè)中斷源確定一個(gè)中斷級別,即優(yōu)先權(quán).當(dāng)多個(gè)中斷源同時(shí)發(fā)出中斷懇求時(shí),CPU能找到優(yōu)先權(quán)級別最高的中斷源,并優(yōu)先響應(yīng)它的中斷懇求;在優(yōu)先權(quán)級別最高的中斷處理完了以后,再響應(yīng)級別較低的中斷源。??(4)能實(shí)現(xiàn)中斷嵌套.當(dāng)CPU響應(yīng)某一中斷的懇求,在進(jìn)行中斷處理時(shí),若有優(yōu)先權(quán)級別更高的中斷源發(fā)出中斷懇求,CPU要能中斷正在進(jìn)行的中斷服務(wù)程序,保留這個(gè)程序的斷點(diǎn)和現(xiàn)場,而響應(yīng)高優(yōu)先權(quán)的中斷,在高優(yōu)先權(quán)處理完以后,再連續(xù)執(zhí)行被中斷的中斷服務(wù)程序,即形成中斷嵌套,如圖3。1(b)所示.而當(dāng)發(fā)出新的中斷懇求的中斷源的優(yōu)先權(quán)與正在處理的中斷源同級或更低時(shí),則CPU就可以不響應(yīng)這個(gè)中斷懇求,直至正在處理的中斷服務(wù)程序執(zhí)行完以后才去處理新的中斷申請。??3。2MCS-51系列單片機(jī)的中斷系統(tǒng)??MCS-51系列單片機(jī)中不同型號(hào)芯片的中斷源數(shù)量是不同的,最基本的8051單片機(jī)有5個(gè)中斷源,分別是INTO(shè)、INT1、TO、Tl.中斷源分為兩個(gè)中斷優(yōu)先權(quán)級別,可以實(shí)現(xiàn)兩級中斷服務(wù)程序嵌套.每一個(gè)中斷源可以編程為高優(yōu)先權(quán)級別或低優(yōu)先權(quán)級別中斷,允許或禁止向CPU懇求中斷。MCS-51列單片機(jī)基本的HYPERLINK"http://xb.gxsdx/jisuanji/jpkc/jxnr/chapter3/flash/tu32。swf”\t"_blank”中斷系統(tǒng)結(jié)構(gòu)圖如圖3.2所示。圖3.2MCS一51系列單片機(jī)8051的中斷系統(tǒng)內(nèi)部結(jié)構(gòu)圖?由圖3。2可知,全部的中斷源都要產(chǎn)生相應(yīng)的中斷懇求標(biāo)志,這些標(biāo)志分別放在特殊功能寄存器TCON和SCON的相關(guān)位.每一個(gè)中斷源的懇求信號(hào)需經(jīng)過中斷允許IE和中斷優(yōu)先權(quán)選擇IP的掌握才能夠得到單片機(jī)的響應(yīng)。??3.2.1中斷源與中斷懇求??由圖3。2可以看出,MCS-51系列單片機(jī)有5個(gè)中斷源,它們是:外部中斷INTO(shè)(P3.2)、INTI(P3。3);定時(shí)器肼數(shù)器T0、Tl溢出中斷;串行口的發(fā)送(TXD)和接收(RXD)中斷源(只占1個(gè)中斷源)。外部中斷的中斷懇求標(biāo)志位和T0、Tl的溢出中斷懇求標(biāo)志位鎖存在定時(shí)器/計(jì)數(shù)器掌握寄存器TCON中,而串行口對應(yīng)的中斷懇求標(biāo)志位鎖存在串行口掌握寄存器SCON中。??1.定時(shí)器/計(jì)數(shù)器掌握寄存器TCON

?TCON為定時(shí)器/計(jì)數(shù)器掌握寄存器,其字節(jié)映像地址為88H,可位尋址,它除了掌握定時(shí)器/計(jì)數(shù)器T0、Tl的溢出中斷外,還掌握著兩個(gè)外部中斷源的觸發(fā)方式和鎖存兩個(gè)外部中斷源的中斷懇求標(biāo)志。其格式如下:TFlTRlTF0TROIElITlIEOIT0?TCON寄存器各位的含義如下:?IT0:外部中斷INTO的中斷觸發(fā)方式選擇位。?當(dāng)IT0位清為0時(shí),外部中斷INTO為電平觸發(fā)方式。在這種觸發(fā)方式中,CPU在每一個(gè)機(jī)器周期的$5P2采樣INTO(shè)(P3.2)引腳的輸入電平,當(dāng)采樣到低電平常,置INT0的中懇求標(biāo)志位為1,采樣到高電平清IE0位為0。在采納電平觸發(fā)方式時(shí),外部中斷源(輸入到INTO(shè),即P3。2引腳)上的必須保持低電平有效,直到該中斷被CPU響應(yīng),同時(shí)在該中斷服務(wù)程序執(zhí)行結(jié)束之前,外部中斷源的有效信號(hào)必須被清除,否則將產(chǎn)生另一次中斷.為了保證CPU能正確采樣電平狀態(tài),要求外部中斷源INTO(shè)有效的低電平信號(hào)至少要維持一個(gè)機(jī)器周期以上。

當(dāng)IT0位置為1時(shí),外部中[新IN-T0為邊沿觸發(fā)方式。在這種觸發(fā)方式中,CPU在每個(gè)機(jī)器周期的$5P2采樣INTO(shè)(P3.2)引腳上的輸入電平。如果在相繼的兩個(gè)機(jī)器周期,一個(gè)周期采樣到INTO為高電平,而接著的下一個(gè)周期采樣到低電平,則置INTO的中斷懇求標(biāo)志位IE0為1,即當(dāng)IE0位為l時(shí),表示外部中斷INTO(shè)正在向CPU懇求中斷,直到該中斷被CPU響應(yīng)時(shí),才由硬件自動(dòng)將IE0位清為0。由于CPU在每一個(gè)機(jī)器周期采樣一次外部中斷源輸入引腳的電平狀態(tài),因此采納邊沿觸發(fā)方式時(shí),外部中斷源輸入的高電平信號(hào)和低電平信號(hào)時(shí)間必須保持在一個(gè)機(jī)器周期以上,才能保證CPU檢測到此信號(hào)由高到低的負(fù)跳變。

?IE0:外部中斷:INT0的中斷懇求標(biāo)志位。當(dāng)IE0位為0時(shí),表示外部中斷源INT0沒有向CPU懇求中斷;當(dāng)IE0位為l時(shí),表示外部中斷INTO正在向CPU懇求中斷,且當(dāng)CPU響應(yīng)該中斷時(shí)由硬件自動(dòng)對IE0進(jìn)行清0。

1T1:外部中斷INTO的中斷觸發(fā)方式選擇位。功能與ITo相同。?IEl:外部中斷INTO的中斷懇求標(biāo)志位。功能與IE0相l(xiāng)司。?TR0:定時(shí)器/計(jì)數(shù)器T0的啟動(dòng)標(biāo)志位。當(dāng)TR0位為0時(shí),不允許T0計(jì)數(shù)工作;當(dāng)TRO位為l時(shí),允許T0定時(shí)或計(jì)數(shù)工作.?TF0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷懇求標(biāo)志位。在定時(shí)器/計(jì)數(shù)器T0被允許計(jì)數(shù)后,從初值開頭加l計(jì)數(shù),當(dāng)產(chǎn)生計(jì)數(shù)溢出時(shí)由硬件自動(dòng)將TF0位置為1,通過TF0位向CPU申請中斷,始終保持到CPU響應(yīng)該中斷后才由硬件自動(dòng)將TF0位清為0。當(dāng)TF0位為0時(shí),表示T0未計(jì)數(shù)或計(jì)數(shù)未產(chǎn)生溢出。當(dāng)T0工作在不允許中斷時(shí),TF0標(biāo)志可供程序查詢.?TRl:定時(shí)器/計(jì)數(shù)器Tl的啟動(dòng)標(biāo)志位.功能與TR0相l司。

TFl:定時(shí)器/計(jì)數(shù)器Tl的溢出中斷懇求標(biāo)志位。功能與TF0相I司。??2。串行口掌握寄存器SC,ON?

’SCON為串口掌握寄存器,其字節(jié)映像地址為98H,也可以進(jìn)行位尋址。串口的接收和發(fā)送數(shù)據(jù)中斷懇求標(biāo)志位(R1、TI)被鎖存在串口掌握寄存器SCON中,其格式如下:SM0SMlSM2RENTB8RB8TIRI??SCON寄存器各位的含義如下:??R1:串口接收中斷懇求標(biāo)志位.當(dāng)串行以肯定方式接收數(shù)據(jù)時(shí),每接收完一幀數(shù)據(jù),由硬件自動(dòng)將Rl位置為1.而Rl位的清0必須由用戶用指令來完成。?T1:串l3發(fā)送中斷懇求標(biāo)志位。當(dāng)串口以肯定方式發(fā)送數(shù)據(jù)時(shí),每發(fā)送完一幀數(shù)據(jù),由硬件自動(dòng)將Tl位置為l。而Tl位的清0也必須由用戶用指令來完成。??注意:在中斷系統(tǒng)中,將串行口的接收中斷Rl和發(fā)送中斷Tl經(jīng)規(guī)律或運(yùn)算后作為內(nèi)部的一個(gè)中斷源。當(dāng)CPU響應(yīng)串口的中斷懇求時(shí),CPU并不清楚是由接收中斷產(chǎn)生的中斷懇求還是由發(fā)送中斷產(chǎn)生的中斷懇求,所以用戶在編寫串口的中斷服務(wù)程序時(shí),在程序中必須識(shí)別是RI還是Tl產(chǎn)生的中斷懇求,從而執(zhí)行相應(yīng)的中斷服務(wù)程序。??SCON其他位的功能和作用與串行通信有關(guān),將在第6章中介紹。?在上述的特殊功能寄存器中的全部中斷懇求標(biāo)志位,都可以由軟件加以掌握,即用軟件置位或清0。當(dāng)某位置位時(shí),就相當(dāng)于該位對應(yīng)的中斷源向CPU發(fā)出中斷懇求,如果清。就撤銷中斷懇求。??3。2.2中斷允許掌握?

在計(jì)算機(jī)中斷系統(tǒng)中有兩種不同類型的中斷:一類為非屏蔽中斷,另一類為可屏蔽中斷。對于非屏蔽中斷,用戶不能用軟件方法加以禁止,一旦有中斷懇求,CPU就必須予以響應(yīng)。而對于可屏蔽中斷,用戶則可以通過軟件方法來掌握它們是否允許CPU去響應(yīng)。允許CPU響應(yīng)某一個(gè)中斷懇求稱為中斷開放(或中斷允許),不允許CPU響應(yīng)某一個(gè)中斷懇求稱為中斷屏蔽(或中斷禁止).?MCS一51系列單片機(jī)的5個(gè)中斷源都是可屏蔽中斷。由圖3.2可知,CPU對中斷源的中斷開放或中斷屏蔽的掌握是通過中斷允許掌握寄存器IE來實(shí)現(xiàn)的。IE的字節(jié)映像地址為0A8H,既可以按字節(jié)尋址,也可以按位尋址。當(dāng)單片機(jī)復(fù)位時(shí),IE被清為0。?通過對IE的各位的置1或清0操作,實(shí)現(xiàn)開放或屏蔽某個(gè)中斷,也可以通過對EA位的清O來屏蔽全部的中斷源。IE的格式如下。EA-——-——-——ESET1EX1ETOEX0

?IE寄存器各位的含義為:?EA:總中斷允許掌握位。當(dāng)EA位為0時(shí),屏蔽全部的中斷;當(dāng)EA位為l時(shí),開放全部的中斷。

ES:串口中斷允許掌握位.當(dāng)ES位為0時(shí),屏蔽串口中斷;當(dāng)ES位為l且EA位也為1時(shí),開放串口中斷。?ETl:定時(shí)器/計(jì)數(shù)器Tl的中斷允許掌握位.當(dāng)ETl位為0時(shí),屏蔽Tl的溢出中斷;當(dāng)ETl位為l且EA位也為1時(shí),開放Tl的溢出中斷。?EXl:INT1的中斷允許掌握位。當(dāng)EXl位為0時(shí),屏蔽INTl;當(dāng)EXl位為l且EA位也為1時(shí),開放麗.?ET0:定時(shí)器/計(jì)數(shù)器T0的中斷允許掌握位。功能與ETl相同。?EX0:INT0的中斷允許掌握位。功能與EXl相同。比如要開放INTl和Tl的溢出中斷,屏蔽其他中斷,則對應(yīng)的中斷允許掌握字為:l00011008,即8CH。只要將這個(gè)結(jié)果送人IE中,中斷系統(tǒng)就按所設(shè)置的結(jié)果來管理這些中斷源.形成這個(gè)掌握結(jié)果的方法可以對IE按字節(jié)操作,也可以按位操作。??按字節(jié)操作形式按位操作形式?SETBEXl

MOVIE,#8CHSETBETl?SETBEA?思考題3.1:如果要開放外部中斷0和串口的中斷,而屏蔽其他中斷的掌握字是什么?如何來實(shí)現(xiàn)這個(gè)掌握結(jié)果呢???3.2.3中斷優(yōu)先權(quán)管理??在中斷系統(tǒng)中,要使某一個(gè)中斷被優(yōu)先響應(yīng)的話,就要依靠中斷優(yōu)先權(quán)掌握。MCS-51系列單片機(jī)對全部中斷設(shè)置了兩個(gè)優(yōu)先權(quán),每一個(gè)中斷懇求源都可以編程設(shè)置為高優(yōu)先權(quán)中斷或低優(yōu)先權(quán)中斷,從而實(shí)現(xiàn)二級中斷嵌套。為了實(shí)現(xiàn)對中斷優(yōu)先權(quán)的管理,在MCS一51內(nèi)部供應(yīng)了一個(gè)中斷優(yōu)先級寄存器IP,其字節(jié)地址為088H,既可以按字節(jié)形式訪問,又可以按位的形式訪問。其格式如下:?———--—---——-----

PS?PTl?PXl?PT0?PXO???IP寄存器各位的含義如下:?PX0、PT0、PXl、PTl和PS分別為INTO(shè)、TO、INT1、Tl和串口中斷優(yōu)先級掌握位.當(dāng)相應(yīng)的位為0時(shí),所對應(yīng)的中斷源定義為低優(yōu)先級,相反則定義為高優(yōu)先級.?比如要將T0定義為高優(yōu)先級,使CPU優(yōu)先響應(yīng)其中斷,其他中斷均定義為低優(yōu)先級,對應(yīng)的優(yōu)先級掌握字為O00000108,即02H。只要將這個(gè)掌握字送人IP中,CPU就優(yōu)先響應(yīng)TO產(chǎn)生的溢出中斷,并將其他中斷按低優(yōu)先級中斷處理。簡略操作形式如下:

按字節(jié)操作形式按位操作形式??MOVIP,#02HSETBPT0?

在同一個(gè)優(yōu)先級中,各中斷源的優(yōu)先級別由一個(gè)內(nèi)部的硬件查詢序列來決定,所以在同級的中斷中按硬件查詢序列也確定了一個(gè)自然優(yōu)先級,其從高到低的優(yōu)先級排列如下:

INTO—TO—INT1—Tl--串口(RI、TI)

按中斷優(yōu)先權(quán)設(shè)置后,響應(yīng)中斷的基本原則是:?.若多個(gè)中斷懇求同時(shí)有效,CPU優(yōu)先響應(yīng)優(yōu)先權(quán)最高的中斷懇求。?.同級的中斷或更低級的中斷不能中斷CPU正在響應(yīng)的中斷過程。

.低優(yōu)先權(quán)的中斷響應(yīng)過程可以被高優(yōu)先權(quán)的中斷懇求所中斷,CPU會(huì)臨時(shí)中止當(dāng)前低優(yōu)先權(quán)的中斷過程,而優(yōu)先響應(yīng)高優(yōu)先權(quán)中斷。等到高優(yōu)先權(quán)中斷響應(yīng)結(jié)束后再連續(xù)響應(yīng)原低優(yōu)先權(quán)的中斷過程,形成中斷的嵌套。為了實(shí)現(xiàn)上述功能和基本原則,在MCS.51系列單片機(jī)中斷系統(tǒng)的內(nèi)部設(shè)置了兩個(gè)不行尋址的優(yōu)先級觸發(fā)器,一個(gè)是指出CPU是否正在響應(yīng)高優(yōu)先權(quán)中斷的高優(yōu)先級觸發(fā)器,另一個(gè)是指出CPU是否正在響應(yīng)低優(yōu)先權(quán)中斷的低優(yōu)先級觸發(fā)器。當(dāng)高優(yōu)先級觸發(fā)器狀態(tài)為l時(shí),屏蔽全部的中斷懇求;當(dāng)?shù)蛢?yōu)先級觸發(fā)器狀態(tài)為1時(shí),屏蔽全部同級的中斷懇求而允許高優(yōu)先權(quán)中斷的中斷懇求。?MCS一51系列單片機(jī)復(fù)位后,特殊功能寄存器IE、IP的內(nèi)容均為0,由用戶的初始化程序?qū)E、IP進(jìn)行初始化,開放或屏蔽某些中斷并設(shè)置它們的優(yōu)先權(quán)。??3.2.4中斷響應(yīng)?

單片機(jī)一旦工作,并由用戶對各中斷源進(jìn)行使能和優(yōu)先權(quán)初始化編程后,MCS—51系列單片機(jī)的CPU在每個(gè)機(jī)器周期挨次檢查每一個(gè)中斷源。那么,在什么情況下CPU可以準(zhǔn)時(shí)響應(yīng)某一個(gè)中斷懇求呢?若CPU響應(yīng)某一個(gè)中斷懇求,它又是如何工作的呢??1。中斷響應(yīng)條件?單片機(jī)的CPU在每個(gè)機(jī)器周期的最后一個(gè)狀態(tài)周期采樣并按優(yōu)先權(quán)設(shè)置的結(jié)果處理全部被開放中斷源的中斷懇求。一個(gè)中斷源的懇求要得到響應(yīng),必須滿意肯定的條件.?(1)CPU正在處理相同的或更高優(yōu)先權(quán)的中斷懇求。這種情況下只有當(dāng)前中斷響應(yīng)結(jié)?束后才可能響應(yīng)另一個(gè)中斷懇求。?(2)現(xiàn)行的機(jī)器周期不是當(dāng)前所執(zhí)行指令的最后一個(gè)機(jī)器周期。此時(shí)只有在當(dāng)前指令執(zhí)行結(jié)束周期的下一個(gè)機(jī)器周期才可能響應(yīng)中斷懇求.?(3)正在執(zhí)行的指令是中斷返回指令(RETI)或者是對IE、IP的寫操作指令.在這種情況下,只有在這些指令執(zhí)行結(jié)束并至少再執(zhí)行一條其他指令后才可能響應(yīng)中斷懇求.如果上述條件中有一個(gè)存在,CPU將自動(dòng)丟棄對中斷查詢的結(jié)果;若一個(gè)條件也不存在,則將在緊接著的下一個(gè)機(jī)器周期執(zhí)行中斷查詢的結(jié)果,響應(yīng)相應(yīng)的中斷懇求。

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

?如果某一個(gè)中斷被開放,且中斷懇求符合響應(yīng)條件,CPU會(huì)準(zhǔn)時(shí)響應(yīng)該中斷懇求,并按下列過程進(jìn)行處理:?(1)置相應(yīng)的優(yōu)先級觸發(fā)器狀態(tài)為1,指明白CPU正在響應(yīng)的中斷優(yōu)先權(quán)的級別,并通過它屏蔽全部同級或更低級的中斷懇求,允許更高級的中斷懇求.?(2)執(zhí)行一條硬件子程序調(diào)用,清相應(yīng)的中斷懇求標(biāo)志位為0(R1、Tl和電平觸發(fā)的外部中斷除外)。?(3)保護(hù)斷點(diǎn)。即將被中斷程序的斷點(diǎn)位置(Pc的值)壓人堆棧保存起來.?(4)將被響應(yīng)的中斷源的中斷服務(wù)程序入口地址送程序計(jì)數(shù)器PC.各中斷源的中斷服務(wù)程序入口地址的安排情況如表l.4所示。?(5)執(zhí)行相應(yīng)的中斷服務(wù)程序。當(dāng)CPU執(zhí)行完中斷服務(wù)程序中的中斷返回指令后,清相應(yīng)的優(yōu)先級觸發(fā)器為0,然后恢復(fù)斷點(diǎn),即將保存在堆棧中的程序計(jì)數(shù)器PC的值再彈給PC,使CPU再連續(xù)執(zhí)行原來被中斷的程序。??3。中斷響應(yīng)的時(shí)間在MCS。51系列單片機(jī)中的外部中斷懇求信號(hào)在每一個(gè)機(jī)器周期的第5個(gè)狀態(tài)周期的第2個(gè)時(shí)鐘脈沖被采樣并鎖存到相應(yīng)的中斷懇求標(biāo)志中,這個(gè)狀態(tài)等到下一個(gè)機(jī)器周期才被查詢。如果中斷被開放,并符合響應(yīng)條件,CPU接著執(zhí)行一個(gè)硬件子程序調(diào)用指令以轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序入口,該調(diào)用指令需要2個(gè)機(jī)器周期,所以從外部產(chǎn)生中斷懇求到CPU開頭執(zhí)行中斷服務(wù)程序的第l條指令之間,最少需要3個(gè)完整的機(jī)器周期。如果中斷懇求被阻止,則需要更長的時(shí)間。如果已經(jīng)在處理同級或更高級中斷,額外的等待取決于中斷服務(wù)程序的處理過程.如果正處理的指令沒有執(zhí)行到最后的機(jī)器周期,即使是需要時(shí)間最長的乘法或除法指令,所需的額外等待時(shí)間不會(huì)超過3個(gè)機(jī)器周期;如果是CPU正在執(zhí)行中斷返回指令RETl或?qū)Γ蒃、IP的寫操作指令,加上另外一條指令的執(zhí)行時(shí)間,額外的等待時(shí)間不會(huì)多于5個(gè)機(jī)器周期。所以在單一中斷系統(tǒng)中,外部中斷響應(yīng)時(shí)間總是在3~8個(gè)機(jī)器周期。

?3.2.5外部中斷應(yīng)用舉例.??如圖3。3所示,Pl口輸出掌握8只發(fā)光二極管,實(shí)現(xiàn)8位二進(jìn)制計(jì)數(shù)器,對INT0上消滅的脈沖數(shù)進(jìn)行計(jì)數(shù)。??在圖3.3中,由與非門構(gòu)成去抖動(dòng)電路,S開關(guān)每動(dòng)作一次,就輸出一個(gè)脈沖去單片機(jī)的INT0引腳上,讓INT0工作于邊沿觸發(fā)方式,每按一次開關(guān)S,就產(chǎn)生一次中斷,在中斷服務(wù)程序中計(jì)一次數(shù),并把計(jì)數(shù)結(jié)果從Pl口輸出,顯示在發(fā)光二極管上.?程序清單如下:??ORG0000H??START:AJMPMAIN?ORG0003H

AJMPEXINT0?MAIN:SETB?

在上例中,由于主程序和中斷服務(wù)程序都很簡潔,所以在中斷服務(wù)程序中沒有支配現(xiàn)場保護(hù)和恢復(fù),如果在中斷服務(wù)程序中使用的寄存器和存儲(chǔ)單元與主程序有沖突時(shí),必須進(jìn)行現(xiàn)場保護(hù)和恢復(fù)。??思考題3—2:MCS一51單片機(jī)只有兩個(gè)外部中斷,如果需要單片機(jī)處理兩個(gè)以上的外部中斷,該怎樣進(jìn)行呢???3.3MGS-51系列單片機(jī)的定時(shí)器/計(jì)數(shù)器??各種型號(hào)的單片機(jī),不管其功能強(qiáng)弱都供應(yīng)有定時(shí)器/計(jì)數(shù)器,由于定時(shí)器/計(jì)數(shù)器面對掌握領(lǐng)域的單片機(jī)系統(tǒng)是一項(xiàng)極為重要的功能。定時(shí)器/計(jì)數(shù)器可以實(shí)現(xiàn)以下功能:?

(1)定時(shí)操作:產(chǎn)生定時(shí)中斷,實(shí)現(xiàn)定時(shí)采樣輸入信號(hào),定時(shí)掃描鍵盤、顯示器等操作。?(2)測量外部脈沖信號(hào):對脈沖信號(hào)計(jì)數(shù)統(tǒng)計(jì)或測量脈沖信號(hào)的周期等。?(3)定時(shí)輸出:定時(shí)觸發(fā)輸入引腳的電平,使輸出脈沖的寬度、占空比、周期達(dá)到預(yù)定值,其精度不受程序狀態(tài)的影響。?(4)監(jiān)視系統(tǒng)正常工作:一旦系統(tǒng)工作特別時(shí)自動(dòng)產(chǎn)生復(fù)位,重新啟動(dòng)系統(tǒng)正常工作。?MCS-51系列單片機(jī)的51子系列有兩個(gè)l6位定時(shí)器/計(jì)數(shù)器T0、Tl,而52子系列有3個(gè)16位定時(shí)器/計(jì)數(shù)器T0、Tl、T2。本書只學(xué)習(xí)T0、Tl的應(yīng)用。

?3.3.1定時(shí)器/計(jì)數(shù)器仰、Tl的結(jié)構(gòu)??8051單片機(jī)內(nèi)部有兩個(gè)l6位定時(shí)器/計(jì)數(shù)器:定時(shí)器/計(jì)數(shù)器T0和定時(shí)器/計(jì)數(shù)器Tl。它們都具有定時(shí)和計(jì)數(shù)功能,可用于定時(shí)或延時(shí)掌握、對外部大事檢測、計(jì)數(shù)等,其內(nèi)部結(jié)構(gòu)框圖如圖3.4所示.?

1.定時(shí)器/計(jì)數(shù)器T0、Tl的資源?

由圖3.4知,定時(shí)器/計(jì)數(shù)器T0、Tl主要由存放計(jì)數(shù)初值和經(jīng)過值的兩對8位寄存器(TH0、TL0和THl、TLl),方式寄存器TMOD和掌握寄存器TCON組成。其中TH0、TL0專門用于存放定時(shí)器/計(jì)數(shù)器T0的計(jì)數(shù)初值和經(jīng)過值;THl、TLl用于存放定時(shí)器/計(jì)數(shù)器Tl的計(jì)數(shù)初值和經(jīng)過值;TMOD用于設(shè)置T0、Tl的工作方式;TCON中的TR0、TRl用于掌握T0、Tl的運(yùn)行;P3.4、P3.5引腳用于輸入在計(jì)數(shù)器方式下的外部計(jì)數(shù)脈沖信號(hào)。

?定時(shí)器/計(jì)數(shù)器T0、Tl用做定時(shí)器時(shí),對機(jī)器周期進(jìn)行計(jì)數(shù),每經(jīng)過一個(gè)機(jī)器周期計(jì)數(shù)器加1,直到計(jì)數(shù)器計(jì)滿溢出。由于一個(gè)機(jī)器周期由l2個(gè)時(shí)鐘周期組成,所以計(jì)數(shù)頻率為時(shí)鐘頻率的1/12。所以定時(shí)器的定時(shí)時(shí)間不僅與計(jì)數(shù)器的初值即計(jì)數(shù)長度有關(guān),而且還與系統(tǒng)的時(shí)鐘頻率大小有關(guān)。圖3.4定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖?定時(shí)器/計(jì)數(shù)器T0、Tl用做計(jì)數(shù)時(shí),計(jì)數(shù)器對來自輸入引腳To(P3。4)和Tl(P3.5)的外部信號(hào)計(jì)數(shù)。計(jì)數(shù)器對外部脈沖信號(hào)的占空比沒有格外的要求,但必須保證輸入的高電平和低電平信號(hào)至少應(yīng)維持一個(gè)完整的機(jī)器周期。??2.定時(shí)器/計(jì)數(shù)器T0、Tl的方式寄存器TMOD

?特殊功能寄存器TMOD為T0、Tl的工作方式寄存器,其格式如下:TMOD的低4位為T0的方式字段,高4位為Tl的方式字段,它們的含義是完全相同的.?M1M0:T0/Tl的工作方式選擇位,其對應(yīng)關(guān)系如表3.1所示.?表3.1T0/T1工作方式選擇位的意義M1M2工作方式功能說明00方式013位定時(shí)器/計(jì)數(shù)器工作方式01方式116位定時(shí)器/計(jì)數(shù)器工作方式10方式2自動(dòng)再裝入的8位定時(shí)器/計(jì)數(shù)器工作方式11方式3T0:分為兩個(gè)8位定時(shí)器肘數(shù)器,Tl:停止計(jì)數(shù)

C/T:定時(shí)器或計(jì)數(shù)器方式選擇位。當(dāng)C/T位為0時(shí),選擇定時(shí)器方式。在定時(shí)器方式中,以時(shí)鐘信號(hào)的l2分頻信號(hào)作為計(jì)數(shù)信號(hào),也就是每一個(gè)機(jī)器周期定時(shí)器加1。當(dāng)系統(tǒng)的時(shí)鐘信號(hào)頻率確定后,定時(shí)器從初值開頭加1,到定時(shí)器溢出所需要的時(shí)間是固定的,所以稱為定時(shí)器方式。??當(dāng)C/T位置為1時(shí),選擇計(jì)數(shù)器方式。在計(jì)數(shù)器方式中,對外部引腳(T0為P3.4,Tl為P3。5)上的輸入脈沖信號(hào)進(jìn)行計(jì)數(shù)。?GATE:T0/Tl的門控位。當(dāng)GATE位為0時(shí),定時(shí)器肼數(shù)器T0、Tl的運(yùn)行僅受TR0、TRl的掌握,不受外部引腳電平的狀態(tài)的影響。當(dāng)GATE位置為l時(shí),定時(shí)器/計(jì)數(shù)器T0、Tl的運(yùn)行不僅受TR0、TRl的掌握,而且還受到外部引腳電平狀態(tài)的掌握(INT0掌握T0,INT1掌握Tl).即只有當(dāng)INT0(INTl)引腳為高電平且TRO(TRl)位為l時(shí)才啟動(dòng)TO(T1)計(jì)數(shù),當(dāng)INTO(shè)(INTl)引腳為低電平或TR0(TRl)位為0時(shí)均使T0(T1)停止計(jì)數(shù)。?TMOD的字節(jié)映像地址為89H,只能按字節(jié)形式操作,不能進(jìn)行位尋址。復(fù)位時(shí)TMOD全部位均清為0。

比如,要使T0以方式2實(shí)現(xiàn)定時(shí),Tl以方式1進(jìn)行計(jì)數(shù),且均與外部引腳電平無關(guān)的方式掌握字為010100108,即52H;若與外部引腳電平狀態(tài)有關(guān)時(shí)的方式掌握字為ll011010B。即0DAH。3.定時(shí)器/計(jì)數(shù)器T0、Tl的掌握寄存器TCON特殊功能寄存器TCON的高4位存放定時(shí)器/計(jì)數(shù)器T0、Tl的運(yùn)行掌握位和計(jì)數(shù)溢出標(biāo)志位,低4位存放外部中斷的觸發(fā)方式掌握位和鎖存外部中斷的懇求標(biāo)志位。其格式如下:TFlTR1TF0TR0IE1IT1IE0IT0各位的功能和作用已在3。2.1節(jié)中介紹了,在此不再重復(fù).

?3.3.2定時(shí)器/計(jì)數(shù)器T0、Tl的工作方式

?定時(shí)器/計(jì)數(shù)器TO有4種工作方式,而定時(shí)器/計(jì)數(shù)器Tl只有3種工作方式.不同的工作方式其內(nèi)部的結(jié)構(gòu)有所不同,功能上也有差別。??1.方式0??方式0為13位定時(shí)器/計(jì)數(shù)器工作方式,HYPERLINK"http://xb.gxsdxy。cn/jisuanji/jpkc/jxnr/chapter3/flash/tu35%20。swf"\t"_blank"方式0的內(nèi)部結(jié)構(gòu)如圖3。5所示。

方式0由TL0/TLl的低5位和TH0/THl的8位組成。當(dāng)TL0/TLl的低5位產(chǎn)生溢出進(jìn)位時(shí)向TH0/THl進(jìn)位,TH0/THl計(jì)數(shù)溢出時(shí)置溢出中斷懇求標(biāo)志位TF0/TFl為1,向CPU懇求中斷。

由圖3.5可知,在方式0的T0/Tl計(jì)數(shù)脈沖掌握電路中,有一個(gè)方式電子開關(guān)和允許計(jì)數(shù)掌握電子開關(guān)。當(dāng)C/T位為0時(shí),方式電子開關(guān)與上面接通,以時(shí)鐘頻率的l2分頻信號(hào)作為T0/Tl的計(jì)數(shù)信號(hào);當(dāng)C/T位為l時(shí),方式電子開關(guān)與下面接通,此時(shí)以TO(P3.4)/Tl(P3.5)引腳上的輸入脈沖作為T0/Tl的計(jì)數(shù)脈沖.當(dāng)GATE位為0時(shí),由TR0/TRl掌握定時(shí)器工作,當(dāng)GATE位為l時(shí),定時(shí)器不僅受TR0/TRl的掌握,而且還受INT0/INT1引腳上的電平掌握。T0/Tl以方式0工作時(shí)定時(shí)/計(jì)數(shù)初值的計(jì)算方法如下:?當(dāng)T0/Tl以方式0定時(shí)時(shí),假設(shè)時(shí)鐘頻率以fosc表示,定時(shí)初值以a表示,定時(shí)時(shí)間以t表示,那么三者關(guān)系為:

12?t=-----——---(213—a)??fosc

若給定定時(shí)時(shí)間的要求,定時(shí)初值a的大小為:?

12×213-t×fosc?a=--——-—-—-——--—-------—--?12?比如fosc=12MHz,T0的定時(shí)時(shí)間t=5ms,則定時(shí)初值a為:?12×213—5×10-3×12×106

a=---—--———---—-------—-—-—=8192-5000=3192=110001111000B?12?因此,TL0的初值為l8H,TH0的初值為63H,對T0的初始化的子程序?yàn)椋?INTT0:MOVTH0,#63H?MOVTL0.#18H

SETBEA?SETBET0?SETBTRO?當(dāng)T0/Tl以方式0計(jì)數(shù)時(shí),假設(shè)系統(tǒng)所需計(jì)取脈沖的個(gè)數(shù)以x表示,計(jì)數(shù)初值以a表示,則二者的關(guān)系為:?a=213-x

?2.方式1??方式l為16位定時(shí)器/計(jì)數(shù)器工作方式,HYPERLINK”http://x/jisuanji/jpkc/jxnr/chapter3/flash/tu36。swf"\t”_blank"方式1的內(nèi)部結(jié)構(gòu)如圖3.6所示.?方式l由TL0/TLl的8位和TH0/THl的8位組成.當(dāng)TL0/TLl的8位產(chǎn)生溢出進(jìn)位時(shí)向TH0/THl進(jìn)位,TH0/THl計(jì)數(shù)溢出時(shí)置溢出中斷懇求標(biāo)志位TF0/TFl為1,向CPU懇求中斷。圖3.6方式l的內(nèi)部結(jié)構(gòu)圖

由圖3.6可知,方式1的T0/Tl計(jì)數(shù)脈沖掌握電路與它們方式0的情況相像,僅僅是計(jì)數(shù)器的位數(shù)不同而已。

T0/Tl以方式1工作時(shí),定時(shí)/計(jì)數(shù)初值的計(jì)算方法如下:

當(dāng)T0/Tl以方式1定時(shí)時(shí),假設(shè)時(shí)鐘頻率以/?!薇硎?定時(shí)初值以.表示,定時(shí)時(shí)間以t表示,那么三者關(guān)系為:??

12?t=-——---—-—-(216—a)

fosc??若給定定時(shí)時(shí)間的要求,定時(shí)初值a的大小為:?12×216-t×fosc?a=--—--—-—--—-—--------——-?12

?比如fosc=12MHz,Tl的定時(shí)時(shí)間t=20ms,則定時(shí)初值a為:

12×216-20×10—3×12×106

a=---—--—-—-----------——--—=65536-20000=45536=B1E0H?12??因此TLl的初值為0EOH,THl的初值為0B1H,對Tl的初始化的子程序?yàn)椋?INTTl:MOVTHl,#0B1H?MOVTLl,#0EOH

SETBEA

SETBETl

SETBTRl?當(dāng)T0/Tl以方式1計(jì)數(shù)時(shí),假設(shè)系統(tǒng)所需計(jì)取脈沖的個(gè)數(shù)以戈表示,計(jì)數(shù)初值以x表?示,則二者的關(guān)系為:?a=216—x?

3.方式2?

方式2為自動(dòng)恢復(fù)計(jì)數(shù)初值的8位定時(shí)器/計(jì)數(shù)器工作方式.T0/Tl工作于方式0或方式1時(shí),若需要重復(fù)計(jì)數(shù),就需要用戶用指令重新填充初值;而方式2在計(jì)數(shù)器溢出時(shí)會(huì)自動(dòng)地裝入新的計(jì)數(shù)初值,開頭新一輪的計(jì)數(shù)。由于方式0或方式1是通過指令裝入計(jì)數(shù)初值的,而執(zhí)行指令需要時(shí)問,因此,在方式2的定時(shí)時(shí)間比較精準(zhǔn)。HYPERLINK”http://xb.gxsdxy.cn/jisuanji/jpkc/jxnr/chapter3/flash/tu37%20。swf"\t"_blank"方式2的內(nèi)部結(jié)構(gòu)如圖3.7所示。

?

圖3。7方式2的內(nèi)部結(jié)構(gòu)圖

在方式2時(shí),TL0/TLl作為8位計(jì)數(shù)器,TH0/THl為自動(dòng)恢復(fù)初值的8位計(jì)數(shù)器.當(dāng)TL0/TLl計(jì)數(shù)發(fā)生溢出時(shí),一方面置溢出中斷懇求標(biāo)志TF0/TFl為1,向CPU懇求中斷,同時(shí)又將T0/THl的內(nèi)容送入TL0/TLl,使T0/Tl從初值開頭重新加l計(jì)數(shù)。因此T0/Tl工作于方式2時(shí),定時(shí)精度高,但定時(shí)時(shí)間范圍小。

由圖3.7可知,方式2的TO/T1計(jì)數(shù)掌握與方式0和方式1完全相同,不同之處在于當(dāng)CPU響應(yīng)T0/Tl的溢出中斷后會(huì)自動(dòng)將TH0/THl的內(nèi)容填充到TL0/TLl.?T0/Tl以方式2工作時(shí),定時(shí)/計(jì)數(shù)初值的計(jì)算方法如下:

當(dāng)T0/Tl以方式2定時(shí)時(shí),假設(shè)時(shí)鐘頻率以fosc表示,定時(shí)初值以a表示,那么三者關(guān)系為:

12?t=-----——--—(28-a)

fosc

若給定定時(shí)時(shí)間的要求,定時(shí)初值a的大小為:?12×28-t×fosc?a=—--—----—-------——--—--—?12

?比如fosc=12MHz,Tl的定時(shí)時(shí)間t=200×μs,則定時(shí)初值a為:?12×28-20×10—3×12×106

a=—---—------——-——-—----——-=256-200=56?12??因此,TL0的初值為56,TH0的初值為56,對T0的初始化的子程序?yàn)椋?

INTT0:MOVTH0,#56?MOVTL0,#56

SETBEA

SETBET0?SETBTR0

當(dāng)T0/Tl以方式0計(jì)數(shù)時(shí),假設(shè)系統(tǒng)所需計(jì)取脈沖的個(gè)數(shù)以菇表示,計(jì)數(shù)初值以。表示,則二者的關(guān)系為:??a=28—x??4.方式3

方式3為兩個(gè)8位定時(shí)器肘數(shù)器工作方式,它只適用于定時(shí)器/計(jì)數(shù)器T0,若將Tl設(shè)置為方式3,則Tl將停止計(jì)數(shù).HYPERLINK"http://xb.gxsdxy。cn/jisuanji/jpkc/jxnr/chapter3/flash/tu38%20%20。swf"\t”_blank"方式3內(nèi)部規(guī)律結(jié)構(gòu)如圖3。8所示。由圖3.8可知,方式3是將T0拆分為兩個(gè)8位定時(shí)器/計(jì)數(shù)器。其中8位計(jì)數(shù)器TL0,使用原來T0的掌握位(C/T、GATE、TR0、INT0)形成一個(gè)8位的定時(shí)器/計(jì)數(shù)器,它既可以定時(shí)(對時(shí)鐘頻率的l2分頻信號(hào)進(jìn)行計(jì)數(shù)),也可以實(shí)現(xiàn)計(jì)數(shù);而8位計(jì)數(shù)器TH0,占用原來Tl的掌握位(TRl、TFl),它只能對內(nèi)部計(jì)數(shù)脈沖進(jìn)行計(jì)數(shù),其運(yùn)行僅受TRl位的掌握,而與外部引腳INTl的電平狀態(tài)無關(guān)。?定時(shí)器/計(jì)數(shù)器T0工作于方式3時(shí),定時(shí)器/計(jì)數(shù)器Tl仍可設(shè)置為方式0、方式1、方式2.但由于TRl、TFl已被定時(shí)器TH0占用,此時(shí)定時(shí)器/計(jì)數(shù)器僅由掌握位C/T設(shè)置其定時(shí)或計(jì)數(shù)方式,當(dāng)計(jì)數(shù)器計(jì)滿發(fā)生溢出時(shí),只能將輸出送往串行口。在這種情況下,Tl一般用做串行口波特率發(fā)生器,或不需要中斷的場合.?方式3的兩個(gè)8位定時(shí)器/計(jì)數(shù)器的定時(shí)或計(jì)數(shù)初值的計(jì)算方法與方式2完全相同,不再重復(fù)。?

3.3。3定時(shí)器/計(jì)數(shù)器應(yīng)用舉例??MCS—51系列單片機(jī)的定時(shí)器/計(jì)數(shù)器均是可編程的,在利用定時(shí)器/計(jì)數(shù)器進(jìn)行定時(shí)或計(jì)數(shù)之前,必必要通過軟件對它們進(jìn)行初始化。初始化包括的內(nèi)容如下:?·依據(jù)實(shí)際需要確定工作方式,對方式寄存器TMOD初始化。即依據(jù)實(shí)際的需要選擇工作方式,形成相應(yīng)的方式掌握字,在程序中將方式掌握字填充給TMOD.?·依據(jù)實(shí)際定時(shí)/計(jì)數(shù)的需要確定初值,進(jìn)行定時(shí)/計(jì)數(shù)初值的填充。

·依據(jù)需要開放相應(yīng)的中斷,即對中斷允許掌握寄存器IE進(jìn)行初始化.?·啟動(dòng)定時(shí)器/計(jì)數(shù)器工作,即依據(jù)需要對TCON進(jìn)行初始化.?

例3。1利用T0產(chǎn)生lms的定時(shí),使Pl。0引腳輸入一個(gè)周期為2ms,占空比為1:1的方波信號(hào)(假定時(shí)鐘頻率f?!?12MHz).??解:分析要形成周期為2ms的方波信號(hào),只要利用T0產(chǎn)生定時(shí),每隔1ms將Pl.0引腳狀態(tài)取反即可。

(1)確定工作方式:T0要實(shí)現(xiàn)lms的定時(shí),方式0和方式1均可,在此選擇方式0;而在此例中沒有對Tl提出任何要求,所以TMOD的高4位任意。因此方式掌握字為:00000000B=00H.

(2)確定定時(shí)初值:?

圖3。9例3.1的掌握程序流程圖

例3.2采納定時(shí)器掌握Pl.0引腳輸出一個(gè)周期為2分鐘,占空比為1:1的方波信號(hào)(時(shí)鐘頻率為12MHz)。?解:要形成周期為2分鐘的方波信號(hào),只要每隔l分鐘將Pl.0引腳的狀態(tài)取反即可。而T0/Tl無論是采納方式0、方式1或方式2,都不行能直接實(shí)現(xiàn)1分鐘的定時(shí)時(shí)間。對于這種長時(shí)間的定時(shí),一般可以采納兩種方法:一種方法是采納定時(shí)器定時(shí)加軟件計(jì)數(shù)方法來實(shí)現(xiàn)長定時(shí),這種方法省硬件資源。另一種方法是將兩個(gè)定時(shí)器/計(jì)數(shù)器合用實(shí)現(xiàn)長定時(shí)方法,這種方法占用兩個(gè)定時(shí)器/計(jì)數(shù)器,其中一個(gè)作為定時(shí)器,另一個(gè)作為計(jì)數(shù)器,所以硬件資源占用多,而且要進(jìn)行外部連線。

下面采納定時(shí)器定時(shí)加軟件計(jì)數(shù)的方法來實(shí)現(xiàn)長定時(shí)功能.?假設(shè)用Tl定時(shí)50ms,軟件計(jì)數(shù)1200次,實(shí)現(xiàn)l分鐘定時(shí).為此用20H單元作50ms計(jì)數(shù)單元,計(jì)滿20次為ls;21H單元為秒計(jì)數(shù)單元,計(jì)滿60次為l分鐘。?(1)方式掌握字:要實(shí)現(xiàn)50ms的定時(shí)只有Tl工作于方式1,所以方式掌握字為:00010000B=10H.?(2)定時(shí)初值t??;圖3。10例3。2的掌握程序流程圖

(3)程序流程圖如圖3.10所示,程序清單如下:??ORG0000H?LJMPMAIN?ORG001BH?LJMPINTTl?MAIN:MOVSP,#70H;設(shè)置堆棧區(qū)?MOVTMOD,#10H;送方式掌握字?MOVTHl,#3CH;送定時(shí)初值?MOVTLl,#080H?SETBEA開放Tl中斷?SETBETl?ETBTRl啟動(dòng)Tl開頭定時(shí)

MOV20H,#20;秒單元賦初值

MOV21H,#60;分單元賦初值

SJMP$;等待??INTTl:MOVTHl,#3CH;重裝初值?MOVTLl.#0BOH?DJNZ20H,N0;ls未到,轉(zhuǎn)NO?MOV20H,#20?DJNZ21H,N0;1分鐘未到,轉(zhuǎn)NO?MOV21H,#60

CPLPl.0?N0:RETI?END?在上述兩個(gè)例子中,中斷服務(wù)程序都要進(jìn)行計(jì)數(shù)器初值重裝等操作.這樣在定時(shí)器溢動(dòng)身出中斷懇求到重裝完初值并在此基礎(chǔ)上重新開頭計(jì)數(shù)定時(shí),總有肯定的時(shí)間間隔,造成定時(shí)時(shí)間多增加了若干微秒的時(shí)間。如果采納工作方式2,可避開重裝初值所造成的誤差,使定時(shí)器定時(shí)比較精確,但方式2的計(jì)數(shù)長度只有8位,定時(shí)時(shí)間較短.

前面兩個(gè)例子是定時(shí)器方式的應(yīng)用,比較起來,方式0沒有可取之處,如果要求定時(shí)時(shí)間長時(shí),直接就使用方式l,而不會(huì)去考慮使用方式0。通過兩個(gè)例子,基本掌握了定時(shí)中斷該如何應(yīng)用,實(shí)際上定時(shí)器肼數(shù)器的中斷懇求標(biāo)志也可以供查詢使用,請看例3。3。?例3。3將T0對外部脈沖進(jìn)行計(jì)數(shù),每計(jì)滿100次后從Pl.0輸出寬度為1ms的高電平,如此循環(huán)下去(時(shí)鐘頻率為6MHz)。?解:上述問題是T0交替工作于計(jì)數(shù)器方式和定時(shí)器方式,先計(jì)數(shù),計(jì)滿

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論