之中斷定時(shí)器蜂鳴器_第1頁
之中斷定時(shí)器蜂鳴器_第2頁
之中斷定時(shí)器蜂鳴器_第3頁
之中斷定時(shí)器蜂鳴器_第4頁
之中斷定時(shí)器蜂鳴器_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上中斷理解中斷概念:豆豆主任務(wù)是看書,中斷時(shí)接電話。電話是隨機(jī)打來的,中斷是隨機(jī)產(chǎn)生的;接完電話后,豆豆回去繼續(xù)看書;再說電話,外部來了電話,電話處理了這個(gè)信之后,電話自動(dòng)鈴響了,這說明電話這個(gè)設(shè)備處理了部分的信號(hào),符合條件,產(chǎn)生了中斷請(qǐng)求。而非豆豆讓電話響的,或控制電話響的。在電話響之前,豆豆根本沒有處理電話接受到的任何信號(hào),中斷的產(chǎn)生,是電話處理產(chǎn)生的。 來電話了,這個(gè)中斷,會(huì)產(chǎn)生電話鈴響,這個(gè)標(biāo)志位。豆豆也就是通過電話鈴響(標(biāo)志位),才知道有了個(gè)中斷;也就是通過電話鈴響(標(biāo)志位),知道這個(gè)中斷是電話。如果是門的話,那通過門鈴響了,就知道有個(gè)中斷產(chǎn)生了,也知道這個(gè)中

2、斷是門了。我們把能夠產(chǎn)生中斷的設(shè)備稱為信號(hào)源。在單片機(jī)里面,產(chǎn)生中斷的可能是單片機(jī)內(nèi)部的模塊,也可能是單片機(jī)IO口外部輸入的信號(hào)。中斷響應(yīng)過程:Cpu正常執(zhí)行主程序時(shí),突然一個(gè)時(shí)間點(diǎn),中斷源檢測(cè)出符合中斷條件的信號(hào),向CPU發(fā)生中斷請(qǐng)求。CPU得到這種中斷請(qǐng)求之后,進(jìn)行中斷響應(yīng),執(zhí)行該中斷的中斷服務(wù)程序。然后,中斷返回,CPU繼續(xù)執(zhí)行主程序。中斷的作用:*獨(dú)立按鍵和外部中斷按鍵,就是一個(gè)很明顯的對(duì)比。檢測(cè)獨(dú)立按鍵時(shí),我們需要在主程序里面,重復(fù)的檢測(cè)IO口。而有了外部中斷按鍵,我們就不用反復(fù)的檢測(cè)掃描IO口了,因?yàn)楫?dāng)按鍵按下去的時(shí)候,單片機(jī)會(huì)產(chǎn)生一個(gè)中斷告訴CPU。有了中斷,定時(shí)器可以計(jì)定時(shí)器的

3、數(shù),CPU可以做CPU的工作。當(dāng)定時(shí)器完成工作之后,會(huì)通過中斷告訴CPU,然后再由CPU來處理。同樣,像電源掉電、硬件故障等突發(fā)情況,都可以通過中斷的方式,告訴CPU。我們的很多系統(tǒng)都要求實(shí)時(shí)性?!跋胂笠幌?,一個(gè)機(jī)床正在飛速運(yùn)轉(zhuǎn),這時(shí)有人的手被卷進(jìn)去了,然后你迅速地通過電腦給單片機(jī)發(fā)一串指令。如果你的單片機(jī)系統(tǒng)不能實(shí)時(shí)地處理這個(gè)指令,而是每隔一定的時(shí)間,去查詢下有指令進(jìn)來了沒,那可能指令進(jìn)來的時(shí)候,你的查詢時(shí)間還沒到,所以單片機(jī)沒執(zhí)行指令,直到查詢時(shí)間到了,這時(shí)再去處理,人的手已經(jīng)掉下來了罷了?!?我們知道,電腦是可以同時(shí)打開很多個(gè)軟件的(實(shí)時(shí)多任務(wù)),就是因?yàn)橛卸〞r(shí)器中斷的存在,才實(shí)現(xiàn)了這一

4、效果。每隔一定的時(shí)間,產(chǎn)生一個(gè)中斷,然后CPU就跳轉(zhuǎn)到另一個(gè)軟件中,執(zhí)行另一個(gè)軟件的操作。這就是80C51內(nèi)核,也就是大家手里51單片機(jī)的中斷系統(tǒng)結(jié)構(gòu)框圖。 最左邊是中斷源,中間這些開關(guān)是中斷的各種設(shè)置寄存器。51的中斷有2個(gè)優(yōu)先級(jí)別,用來將每個(gè)中斷進(jìn)行分級(jí),如果多個(gè)中斷同時(shí)發(fā)生的話,先處理高級(jí)的,再處理低級(jí)的中斷。(不管它的自然優(yōu)先級(jí)是怎么樣的)如果優(yōu)先級(jí)別相同的中斷,就按照自然優(yōu)先級(jí)(也就是系統(tǒng)默認(rèn)的優(yōu)先級(jí))來響應(yīng)中斷。由此,51單片機(jī)能夠在低級(jí)中斷里面再嵌套一個(gè)高級(jí)中斷。中斷源:51單片機(jī)共有5個(gè)固定的中斷源,分別是外部中斷0、定時(shí)器T0中斷、外部中斷1、定時(shí)器T1中斷,串口中斷RI/T

5、I。外部中斷0,是由IO口P3.2輸入的信號(hào)來產(chǎn)生的,如果外部給P3.2一個(gè)低電平(電平觸發(fā))或下降沿(邊沿觸發(fā))信號(hào),則單片機(jī)就會(huì)產(chǎn)生一個(gè)外部中斷0的信號(hào)。-外部中斷觸發(fā)方式:再有就是,定時(shí)器從初值計(jì)數(shù)到最大值時(shí),定時(shí)器會(huì)溢出,這是就會(huì)產(chǎn)生一個(gè)定時(shí)器中斷。還有就是,當(dāng)電腦通過串口給單片機(jī)的串口引腳發(fā)送一個(gè)字符的時(shí)候,當(dāng)單片機(jī)的串口模塊,接收完了這個(gè)字符,就會(huì)產(chǎn)生一個(gè)中斷。串口模塊發(fā)送完一個(gè)字符之后,也會(huì)產(chǎn)生一個(gè)中斷。每個(gè)中斷源的自然優(yōu)先級(jí)剛才講了,51單片機(jī)的中斷系統(tǒng)能夠通過寄存器設(shè)置來決定開啟或關(guān)斷某個(gè)中斷源,這個(gè)寄存器就是IE。我們知道,寄存器就是我們編程序的時(shí)候,可以操作了。也就意味著

6、,我們可以通過編程,來選擇開或關(guān)哪個(gè)中斷源了。必須同時(shí)滿足:1. 總中斷EA是開啟的2. 中斷源開關(guān)是開啟的中斷源才會(huì)向CPU發(fā)出中斷請(qǐng)求,IE寄存器,是可以位尋址的,也就是說,我們可以通過sbit,定義它的每個(gè)位,并進(jìn)行位操作,像IO口一樣,置1,或清0。還有一個(gè)寄存器IP,用來,設(shè)置各個(gè)中斷的優(yōu)先級(jí)別。接下來,我們就來分析一下,中斷的響應(yīng)過程:首先是中斷源發(fā)出中斷請(qǐng)求;一般有兩種情況: yi.如果是單片機(jī)外部輸入的信號(hào), 那么我們需要對(duì)IO口進(jìn)行采樣,判斷是否符合中斷條件, 然后把該中斷相應(yīng)的中斷標(biāo)志位置1。注意:此采樣置位的過程是由硬件自動(dòng)完成的,而非我們編寫程序來實(shí)現(xiàn)。如果是單片機(jī)內(nèi)部

7、的某些模塊,如定時(shí)器模塊,串口模塊,他們可以通過單片機(jī)內(nèi)部的硬件電路,在滿足中斷條件時(shí),直接將他們對(duì)應(yīng)的中斷標(biāo)志位置1。1. 外部中斷0和外部中斷1的控制位和標(biāo)志位,儲(chǔ)存在寄存器TCON的低四位2. 定時(shí)器0和定時(shí)器1的控制位和標(biāo)志位,儲(chǔ)存在寄存器TCON的高四位。3. 串口的控制位和標(biāo)志位,儲(chǔ)存在寄存器SCON中。當(dāng)某中斷源判斷中斷條件成立時(shí),就會(huì)將對(duì)應(yīng)的中斷標(biāo)志位置位,也就向CPU進(jìn)行了“中斷請(qǐng)求”,此過程由硬件自動(dòng)完成。CPU就是通過查詢這些中斷標(biāo)志位,來判斷是否由中斷產(chǎn)生,以及產(chǎn)生的是什么樣的中斷。中斷源發(fā)送完中斷請(qǐng)求(即將中斷標(biāo)志位置位)之后,CPU是如何知道這1中斷請(qǐng)求的呢?CPU

8、的中斷標(biāo)志位查詢。我們知道,每1-4個(gè)機(jī)器周期,單片機(jī)就會(huì)執(zhí)行一條指令。1個(gè)機(jī)器周期,包括6個(gè)狀態(tài)周期。在這些狀態(tài)周期中,可能某個(gè)狀態(tài)周期完成了取指令、取數(shù)據(jù)等操作。在每個(gè)機(jī)器周期的第6個(gè)狀態(tài)周期S6,CPU就會(huì)自動(dòng)查詢寄存器TCON和SCON中的各中斷標(biāo)志位來確定是否發(fā)生了“中斷請(qǐng)求”,哪個(gè)中斷源發(fā)生了請(qǐng)求。如寄存器TCON中,TF1,TF0分別是定時(shí)器1和定時(shí)器0的中斷標(biāo)志位IE1和IE0就是外部中斷1和外部中斷0的中斷標(biāo)志位寄存器SCON中TI和RI就是串口模塊,分別是發(fā)送完1個(gè)字符數(shù)據(jù)的中斷標(biāo)志位,接收完1個(gè)字符數(shù)據(jù)的中斷標(biāo)志位。CPU會(huì)在每個(gè)機(jī)器周期的S6狀態(tài)時(shí),按照中斷優(yōu)先級(jí)別對(duì)各

9、標(biāo)志位進(jìn)行查詢。然后到下個(gè)機(jī)器周期的S6狀態(tài),再?zèng)Q定要不要中斷響應(yīng)。有以下3種情況比較特殊:1. CPU目前正在處理一個(gè)同級(jí)或更高級(jí)別的中斷請(qǐng)求。注意,我們前面講過,當(dāng)一個(gè)中斷,正在被響應(yīng)時(shí),只有更高級(jí)別的中斷請(qǐng)求,才可以達(dá)到該響應(yīng)過程,讓CPU去響應(yīng)此更高級(jí)別的中斷請(qǐng)求,低級(jí)別的,或同級(jí)別的都不能實(shí)現(xiàn)中斷嵌套,所以,CPU正在處理一個(gè)同級(jí)或更高級(jí)別的中斷請(qǐng)求,執(zhí)行中斷服務(wù)程序時(shí),是不能響應(yīng)其他中斷的。2. 我們知道,我們用C語言編的程序,會(huì)被Keil編譯成各種各樣的指令,然后單片機(jī)執(zhí)行這些指令。單片機(jī)指令,有單周期的,也有雙周期的,還有四周期的。當(dāng)CPU決定是否進(jìn)行中斷響應(yīng)時(shí),發(fā)現(xiàn)現(xiàn)在所處的

10、機(jī)器周期,并不是當(dāng)前執(zhí)行指令的最后一個(gè)機(jī)器周期,那它同樣不會(huì)進(jìn)行中斷響應(yīng)。3. 還有就是如果執(zhí)行的指令是RETI,或訪問寄存器IE、IP的指令,即使已經(jīng)是指令的最后一個(gè)機(jī)器周期了,CPU也會(huì)至少再執(zhí)行一條指令才會(huì)響應(yīng)中斷。因?yàn)檫@些指令是跟中斷有關(guān)的。所以,操作這些指令時(shí)可能會(huì)對(duì)中斷源進(jìn)行一些操作。以上就是CPU如何查詢中斷標(biāo)志位的。cpu對(duì)某中斷的真正響應(yīng),需要38個(gè)機(jī)器周期。首先,查詢到標(biāo)志位之后,需要等到下一個(gè)機(jī)器周期才能決定是否響應(yīng)中斷。這就耗去了一個(gè)機(jī)器周期,進(jìn)行中斷響應(yīng),CPU執(zhí)行LCALL指令,需要2個(gè)機(jī)器周期,接下來才是對(duì)中斷進(jìn)行相應(yīng)的操作了,這是3個(gè)機(jī)器周期。如果決定是否響應(yīng)中

11、斷的那個(gè)周期是RETI指令的第一個(gè)機(jī)器周期,RETI需要兩個(gè)機(jī)器周期,則需要再執(zhí)行一條指令。如果再執(zhí)行的指令是乘除指令,也就是四周期指令,則需要4個(gè)機(jī)器周期;如果再執(zhí)行的指令是乘除指令,也就是四周期指令,則需要4個(gè)機(jī)器周期;然后再執(zhí)行LCALL,這就是8個(gè)機(jī)器周期了,當(dāng)然,如果發(fā)生中斷請(qǐng)求時(shí),是在某個(gè)處理某個(gè)中斷響應(yīng)的話,那就要看中斷響應(yīng)里面的中斷服務(wù)程序做哪些工作了。所以,中斷服務(wù)程序里面的時(shí)間不應(yīng)該太長(zhǎng),否則會(huì)影響其他中斷的響應(yīng)。所謂中斷響應(yīng),就是執(zhí)行LCALL指令。這條指令,主要實(shí)現(xiàn)兩個(gè)功能第1個(gè)是把目前主程序?qū)⒁獔?zhí)行的下一條指令所在的地址,壓入堆棧保存起來。以便從中斷返回時(shí),恢復(fù)主程序

12、第2個(gè)是把中斷源對(duì)應(yīng)的入口地址交給CPU,CPU就會(huì)執(zhí)行這些入口地址處存儲(chǔ)的指令。這些地址是固定的,每個(gè)中斷源都對(duì)應(yīng)一個(gè)入口地址,在這些入口地址處可以存放一些指令,來處理中斷。中斷響應(yīng)之后,某些中斷標(biāo)志位,就會(huì)自動(dòng)被清除,是硬件自動(dòng)完成的但是RI/TI中斷標(biāo)志位,必須我們?cè)诔绦蚶锩妫堰@兩個(gè)位清零才行我們也可以通過查詢RI/TI來判斷是接收串口數(shù)據(jù)產(chǎn)生的中斷還是發(fā)送串口數(shù)據(jù)產(chǎn)生的中斷?;仡櫼幌拢簊tep1:中斷請(qǐng)求由中斷源硬件自動(dòng)完成,我們不用管。step2:CPU在每個(gè)機(jī)器周期里面查詢中斷標(biāo)志位有硬件自動(dòng)完成,我們不用管。step3:中斷響應(yīng)在判斷符合中斷響應(yīng)的條件,進(jìn)行中斷響應(yīng)時(shí),調(diào)用LC

13、ALL指令。由硬件自動(dòng)完成,我們不用管。這時(shí),CPU的程序指針PC,指向的是中斷源的入口地址,那么接下來,就會(huì)執(zhí)行中斷源入口地址存放的指令了。address1是主程序的一條指令所在地址,此時(shí)進(jìn)行了中斷響應(yīng),PC就會(huì)指向中斷源入口地址,假設(shè)發(fā)生了外部中斷0,是對(duì)外部中斷0進(jìn)行的中斷響應(yīng),PC就會(huì)指向0x0003H,我們可以看一下此地址存放了什么代碼?我們發(fā)現(xiàn)兩個(gè)中斷源入口地址之間的存儲(chǔ)空間是很有限的。所以,往往我們會(huì)在此入口處放一條跳轉(zhuǎn)指令。把中斷服務(wù)程序放在其他的地方,然后從中斷入口處執(zhí)行指令跳轉(zhuǎn)過去。 這是我們的程序在ROM里面的存放方式大家可以看到中斷服務(wù)程序被放在了address2處了那

14、么我們就要在中斷入口處放一條跳轉(zhuǎn)到address2的指令或許,大家比較郁悶,大家寫中斷的時(shí)候,并沒有體會(huì)到這個(gè)過程那是因?yàn)镵Eil幫你完成了這一切你在程序里面只要加上這個(gè)關(guān)鍵字Keil就知道,這是外部中斷0的服務(wù)程序了、Keil會(huì)自動(dòng)把此段代碼的地址存儲(chǔ)在中斷入口那里問題:#include sbit Led1 = P10;sbit Led2 = P11;sbit Led3 = P12;sbit Key = P32;unsigned char t; void Delay100ms()/12.000MHzunsigned char i, j;i = 195;j = 138;dowhile (-j)

15、; while (-i);void main() EA=1; /中斷允許 EX0=1; /開外部中斷0IT0=0; /低電平觸發(fā)外部中斷Led1 = 1;Led2=1; while(1) Led1=!Led1;/讓LED閃爍一下void int0() interrupt 0 /電平觸發(fā) Delay100ms(); XDL-郭浩2014-2-13 22:01:19如果P3.2經(jīng)一根杜邦線連到低電平XDL-郭浩2014-2-13 22:01:28那會(huì)有什么現(xiàn)象XDL-郭浩2014-2-13 22:01:40大家試一下,然后分析一下為什么會(huì)這樣定時(shí)器/計(jì)數(shù)器溢出,是定時(shí)器/計(jì)數(shù)器的一種普遍現(xiàn)象,由于

16、單片機(jī)內(nèi)部結(jié)構(gòu)的設(shè)置,單片機(jī)溢出之后,數(shù)會(huì)變?yōu)?而非最大計(jì)數(shù)量,這一點(diǎn)與這個(gè)水盆是不同的。為何要有初值?定時(shí)器常用到初值,初值設(shè)置好了之后,我們就可以設(shè)定經(jīng)過多長(zhǎng)時(shí)間會(huì)發(fā)生溢出,溢出時(shí),定時(shí)器/計(jì)數(shù)器就會(huì)向cpu發(fā)出中斷請(qǐng)求。定時(shí)器/計(jì)數(shù)器 一般都要用到它的中斷,51有T0和T1,52多了個(gè)T2。THx TLx就是這兩個(gè)8位加1計(jì)數(shù)器的寄存器,我們可以用軟件對(duì)該寄存器進(jìn)行讀寫。工作原理(以16位定時(shí)器/計(jì)數(shù)器為例)TH0、TL0這兩個(gè)計(jì)數(shù)寄存器組合成一個(gè)16位的二進(jìn)制數(shù),TH0存放的是高8位、TL0存放的是低8位。每來1個(gè)脈沖,TL0會(huì)加1一次。TL0加滿之后,就會(huì)像TH0進(jìn)一位,直至TH0也

17、加到最大值。此時(shí),整個(gè)二進(jìn)制的16位全部是1,對(duì)應(yīng)的十進(jìn)制數(shù)是65535(單片機(jī)從0開始計(jì)數(shù)),此時(shí),如果再來一個(gè)計(jì)數(shù)脈沖,TH0,TL0都會(huì)溢出,兩個(gè)都變成0 。這點(diǎn)不難理解:65535的二進(jìn)制數(shù)位:11111,16個(gè)1,如果你再給它加1的話,他就會(huì)變成,1個(gè)1加16個(gè)0了,而單片機(jī)這兩個(gè)寄存器最多存16個(gè)位,所以第一個(gè)被進(jìn)上去的位,就會(huì)被舍棄,這就是溢出后的結(jié)果。溢出之后,由硬件把定時(shí)器T0的中斷標(biāo)志位TF0置1 。此時(shí)如果定時(shí)器中斷開關(guān)和中斷總開關(guān)都在寄存器IE里面被允許了,就會(huì)向CPU發(fā)出中斷請(qǐng)求,產(chǎn)生中斷,告訴CPU,它定時(shí)/計(jì)數(shù)到溢出了。根據(jù)初值,就可以判斷,加1計(jì)數(shù)器總共計(jì)了多少

18、數(shù)。單片機(jī)“定時(shí)器/計(jì)數(shù)器”概念:計(jì)數(shù)脈沖來源決定了這個(gè)加1計(jì)數(shù)器是用作定時(shí)器還是計(jì)數(shù)器。系統(tǒng)時(shí)鐘振蕩器一般由晶振產(chǎn)生振蕩信號(hào),也就是單片機(jī)最小系統(tǒng)的那個(gè)晶振。如果晶振為12MHz,則系統(tǒng)時(shí)鐘振蕩器就會(huì)產(chǎn)生12MHz的脈沖信號(hào),經(jīng)過12分頻,就產(chǎn)生了1Mhz的脈沖信號(hào),此時(shí)兩個(gè)脈沖信號(hào)之間的時(shí)間間隔是固定的已知的,便可以把這個(gè)加1計(jì)數(shù)器當(dāng)成定時(shí)器來用了。如果計(jì)數(shù)脈沖是從外部引腳輸入的,則當(dāng)成計(jì)數(shù)器來用了。因?yàn)閱纹瑱C(jī)是在每個(gè)機(jī)器周期才會(huì)檢測(cè)一次IO口的電平狀態(tài),當(dāng)?shù)谝淮螜z測(cè)到高電平,第二次檢測(cè)到低電平時(shí),就認(rèn)為外部輸入了一個(gè)脈沖信號(hào),所以,最快也要兩個(gè)機(jī)器周期才能檢測(cè)到1個(gè)脈沖信號(hào),故,外部脈沖

19、信號(hào)的最高頻率為時(shí)鐘振蕩周期的1/24。定時(shí)器由THx和TLx獨(dú)立使用或組合而成,可以作為兩個(gè)獨(dú)立的8位計(jì)數(shù)器,可以把THx作為高8位,TLx作為低8位,組成一個(gè)16位的計(jì)數(shù)器,也可以把THx作為高8位,把TLx的低5位作為低5位,組成1個(gè)13位的計(jì)數(shù)器。所以,他的最大計(jì)數(shù)值跟他的位數(shù)有關(guān)。又因?yàn)閱纹瑱C(jī)從零開始計(jì)數(shù),所以,計(jì)數(shù)器的最大計(jì)數(shù)值為2N-1 。當(dāng)THx和TLx組合的數(shù)等于2N-1時(shí),再來1個(gè)計(jì)數(shù)脈沖,計(jì)數(shù)器就會(huì)溢出。THx和TLx只是8位的加1計(jì)數(shù)器,所以他在每個(gè)脈沖輸入時(shí),只會(huì)把他的值進(jìn)行加1,所以,我們可以先給這兩個(gè)計(jì)數(shù)寄存器賦一個(gè)值,即初值,那么定時(shí)器就會(huì)在這個(gè)初值上開始加1

20、。 有自動(dòng)重裝的,由硬件電路實(shí)現(xiàn),無需軟件操作;非自動(dòng)重裝的,則需要用軟件進(jìn)行賦值來重裝。(配上頁ppt)GATE一般我們把它賦0,如果賦1的話,則必須是在INT腳,也就是外部中斷引腳為高電平的時(shí)候,定時(shí)器/計(jì)數(shù)器才會(huì)正常工作。C/T,這個(gè)位相當(dāng)于開關(guān),來控制定時(shí)器計(jì)數(shù)脈沖來源。為0時(shí),系統(tǒng)會(huì)把計(jì)數(shù)脈沖來源切換到系統(tǒng)時(shí)鐘振蕩器經(jīng)12分頻器后的輸出;置為1,系統(tǒng)會(huì)把計(jì)數(shù)脈沖來源切換到T0引腳處。而M1M0則用來配置定時(shí)器的工作模式,后面我們會(huì)挨個(gè)介紹它的各個(gè)工作模式。TCON是用來控制定時(shí)器的啟動(dòng)、停止的。在這里,我們強(qiáng)調(diào)一下,只要有計(jì)數(shù)脈沖信號(hào),定時(shí)器一旦被啟動(dòng),就會(huì)一直定時(shí)/計(jì)數(shù)。即使是在C

21、PU響應(yīng)中斷,執(zhí)行中斷服務(wù)程序時(shí),定時(shí)器依然在正常計(jì)數(shù),除非,定時(shí)器被停止了。 定時(shí)器和CPU是兩個(gè)獨(dú)立的模塊,正常運(yùn)行時(shí),是并行的,互不干擾。接上文,我們來看一下定時(shí)器的幾種工作模式: 工作模式0 : TL0的低5位每計(jì)滿一次,就會(huì)向TH0進(jìn)一次位,TL0的高3位完全不起任何作用了,也不會(huì)加1了。這樣就構(gòu)成了一個(gè)13位的定時(shí)器/計(jì)數(shù)器,初值需要軟件重裝。 工作模式1:TL0和TH0會(huì)組成1個(gè)16位的定時(shí)器/計(jì)數(shù)器。同樣,我們可以中斷服務(wù)程序里面,做我們定時(shí)想做的事情,如果需要一直定時(shí),則需要軟件重裝初值。 工作模式2 : 此時(shí)TL0會(huì)作為一個(gè)初值自動(dòng)重裝的定時(shí)器/計(jì)數(shù)器,而TH0則會(huì)存放預(yù)置

22、的初值。*為什么要由硬件自動(dòng)重裝呢?我們知道從中斷源發(fā)出中斷請(qǐng)求到CPU響應(yīng)中斷,是需要38個(gè)機(jī)器周期的。而再到執(zhí)行中斷服務(wù)程序,又要幾個(gè)機(jī)器周期,等于說溢出后,TL0為,而到你在中斷服務(wù)程序里面軟件重裝初值時(shí),TL0可能已經(jīng)加到(實(shí)際是)了,這時(shí),定時(shí)器每個(gè)周期記的數(shù),不是100,而是100+8 。所以,在中斷服務(wù)程序里面軟件重裝初值,會(huì)導(dǎo)致定時(shí)器的計(jì)數(shù)存在一定的誤差。而自動(dòng)重裝初值的模式下,一旦TL0計(jì)滿溢出,使得定時(shí)器中斷標(biāo)志位TF0置1,則會(huì)由硬件自動(dòng)把TH0的值裝入TL0,然后繼續(xù)定時(shí)/計(jì)數(shù)。此時(shí),不需要進(jìn)入中斷服務(wù)程序進(jìn)行軟件重裝初值,就由硬件完成了上述過程 工作模式3(T0有,T1木有):此時(shí),T0會(huì)被分成兩個(gè)獨(dú)立8位定時(shí)器/計(jì)數(shù)器來用,且TH0會(huì)占用T1的TR1、TF1,不會(huì)占用T1的TMOD。此時(shí)T1已經(jīng)不能再工作于普通的中斷方式了,只能是作為波特率發(fā)生器,把溢出的信號(hào)送給串口我們來總結(jié)一下,“定時(shí)器/計(jì)數(shù)器”的使用流程:1.2.3.4.5是我們編程時(shí)常用的步驟,我們可以用定時(shí)器來做延時(shí),定時(shí)掃描鍵盤,定時(shí)掃描數(shù)碼管,定時(shí)查詢IO口

溫馨提示

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

評(píng)論

0/150

提交評(píng)論