版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
5.1中斷概述5.1.1中斷相關(guān)的概念一、中斷的概念1.什么是中斷我們從一個生活中的例子引入。你正在家中看書,突然電話鈴響了,你放下書本,去接電話,和來電話的人交談,然后放下電話,回來繼續(xù)看書。這就是生活中的“中斷”現(xiàn)象,就是正常的工作過程被外部的事件打斷了。仔細(xì)研究一下生活中的中斷,對于我們學(xué)習(xí)單片機(jī)的中斷也很有好處。下一頁返回5.1中斷概述
2.什么可以引起中斷生活中很多事件可以引起中斷,譬如有人按了門鈴,電話鈴響,定的鬧鐘鬧響,爐子上的水燒開了等事件。通常把可以引起中斷的事件稱為中斷源。單片機(jī)中也有一些可以引起中斷的事件,在8031單片機(jī)中一共有5個,其中包括:兩個外部中斷,兩個計(jì)數(shù)器/定時器中斷,一個串行口中斷。二、中斷的嵌套與優(yōu)先級處理設(shè)想一下,我們正在看書,電話鈴響了,同時又有人按了門鈴,我們該先做哪件事呢?上一頁下一頁返回5.1中斷概述
如果正在等一個很重要的電話,一般我們不會去理會門鈴。反之,如果正在等一個重要的客人,則可能就不會去理會電話了。如果不是這兩者(既不等電話,也不是等人上門),我們可能會按我們通常的習(xí)慣去處理??偠灾@里存在一個優(yōu)先級的問題。單片機(jī)中也是如此,也有優(yōu)先級的問題。優(yōu)先級的問題不僅會發(fā)生在兩個中斷同時產(chǎn)生的情況,同樣會發(fā)生在一個中斷已經(jīng)產(chǎn)生,又有一個中斷產(chǎn)生的情況。比如,我們正接電話,出現(xiàn)有人按門鈴的情況;又或者,我們開門正與人交談,隨后又有電話響了的情況。思考一下,遇到此類問題,我們會如何處理呢?上一頁下一頁返回5.1中斷概述
三、中斷的響應(yīng)過程我們繼續(xù)看書,當(dāng)有事件產(chǎn)生,進(jìn)入中斷之前我們必須先記住現(xiàn)在看到書的第幾頁了,或者拿一個書簽放在當(dāng)前頁的位置,然后去處理其他不同的事情(因?yàn)樘幚硗炅?,我們還要回來繼續(xù)看書):電話鈴響我們要到放電話的地方去,門鈴響我們要到門那邊去,也就是說對于不同的中斷,我們要在不同的地點(diǎn)處理,而這個地點(diǎn)通常是固定的。單片機(jī)處理類似事件也是采用的這種方法;8031單片機(jī)中有5個中斷源,每個中斷產(chǎn)生后都會到一個固定的地方去處理相應(yīng)的中斷程序。當(dāng)然,在去固定的位置之前,首先要保存下面將執(zhí)行的指令的地址,以便處理完中斷后回到原來的地方繼續(xù)往下執(zhí)行程序。具體來講,中斷響應(yīng)可以分為以下幾個步驟:
上一頁下一頁返回5.1中斷概述
(1)保護(hù)斷點(diǎn),即保存下一個將要執(zhí)行的指令的地址,就是把這個地址送入堆棧。(2)尋找中斷入口,根據(jù)不同的中斷源所產(chǎn)生的中斷,查找不同的入口地址。以上工作是由計(jì)算機(jī)自動完成的,與編程者無關(guān)。在這個入口地址處存放有中斷服務(wù)子程序(這是程序編寫時放在那兒的,如果沒把中斷程序放在那兒,中斷程序就不能被執(zhí)行到)。(3)執(zhí)行中斷處理子程序。(4)中斷返回:執(zhí)行完中斷返回指令后,就從中斷處返回到主程序,繼續(xù)執(zhí)行后面語句。單片機(jī)究竟是如何找到中斷程序所在的位置,又是如何正確地返回呢?稍后再談。上一頁下一頁返回5.1中斷概述
由上述生活中的例子,可以總結(jié)出:中斷是指當(dāng)計(jì)算機(jī)執(zhí)行正常程序時,系統(tǒng)中出現(xiàn)某些急需處理的異常情況和特殊請求,這時CPU暫時中止正在執(zhí)行的程序,轉(zhuǎn)去對隨機(jī)發(fā)生的更緊迫事件進(jìn)行處理,處理完畢后,CPU自動返回原來的程序繼續(xù)執(zhí)行,這個過程稱為中斷。8051單片機(jī)有5個中斷源,有兩個中斷優(yōu)先級,每個中斷源的優(yōu)先級可以編程控制。中斷允許受到CPU開中斷和中斷源開中斷的兩級控制。上一頁下一頁返回5.1中斷概述
5.1.2中斷源一、中斷源中斷源是指任何引起單片機(jī)中斷的事件,一般一個單片機(jī)允許有許多個中斷源,8051的單片機(jī)具有5個中斷源,它們分別是:(1)外部中斷0,由(P3.2)輸入??捎蒊T0選擇其觸發(fā)方式,當(dāng)CPU檢測到(P3.2)引腳上出現(xiàn)有效中斷信號時,中斷標(biāo)志IE0置位,并向CPU申請中斷。(2)外部中斷1,由(P3.3)輸入??捎蒊T1選擇其觸發(fā)方式,當(dāng)CPU檢測到(P3.3)引腳上出現(xiàn)有效中斷信號時,中斷標(biāo)志IE1置位,并向CPU申請中斷。上一頁下一頁返回5.1中斷概述
(3)片內(nèi)定時器/計(jì)數(shù)器0溢出中斷。當(dāng)片內(nèi)定時器/計(jì)數(shù)器0發(fā)生溢出時,置位TF0,并向CPU申請中斷。(4)片內(nèi)定時器/計(jì)數(shù)器1溢出中斷。當(dāng)片內(nèi)定時器/計(jì)數(shù)器1發(fā)生溢出時,置位TF1,并向CPU申請中斷。(5)片內(nèi)串行口發(fā)送/接收中斷。當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)時置位TI或者當(dāng)串行口接收完一幀串行數(shù)據(jù)時置位RI,并向CPU申請中斷。二、中斷請求標(biāo)志位為了確定上述中斷源是否產(chǎn)生中斷請求,中斷系統(tǒng)對應(yīng)設(shè)置了多個中斷請求觸發(fā)器(標(biāo)志位)來實(shí)現(xiàn)記憶。這些中斷源請求標(biāo)志位分別由特殊功能寄存器TCON和SCON的相應(yīng)位進(jìn)行鎖存。上一頁下一頁返回5.1中斷概述
1.定時器/計(jì)數(shù)器控制寄存器TCON特殊功能寄存器TCON、鎖存定時器/計(jì)數(shù)器T0與定時器/計(jì)數(shù)器T1的溢出中斷標(biāo)志和外部中斷0與外部中斷1的中斷標(biāo)志,與中斷有關(guān)的各位定義如下:2.串行口控制寄存器SCON串行口控制寄存器SCON的各位定義如下:上一頁下一頁返回5.1中斷概述
RI:串行口接收中斷請求標(biāo)志位。當(dāng)串行口接收完一幀數(shù)據(jù)后請求中斷,由硬件置位(RI=1),RI必須由軟件清零。TI:串行口發(fā)送中斷請求標(biāo)志位。當(dāng)串行口發(fā)送完一幀數(shù)據(jù)后請求中斷,由硬件置位(TI=1),TI必須由軟件清零。三、中斷的控制中斷的控制主要實(shí)現(xiàn)中斷的開關(guān)管理和中斷優(yōu)先級的管理,這個管理主要通過對特殊功能寄存器IE和IP的編程來實(shí)現(xiàn)。1.中斷允許寄存器IE上一頁下一頁返回5.1中斷概述
在中斷系統(tǒng)中,總中斷以及某個分中斷源的允許和屏蔽都是由中斷允許寄存器IE來控制的,IE的狀態(tài)可由軟件設(shè)定。當(dāng)某位設(shè)定為1時,相應(yīng)的中斷源被允許;當(dāng)某位設(shè)定為0時,相應(yīng)的中斷源被屏蔽。CPU復(fù)位時,IE各位清零,所有中斷被禁止。特殊功能寄存器IE的各位定義如下:上一頁下一頁返回5.1中斷概述
EX0、EX1:外部中斷0、1的中斷允許位。1—外部中斷0、1開中斷;0—外部中斷0、1關(guān)中斷。ET0、ET1:定時器/計(jì)數(shù)器0、1(T/C0、T/C1)溢出中斷允許位。1—T/C0、T/C1開中斷;0—T/C0、T/C1關(guān)中斷。ES:串行口中斷允許位。1—串行口開中斷;0—串行口關(guān)中斷。ET2:定時器/計(jì)數(shù)器2(T/C2)溢出中斷允許位。1—T/C2開中斷;0—T/C2關(guān)中斷。EA:CPU開/關(guān)中斷控制位。1—CPU開中斷;0—CPU關(guān)中斷。8051復(fù)位時,IE被清零,此時CPU關(guān)中斷,各中斷源的中斷也被屏蔽。上一頁下一頁返回5.1中斷概述
2.中斷優(yōu)先級寄存器IP當(dāng)系統(tǒng)中多個中斷源同時發(fā)出請求中斷時,CPU將按照中斷源的優(yōu)先級別,按由高到低的順序分別響應(yīng)。特殊功能寄存器IP的各位定義如下:PX0、PX1:外部中斷0、1中斷優(yōu)先級控制位。1—高優(yōu)先級;0—低優(yōu)先級。PT0、PT1:定時器/計(jì)數(shù)器0、1中斷優(yōu)先級控制位。1—高優(yōu)先級;0—低優(yōu)先級。上一頁下一頁返回5.1中斷概述
PS:串行口中斷優(yōu)先級控制位。1—高優(yōu)先級;0—低優(yōu)先級。8051復(fù)位時,IP被強(qiáng)制清零,5個中斷源都在同一優(yōu)先級。此時,如果其中幾個中斷源同時產(chǎn)生中斷請求,那么CPU將會按照片內(nèi)硬件優(yōu)先級的順序,遵循由高到低的原則按順序響應(yīng)中斷。硬件優(yōu)先級由高到低的順序如下:上一頁下一頁返回5.1中斷概述
5.1.3中斷響應(yīng)一、中斷響應(yīng)的條件講到這兒,我們依然對于單片機(jī)響應(yīng)中斷感到神奇,我們可以響應(yīng)外界的事件,是因?yàn)槲覀冇卸喾N“傳感器”——眼、耳可以接收不同的信息。單片機(jī)是如何做到這點(diǎn)的呢?其實(shí)說穿了,一點(diǎn)都不稀奇,MCS-51工作時,在每個機(jī)器周期中都會去查詢一下各個中斷標(biāo)記,看它們是否是“1”,如果是1,就說明有中斷請求了,所以判斷是否有中斷,其實(shí)是需要查詢的,不過是每個周期都查一下而已。這要換成人來說,就相當(dāng)于你在看書的時候,每一秒鐘都會抬起頭來看一看,查問一下,是不是有人按門鈴,是否有電話……上一頁下一頁返回5.1中斷概述
了解上述中斷過程之后,就不難理解中斷響應(yīng)的條件。在下列三種情況之一時,CPU將封鎖對中斷的響應(yīng):(1)CPU正在處理一個同級或更高級別的中斷請求。(2)現(xiàn)行的機(jī)器周期不是當(dāng)前正執(zhí)行指令的最后一個周期。我們知道,單片機(jī)有單周期、雙周期、三周期指令,如果當(dāng)前執(zhí)行指令是單字節(jié)則沒有影響,如果是雙字節(jié)或四字節(jié)的,就要等整條指令都執(zhí)行完了,才能響應(yīng)中斷(因?yàn)橹袛嗖樵兪窃诿總€機(jī)器周期都可能查到的)。上一頁下一頁返回5.1中斷概述
(3)當(dāng)前正執(zhí)行的指令是返回指令(RETI)或訪問IP、IE寄存器的指令,則CPU至少要再執(zhí)行一條指令才應(yīng)中斷,這些都是與中斷有關(guān)的。如果正訪問IP、IE寄存器則可能會開、關(guān)中斷或改變中斷的優(yōu)先級;如果正執(zhí)行中斷返回指令則說明本次中斷還沒有處理完,所以要等本指令處理結(jié)束,再執(zhí)行一條指令才可以響應(yīng)中斷。二、中斷響應(yīng)過程CPU響應(yīng)中斷時,首先把當(dāng)前指令的下一條指令(就是中斷返回后將要執(zhí)行的指令)的地址送入堆棧。然后根據(jù)中斷標(biāo)記,將相應(yīng)的中斷入口地址送入PC。PC是程序指針,CPU取指令需要根據(jù)PC中的值,PC中是什么值,就會到什么地方去取指令,所以程序就會轉(zhuǎn)到中斷入口處繼續(xù)執(zhí)行。這些工作都是由硬件來完成的,不必我們?nèi)タ紤]。上一頁下一頁返回5.1中斷概述
這里還有個問題,值得讀者注意:每個中斷向量地址之間只間隔了8個單元,如0003H~000BH,在如此少的空間中如何完成中斷服務(wù)子程序呢?通常情況下,編程人員會在中斷處放一條長轉(zhuǎn)移指令LJMP,這樣就可以使中斷服務(wù)子程序被靈活地安排在64KB程序存儲器的任何地方了。上一頁下一頁返回5.1中斷概述
一個完整的主程序應(yīng)該是這樣的:ORG0000HLJMPSTARTORG0003HLJMPINT0;轉(zhuǎn)外中斷0ORG000BHRETI;沒有用定時器0中斷,在此放一條RETI,萬一“不小心”產(chǎn)生了中斷,也不會有太大的后果上一頁下一頁返回5.1中斷概述
三、中斷的返回中斷程序完成后,一定要執(zhí)行一條RETI指令,執(zhí)行這條指令后,CPU將會把堆棧中保存著的地址取出,送回PC,之后程序就會從主程序的中斷處繼續(xù)往下執(zhí)行。注意:CPU所做的保護(hù)工作是很有限的,只保護(hù)了一個地址,而其他的所有內(nèi)容都不保護(hù),所以如果在主程序中用到了如A、PSW等,在中斷程序中又要用它們,還要保證回到主程序后這里面的數(shù)據(jù)還是沒執(zhí)行中斷以前的數(shù)據(jù),就得自己保護(hù)起來。上述是用匯編語言編寫的,而當(dāng)采用C語言時,則屏蔽了這些細(xì)節(jié)。上一頁下一頁返回5.1中斷概述
四、中斷服務(wù)函數(shù)的一般形式C51編譯器支持在C源程序中直接開發(fā)中斷程序,使用該擴(kuò)展屬性的函數(shù)定義語法如下:返回值函數(shù)名interruptn(usingn)其中關(guān)鍵字interrupt后面的n對應(yīng)的是中斷號。n的取值為0~4;C51中擴(kuò)展了一個關(guān)鍵字using,using后面的n專門用來選擇89C51的4個不同的工作寄存器區(qū),using是可選項(xiàng),如果不用該選項(xiàng),中斷函數(shù)中所有的工作寄存器的內(nèi)容將會被保存到堆棧中。上一頁下一頁返回5.1中斷概述
5.1.4中斷寄存器組切換高優(yōu)先級中斷可以中斷正在處理的低優(yōu)先級程序,因而必須注意寄存器組。除非可以確定未使用R0~R7(用匯編程序),最好給每種優(yōu)先級程序分配不同的寄存器組。KeilC51編譯器可以特殊指定寄存器獨(dú)立的函數(shù)。當(dāng)前工作寄存器可由PSW中兩位設(shè)置,也可使用using指定,“using”后的變量為一個0~31的常整數(shù)?!皍sing”不允許用于外部函數(shù),它對函數(shù)的目標(biāo)代碼影響如下:①函數(shù)入口處將當(dāng)前寄存器組保留;②使用指定的寄存器組;③函數(shù)退出前寄存器組恢復(fù)。上一頁下一頁返回5.1中斷概述
中斷服務(wù)函數(shù)的完整語法如下:返回值函數(shù)名([參數(shù)])[模式][重入]interruptn[usingn]“interrupt”后接一個0~31的常整數(shù),不允許使用表達(dá)式。中斷不允許用于外部函數(shù),它對函數(shù)目標(biāo)代碼影響如下:①當(dāng)調(diào)用函數(shù)時,SFR中的ACC、B、DPH、DPL和PSW(當(dāng)需要時)入棧;②如果不使用寄存器組切換,中斷函數(shù)所需的所有工作寄存器都應(yīng)入棧;③函數(shù)退出前,所有的寄存器內(nèi)容入棧;④函數(shù)由8051的指令RETI終止。上一頁下一頁返回5.1中斷概述
5.1.5中斷的編程當(dāng)外部中斷源比較多時,可以在8051的一個外部中斷請求線上(即相應(yīng)的中斷引腳上)實(shí)現(xiàn)多個中斷響應(yīng),此時可將這些中斷源同時分別接到輸入端口的各位,然后在中斷服務(wù)程序中采用查詢法順序檢索引起中斷的中斷源。但這種方法在中斷源較多時查詢的時間太長,CPU中斷相應(yīng)的速度會明顯降低。若用一個優(yōu)先權(quán)解碼芯片74LS148把多個中斷源信號作為一個中斷來處理效果會很好。上一頁返回5.2定時器/計(jì)數(shù)器(T/C)5.2.1定時器/計(jì)數(shù)器概述一、計(jì)數(shù)概念的引入選票的統(tǒng)計(jì)方法:畫“正”。這就是計(jì)數(shù),生活中計(jì)數(shù)的例子處處可見,例如錄音機(jī)上的計(jì)數(shù)器、家里用的電度表、汽車上的里程表等。再舉一個工業(yè)生產(chǎn)中的例子,線纜行業(yè)在電線生產(chǎn)出來之后要計(jì)米,也就是測量長度,怎么測法呢?用尺量?不現(xiàn)實(shí),太長不說,要一邊做一邊量呢,怎么辦呢?行業(yè)中有很巧妙的方法,用一個周長是1米的輪子,將電纜繞在上面一周,由線帶輪轉(zhuǎn),這樣輪轉(zhuǎn)一周不就是線長1米嘛,所以只要記下輪轉(zhuǎn)了多少圈,就可以知道走過的線有多長了。下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
二、計(jì)數(shù)器的容量從一個生活中的例子看起:一個水盆在水龍頭下,水龍頭沒關(guān)緊,水一滴滴地滴入盆中。水滴不斷落下,盆的容量是有限的,過一段時間之后,水就會逐漸變滿。錄音機(jī)上的計(jì)數(shù)器最多只計(jì)到999……那么單片機(jī)中的計(jì)數(shù)器有多大的容量呢?8031單片機(jī)中有兩個計(jì)數(shù)器,分別稱之為T0和T1,這兩個計(jì)數(shù)器分別是由兩個8位的RAM單元組成的,即每個計(jì)數(shù)器都是16位的計(jì)數(shù)器,最大的計(jì)數(shù)量是65536。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
三、定時8031中的計(jì)數(shù)器除了可以作為計(jì)數(shù)之用外,還可以用作時鐘。時鐘的用途當(dāng)然很大,如用于打鈴器、電視機(jī)定時關(guān)機(jī)、空調(diào)定時開關(guān)等,那么計(jì)數(shù)器是如何作為定時器來用的呢?一個鬧鐘,若將它定時在1個小時后鬧響,換言之,也可以說是秒針走了3600次,所以時間就轉(zhuǎn)化為秒針走的次數(shù),也就是計(jì)數(shù)的次數(shù)了,可見,計(jì)數(shù)的次數(shù)和時間之間的確十分相關(guān)。那么它們的關(guān)系是什么呢?那就是秒針每一次走動的時間正好是1秒。定時控制方法如圖5.3所示。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
結(jié)論:只要計(jì)數(shù)脈沖的間隔相等,則計(jì)數(shù)值就代表了時間的流逝。由此可知,單片機(jī)中的定時器和計(jì)數(shù)器是一個東西,只不過計(jì)數(shù)器是記錄外界發(fā)生的事情,而定時器則是由單片機(jī)提供一個非常穩(wěn)定的計(jì)數(shù)源。那么提供定時器的計(jì)數(shù)源是什么呢?由圖5.3可知,是由單片機(jī)的晶振經(jīng)過12分頻后獲得的一個脈沖源。晶振的頻率當(dāng)然很準(zhǔn),所以這個計(jì)數(shù)脈沖的時間間隔也很準(zhǔn)。問題:一個12MHz的晶振,它提供給計(jì)數(shù)器的脈沖時間間隔是多少呢?當(dāng)然這很容易,就是12MHz/12等于1MHz,也就是1微秒。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
結(jié)論:計(jì)數(shù)脈沖的間隔與晶振有關(guān),12MHz的晶振,計(jì)數(shù)脈沖的間隔是1微秒。四、溢出再來看滴水的例子,當(dāng)水不斷落下,盆中的水不斷變滿,最終有一滴水使得盆中的水滿了,這時如果再有一滴水落下,就會發(fā)生什么現(xiàn)象呢?水會漫出來,用個術(shù)語來講就是“溢出”。水溢出是流到地上,而計(jì)數(shù)器溢出后將使得TF0變?yōu)椤?”。至于TF0是什么稍后再談。一旦TF0由0變成1,表示產(chǎn)生了變化,產(chǎn)生了變化就會引發(fā)事件,就像定時的時間一到,鬧鐘就會響一樣。至于會引發(fā)什么事件,后面再介紹,現(xiàn)在來研究另一個問題:要有多少個計(jì)數(shù)脈沖才會使TF0由0變?yōu)?。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
五、任意定時及計(jì)數(shù)的方法剛才已研究過,計(jì)數(shù)器的容量是16位,也就是最大的計(jì)數(shù)值為65536,因此計(jì)數(shù)計(jì)到65536就會產(chǎn)生溢出。但在現(xiàn)實(shí)生活中,經(jīng)常會有少于65536個計(jì)數(shù)值的要求,如包裝線上,一打?yàn)?2瓶,一瓶藥片為100粒,怎么樣來滿足這個要求呢?提示:如果是一個空的盆要10000滴水滴進(jìn)去才會滿,若在開始滴水之前就先放入一勺水,還需要10000滴嗎?因此,可以采用預(yù)置數(shù)的方法,若要計(jì)100,那就先預(yù)置65436個脈沖,再來100個脈沖,就滿足了65536個脈沖的要求了。定時也是如此,每個脈沖是1微秒,則計(jì)滿65536個脈沖需時65.536毫秒,但現(xiàn)在若只要10毫秒就可以了,怎么辦?上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
10毫秒為10000微秒,所以,只要在計(jì)數(shù)器里面預(yù)置55536就可以了。8051系列單片機(jī)至少有兩個16位內(nèi)部定時器/計(jì)數(shù)器,它們既可以編程為定時器使用,也可以編程為計(jì)數(shù)器使用。若是計(jì)數(shù)內(nèi)部晶振驅(qū)動時鐘,它是定時器;若是計(jì)數(shù)8051輸入引腳的脈沖信號,它是計(jì)數(shù)器。8051的T/C是加1計(jì)數(shù)器,當(dāng)T/C工作在定時器時,對振蕩源12分頻的脈沖計(jì)數(shù),即每個機(jī)器周期計(jì)數(shù)值加1當(dāng)晶振為6MHz時,計(jì)數(shù)頻率為500kHz,每2μs計(jì)數(shù)值加1;當(dāng)T/C工作在計(jì)數(shù)器時,計(jì)數(shù)脈沖來自外部脈沖輸入引腳T0(P3.4)或T1(P3.5),上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
當(dāng)T0或T1引腳上負(fù)跳變時計(jì)數(shù)值加1,識別引腳上的負(fù)跳變需兩個機(jī)器周期,即24個振蕩周期,所以T0或T1引腳輸入的可計(jì)數(shù)外部脈沖的最高頻率為。當(dāng)晶振為12MHz時,最高計(jì)數(shù)頻率為500kHz,高于此頻率將會出現(xiàn)計(jì)數(shù)錯誤。5.2.2定時器/計(jì)數(shù)器的控制80C51單片機(jī)定時器/計(jì)數(shù)器的工作由兩個特殊功能寄存器來控制。TCON用來控制其啟動和中斷申請;TMOD用于設(shè)置其工作方式。1.定時器/計(jì)數(shù)器控制寄存器TCONTCON的低四位與外部中斷的設(shè)置有關(guān),已在前面一節(jié)介紹。TCON的高四位用于控制定時器/計(jì)數(shù)器的啟動和中斷申請。具體格式如下:上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
上一頁下一頁返回TF1、TF0在上一節(jié)中斷請求中已做介紹,這里不再贅述。TR1、TR0:T/C0、T/C1啟動控制位。1—啟動計(jì)數(shù);0—停止計(jì)數(shù)。TCON復(fù)位后清零,T/C需受到軟件控制才能啟動計(jì)數(shù),當(dāng)計(jì)數(shù)寄存器計(jì)滿時,產(chǎn)生向高位的進(jìn)位TF,即溢出中斷請求標(biāo)志。2.T/C的方式控制寄存器TMODTMOD用于定時器/計(jì)數(shù)器工作方式的設(shè)置。其中,低四位用于T0的設(shè)置,高四位用于對T1的設(shè)置,具體格式如下:5.2定時器/計(jì)數(shù)器(T/C)
5.2.3定時器/計(jì)數(shù)器的工作方式方式0:當(dāng)TMOD中M1M0=00時,T/C工作在方式0。方式0為13位的T/C,由TH提供高8位,TL提供低5位的計(jì)數(shù)值,滿計(jì)數(shù)值為213,但啟動前可以預(yù)置計(jì)數(shù)初值。方式1:當(dāng)TMOD中M1M0=01時,T/C工作在方式1。方式1與方式0基本相同。唯一區(qū)別在于計(jì)數(shù)寄存器的位數(shù)是16位的,由TH和TL寄存器各提供8位,滿計(jì)數(shù)值為216。方式2:當(dāng)TMOD中M1M0=10時,T/C工作在方式2。方式2是8位的可自動重裝載的T/C,滿計(jì)數(shù)值為28;TH裝初值,TL進(jìn)行8位計(jì)數(shù)。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
方式3:當(dāng)TMOD中M1M0=11時,T/C0工作在方式3。方式3只適合于T/C0。當(dāng)T/C0工作在方式3時,TH0和TL0成為兩個獨(dú)立的計(jì)數(shù)器,這時TL0可作定時器/計(jì)數(shù)器,占用T/C0在TCON和TMOD寄存器中的控制位和標(biāo)志位;而TH0只能作定時器用,占用T/C1的資源TR1和TF1。在這種情況下,T/C1仍可用于方式0、1、2,但不能使用中斷方式。只有將T/C1用作串行口的波特率發(fā)生器時,T/C0才工作在方式3,以便增加一個定時器。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
5.2.4定時器/計(jì)數(shù)器的初始化1.初始化步驟在使用8051的定時器/計(jì)數(shù)器前,應(yīng)對其進(jìn)行編程初始化,主要是對TCON和TMOD編程;計(jì)算和裝載T/C的計(jì)數(shù)初值。定時器/計(jì)數(shù)器的初始化步驟如下:(1)編程TMOD寄存器,確定T/C的工作方式。(2)根據(jù)要求計(jì)算T/C的計(jì)數(shù)初值,并裝載到TH0、TL0或TH1、TL1,以確定其定時時間或者計(jì)數(shù)的個數(shù)。(3)T/C若工作在中斷方式時,須開CPU總中斷和分中斷——編程IE寄存器。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
(4)啟動定時器/計(jì)數(shù)器——編程TCON中TR1或TR0位,即把TR1或TR0位置“1”。2.計(jì)數(shù)初值的計(jì)算(1)定時器的計(jì)數(shù)初值。在定時器方式下,T/C是對機(jī)器周期脈沖計(jì)數(shù)的,若fosc=6MHz,一個機(jī)器周期為12/fosc=2μs,所以:方式0——13位定時器最大定時間隔=213×2μs=16.384ms;方式1——16位定時器最大定時間隔=216×2μs=131.072ms;方式2——8位定時器最大定時間隔=28×2μs=512μs。上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
5.2.5定時器/計(jì)數(shù)器的應(yīng)用舉例例5.2設(shè)單片機(jī)的fosc=12MHz,要求在P1.0腳上輸出周期為2ms的方波。解:周期為2ms的方波要求時間間隔1ms,每次時間到則P1.0取反。定時器初值為:-1000[1ms/(12/fosc)],即216-1000。(1)用定時器0的方式1編程,采用查詢方式。#include<reg51.h>sbitp1_0=p1^0;voidmain()上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
{TMOD=0x01;/*定時器0方式1*/TR0=1;/*啟動T/C0*/for(;;){TH0=(65536-1000)/256;/*裝載計(jì)數(shù)初值*/TL0=(65536-1000)%256;do{}while(!TF0);/*查詢等待TF0置位*/p1_0=!p1_0;/*定時時間到P1.0反相*/上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
TF0=0;/*軟件清TF0*/}}(2)用定時器0的方式1編程,采用中斷方式。#include<reg51.h>sbitp1_0=p1^0;voidtimer0(void)interrupt1using1/*中斷服務(wù)程序入口*/{p1_0=!p1_0;/*P1.0取反*/上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
TH0=(65536-1000)/256;/*計(jì)數(shù)初值重裝載*/TL0=(65536-1000)%256;}voidmain(){TMOD=0x01;/*T/C0工作在定時器方式1*/p1_0=0;TH0=(65536-1000)/256;/*預(yù)置計(jì)數(shù)初值*/TL0=(65536-1000)%256;EA=1;/*CPU開中斷*/上一頁下一頁返回5.2定時器/計(jì)數(shù)器(T/C)
ET0=1;/*T/C0開中斷*/TR0=1;/*啟動T/C0開始定時*/do{}while(1);}上一頁返回5.3串行口5.3.1串口概述單片機(jī)與外界進(jìn)行信息交換稱為通信。8051單片機(jī)的通信方式有兩種,即并行通信和串行通信。并行通信:數(shù)據(jù)的各位被同時發(fā)送或接收。串行通信:數(shù)據(jù)一位一位地順序發(fā)送或接收。串行通信的方式:異步通信和同步通信。異步通信:它用一個起始位表示字符的開始,用停止位表示字符的結(jié)束。其每幀的格式如圖5.7所示。下一頁返回5.3串行口
在一幀格式中,先是一個起始位0,然后是8個數(shù)據(jù)位,規(guī)定低位在前,高位在后,接下來是奇偶校驗(yàn)位(可以省略),最后是停止位“1”。用這種格式表示字符,則字符可以一個接一個地傳送。在異步通信中,CPU與外設(shè)之間必須有兩項(xiàng)規(guī)定,即字符格式和波特率。字符格式的規(guī)定是雙方能夠在對同一種0和1的串理解成同一種意義。原則上字符格式可以由通信的雙方自由制定,但從通用、方便的角度出發(fā),一般還是使用了一些標(biāo)準(zhǔn),如采用ASCII標(biāo)準(zhǔn)。波特率即數(shù)據(jù)傳送的速率,其定義是每秒鐘傳送的二進(jìn)制數(shù)的位數(shù)。例如,數(shù)據(jù)傳送的速率是120字符/秒,而每個字符如上述規(guī)定包含10數(shù)位,則傳送波特率為1200波特。上一頁下一頁返回5.3串行口
在異步通信中,每個字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,占用了時間;所以在數(shù)據(jù)塊傳遞時,為了提高速度,常去掉這些標(biāo)志,采用同步傳送。由于數(shù)據(jù)塊傳遞開始要用同步字符來指示,同時要求由時鐘來實(shí)現(xiàn)發(fā)送端與接收端之間的同步,故硬件較復(fù)雜。通信方向:在串行通信中,通信接口只能發(fā)送或接收的單向傳送方法叫單工傳送;而數(shù)據(jù)在甲、乙兩機(jī)之間的雙向傳遞,稱為雙工傳送。在雙工傳送方式中又分為半雙工傳送和全雙工傳送。半雙工傳送是兩機(jī)之間不能同時進(jìn)行發(fā)送和接收,任一時刻,只能發(fā)送或者只能接收信息。上一頁下一頁返回5.3串行口
5.3.28051單片機(jī)的串行接口結(jié)構(gòu)8051串行接口是一個可編程的全雙工串行通信接口。它可用作異步通信方式(UART),與串行傳送信息的外部設(shè)備相連接,或用于通過標(biāo)準(zhǔn)異步通信協(xié)議進(jìn)行全雙工的8051多機(jī)系統(tǒng),使用TTL或CMOS移位寄存器來擴(kuò)充I/O口。8051單片機(jī)通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界通信。其中,SBUF是串行口緩沖寄存器,包括發(fā)送寄存器和接收寄存器。它們有相同的名字和地址空間,但不會出現(xiàn)沖突,因?yàn)樗鼈儍蓚€一個只能被CPU讀出數(shù)據(jù),一個只能被CPU寫入數(shù)據(jù)。上一頁下一頁返回5.3串行口
5.3.3串行口的控制與狀態(tài)寄存器一、串行口控制寄存器SCONSCON用于定義串行口的工作方式及實(shí)施接收和發(fā)送控制。字節(jié)地址為98H。也可進(jìn)行位尋址,即SCON的每一位“1”都可以進(jìn)行按位清“0”或者按位置“1”操作。二、電源控制寄存器PCONPCON是為了在CHMOS的80C51單片機(jī)上實(shí)現(xiàn)電源控制而附加的。其中最高位是SMOD。SMOD:波特率倍增位。在串口工作在方式1、方式2、方式3時,波特率與SMOD有關(guān),當(dāng)SMOD=1時,波特率提高一倍。上一頁下一頁返回5.3串行口
GF0、GF1:通用標(biāo)志位。PD、IDL:CHMOS器件的低功耗控制位。3.工作方式2工作方式2為固定波特率的11位UART方式。它比方式1增加了一位可程控為“1”或“0”的第9位數(shù)據(jù)。(1)輸出。發(fā)送的串行數(shù)據(jù)由TXD端輸出,一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復(fù)位。它可作為多機(jī)通信中地址/數(shù)據(jù)信息的標(biāo)志位,也可以作為數(shù)據(jù)的奇偶校驗(yàn)位。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫入SUBF的指令時,就啟動發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標(biāo)志TI。上一頁下一頁返回5.3串行口
(2)輸入。在REN=1時,串行口采樣RXD引腳,當(dāng)采樣到1到0的跳變時,確認(rèn)是開始位“0”,就開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(dāng)RI=0或者SM2=0時,第9位數(shù)據(jù)才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失,且不
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷鏈倉儲中心2025年特色農(nóng)產(chǎn)品技術(shù)創(chuàng)新可行性分析報(bào)告
- 2025年智慧物流創(chuàng)新應(yīng)用:智能倉儲信息追溯系統(tǒng)建設(shè)可行性分析
- 高端裝備制造業(yè)協(xié)同創(chuàng)新平臺建設(shè)可行性研究報(bào)告-2025年技術(shù)創(chuàng)新布局
- 2025年遠(yuǎn)程教育平臺用戶體驗(yàn)優(yōu)化行業(yè)創(chuàng)新報(bào)告
- 2026年數(shù)據(jù)挖掘師晉級考核題目集D5D6級
- 2026吉林松原市生態(tài)環(huán)境局所屬事業(yè)單位選拔10人備考題庫及完整答案詳解
- 2026四川長虹電源股份有限公司招聘總賬主管會計(jì)崗位1人備考題庫有完整答案詳解
- 2026中國共產(chǎn)黨尋甸回族彝族自治縣委員會政法委員會城鎮(zhèn)公益性崗位招聘1人備考題庫(云南)及答案詳解(新)
- 2026北京中國氣象局地球系統(tǒng)數(shù)值預(yù)報(bào)中心博士后科研工作站招收7人備考題庫含答案詳解
- 2026臺州臨海市司法局編外招聘1人備考題庫及答案詳解(新)
- 焊接質(zhì)量控制規(guī)范培訓(xùn)課件
- 酒店消殺方案
- 急診科護(hù)士長述職報(bào)告
- JGT334-2012 建筑外墻用鋁蜂窩復(fù)合板
- 管道壁厚計(jì)算表
- 汽車4S店安全生產(chǎn)責(zé)任書
- 西青事業(yè)編招聘2023年考試真題及答案解析
- 主動服務(wù)意識的培養(yǎng)
- 淺談執(zhí)行力的重要性及怎樣提高執(zhí)行力
- SB/T 10797-2012室內(nèi)裝配式冷庫
- GB 5009.250-2016食品安全國家標(biāo)準(zhǔn)食品中乙基麥芽酚的測定
評論
0/150
提交評論