版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、5.1 定時(shí)器的結(jié)構(gòu)及工作原理5.2 定時(shí)器的TMOD和TCON寄存器5.3 定時(shí)器的工作方式 5.3.1 方式0 5.3.2 方式1 5.3.3 方式2 5.3.4 方式35.4 定時(shí)器的編程和應(yīng)用1基本知識(shí)基本知識(shí)定時(shí)器定時(shí)器/ /計(jì)數(shù)器簡介計(jì)數(shù)器簡介 1 1計(jì)數(shù)概念計(jì)數(shù)概念 同學(xué)們選班長時(shí),要投票,然后統(tǒng)計(jì)選票,同學(xué)們選班長時(shí),要投票,然后統(tǒng)計(jì)選票,常用的方法是畫常用的方法是畫“正正”,每個(gè),每個(gè)“正正”號(hào)五號(hào)五劃,代表五票,最后統(tǒng)計(jì)劃,代表五票,最后統(tǒng)計(jì)“正正”號(hào)的個(gè)數(shù)號(hào)的個(gè)數(shù)即可,這就是計(jì)數(shù)。單片機(jī)有兩個(gè)定時(shí)即可,這就是計(jì)數(shù)。單片機(jī)有兩個(gè)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器T0T0和和T1T1,都
2、可對外部輸入脈沖計(jì)數(shù)。,都可對外部輸入脈沖計(jì)數(shù)。 2 2計(jì)數(shù)器的容量計(jì)數(shù)器的容量 我們用一個(gè)瓶子盛水,水一滴滴地滴我們用一個(gè)瓶子盛水,水一滴滴地滴入瓶中,水滴不斷落下,瓶的容量是入瓶中,水滴不斷落下,瓶的容量是有限的,過一段時(shí)間之后,水就會(huì)逐有限的,過一段時(shí)間之后,水就會(huì)逐漸變滿,再滴就會(huì)溢出。單片機(jī)中的漸變滿,再滴就會(huì)溢出。單片機(jī)中的計(jì)數(shù)器也一樣,計(jì)數(shù)器也一樣,T0T0和和T1T1這兩個(gè)計(jì)數(shù)器這兩個(gè)計(jì)數(shù)器分別是由兩個(gè)分別是由兩個(gè)8 8位的位的RAMRAM單元組成的,單元組成的,即每個(gè)計(jì)數(shù)器都是即每個(gè)計(jì)數(shù)器都是1616位的計(jì)數(shù)器,最位的計(jì)數(shù)器,最大的計(jì)數(shù)量是大的計(jì)數(shù)量是6553665536。
3、3. 3. 定時(shí)定時(shí)一個(gè)鐘表,秒針走一個(gè)鐘表,秒針走6060次,就是次,就是1 1分鐘,分鐘,所以時(shí)間就轉(zhuǎn)化為秒針走的次數(shù),也就所以時(shí)間就轉(zhuǎn)化為秒針走的次數(shù),也就是計(jì)數(shù)的次數(shù),可見,計(jì)數(shù)的次數(shù)和時(shí)是計(jì)數(shù)的次數(shù),可見,計(jì)數(shù)的次數(shù)和時(shí)間有關(guān)。只要計(jì)數(shù)脈沖的間隔相等,則間有關(guān)。只要計(jì)數(shù)脈沖的間隔相等,則計(jì)數(shù)值就代表了時(shí)間,即可實(shí)現(xiàn)定時(shí)。計(jì)數(shù)值就代表了時(shí)間,即可實(shí)現(xiàn)定時(shí)。秒針每一次走動(dòng)的時(shí)間是秒針每一次走動(dòng)的時(shí)間是1 1秒,所以秒秒,所以秒針走針走6060次,就是次,就是6060秒,即秒,即1 1分鐘。分鐘。因此,單片機(jī)中的定時(shí)器和計(jì)數(shù)器是一因此,單片機(jī)中的定時(shí)器和計(jì)數(shù)器是一個(gè)東西,只不過計(jì)數(shù)器是記錄
4、的外界發(fā)個(gè)東西,只不過計(jì)數(shù)器是記錄的外界發(fā)生的事情,而定時(shí)器則是由單片機(jī)提供生的事情,而定時(shí)器則是由單片機(jī)提供一個(gè)非常穩(wěn)定的計(jì)數(shù)源。一個(gè)非常穩(wěn)定的計(jì)數(shù)源。 4. 4. 溢出溢出上面我們舉的例子,水滴滿瓶子后,上面我們舉的例子,水滴滿瓶子后,再滴就會(huì)溢出,流到桌面上。單片機(jī)再滴就會(huì)溢出,流到桌面上。單片機(jī)計(jì)數(shù)器溢出后將使得計(jì)數(shù)器溢出后將使得TF0TF0變?yōu)樽優(yōu)椤?”1”,一旦一旦TF0TF0由由0 0變成變成1 1,就是產(chǎn)生了變化,就是產(chǎn)生了變化,就會(huì)引發(fā)事件,就會(huì)申請中斷。就會(huì)引發(fā)事件,就會(huì)申請中斷。 5. 5. 任意定時(shí)及計(jì)數(shù)的方法任意定時(shí)及計(jì)數(shù)的方法計(jì)數(shù)器的容量是16位,也就是最大的計(jì)數(shù)值
5、到65536,計(jì)數(shù)計(jì)到65536就會(huì)產(chǎn)生溢出。如果計(jì)數(shù)值要小于65536,怎么辦呢?一個(gè)空的瓶子,要1萬滴水滴進(jìn)去才會(huì)滿,我們在開始滴水之前就先放入一些水,就不需要10000滴了。比如先放入2000滴,再滴8000滴就可以把瓶子滴滿。在單片機(jī)中,我們也采用類似的方法,稱為“預(yù)置數(shù)”的方法,我們要計(jì)1000,那就先放進(jìn)64536,再來1000個(gè)脈沖,不就到了65536了嗎?定時(shí)也是如此。 6 6單片機(jī)定時(shí)器單片機(jī)定時(shí)器/ /計(jì)數(shù)器的結(jié)構(gòu)計(jì)數(shù)器的結(jié)構(gòu)組成:兩個(gè)16位的定時(shí)器T0和T1,以及他們的工作方式寄存器TMOD和控制寄存器TCON等組成。內(nèi)部通過總線與CPU相連。定時(shí)器T0和T1各由兩個(gè)8位
6、特殊功能寄存器TH0、TL0、TH1、TL1構(gòu)成。工作方式寄存器TMOD:用于設(shè)置定時(shí)器的工作模式和工作方式;控制寄存器TCON:用于啟動(dòng)和停止定時(shí)器的計(jì)數(shù),并控制定時(shí)器的狀態(tài);單片機(jī)復(fù)位時(shí),兩個(gè)寄存器的所有位都被清0。8兩個(gè)可編程的定時(shí)器/計(jì)數(shù)器T1、T0。每個(gè)定時(shí)器內(nèi)部結(jié)構(gòu)實(shí)際上就是一個(gè)可編程的加法計(jì)數(shù)器,由編程來設(shè)置它工作在定時(shí)狀態(tài)還是計(jì)數(shù)狀態(tài)。兩種工作模式: (1) 計(jì)數(shù)器工作模式就是對外部事件進(jìn)行計(jì)數(shù)。計(jì)數(shù)脈沖來自相應(yīng)的外部輸入引腳T0(P3.4)或T1(P3.5)。當(dāng)輸入信號(hào)發(fā)生由1至0的負(fù)跳變(下降沿)時(shí),計(jì)數(shù)器(TH0,TL0或TH1,TL1)的值增1。計(jì)數(shù)的最高頻率一般為振蕩
7、頻率的1/24。Why?(2) 定時(shí)器工作模式也是通過計(jì)數(shù)實(shí)現(xiàn)的。計(jì)數(shù)脈沖來自內(nèi)部時(shí)鐘脈沖,每個(gè)機(jī)器周期計(jì)數(shù)值增1,每個(gè)機(jī)器周期=12個(gè)振蕩周期,因此計(jì)數(shù)頻率為振蕩頻率的1/12。所以定時(shí)時(shí)間=計(jì)數(shù)值機(jī)器周期。4種工作方式 (方式0-方式3) 。1C/T=10當(dāng)控制信號(hào) 定時(shí)器工作在定時(shí)方式;加1計(jì)數(shù)器對脈沖f進(jìn)行計(jì)數(shù),每來一個(gè)脈沖,計(jì)數(shù)器加1,直到計(jì)時(shí)器計(jì)滿溢出; 因?yàn)?,即一個(gè)計(jì)數(shù)脈沖的周期就是一個(gè)機(jī)器周期;計(jì)數(shù)器計(jì)數(shù)的是機(jī)器周期脈沖個(gè)數(shù)。從而實(shí)現(xiàn)定時(shí)。當(dāng)控制信號(hào) 定時(shí)器工作在計(jì)數(shù)方式;加1計(jì)數(shù)器對來自輸入引腳T0(P3.4)和T1(P3.5)的外信號(hào)脈沖進(jìn)行計(jì)數(shù),每來一個(gè)脈沖,計(jì)數(shù)器加1
8、,直到計(jì)時(shí)器計(jì)滿溢出;Tx Tx THxTHxTFxTFxTLxTLxTRxTRxINTxINTx定時(shí)定時(shí)計(jì)數(shù)計(jì)數(shù)0f0/12ff 控制信號(hào)控制信號(hào)K K“1 1”啟動(dòng),計(jì)數(shù)器運(yùn)行;啟動(dòng),計(jì)數(shù)器運(yùn)行;“0 0”停止,計(jì)數(shù)器停止;停止,計(jì)數(shù)器停止;定時(shí)器定時(shí)器/ /計(jì)數(shù)器原理框圖計(jì)數(shù)器原理框圖加加1 1計(jì)數(shù)器計(jì)數(shù)器0/12ff0/12ff控制信號(hào)K可以控制計(jì)數(shù)器的“啟動(dòng)”和“停止”,K = TRx(INTx+GATE)11 TCONTCON(88H88H)在每個(gè)機(jī)器周期的S5P2期間采樣檢測引腳輸入電平。若前一個(gè)機(jī)器周期采樣值為“1”,后一個(gè)機(jī)器周期采樣值為“0”,則計(jì)數(shù)器加1。新的計(jì)數(shù)值在檢測
9、到輸入引腳電平發(fā)生“1”到“0”的負(fù)跳變(下降沿)后,于下一個(gè)機(jī)器周期的S3P1期間裝入計(jì)數(shù)器中。由于CPU需要兩個(gè)機(jī)器周期來識(shí)別一個(gè)“1”到“0”的跳變信號(hào),所以最高的計(jì)數(shù)頻率為振蕩周期的1/24。12P P1 1P P2 2S S1 1振蕩周期振蕩周期狀態(tài)周期狀態(tài)周期機(jī)器周期機(jī)器周期機(jī)器周期機(jī)器周期指令周期指令周期XTALXTAL2 2(OSC)(OSC)S S2 2S S3 3S S4 4S S5 5S S6 6S S1 1S S2 2S S4 4S S5 5S S3 3S S6 6P P1 1P P1 1P P1 1P P1 1P P1 1P P1 1P P1 1P P1 1P P1
10、1P P1 1P P1 1P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 2P P2 213定時(shí)/計(jì)數(shù)器對輸入信號(hào)的要求1.外部計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24,例如選用12MHz頻率的晶體,則可輸入500KHz的外部脈沖。2.輸入信號(hào)的高、低電平至少要分別保持一個(gè)機(jī)器周期。如圖所示,圖中Tcy為機(jī)器周期??删幊潭〞r(shí)器的工作方式、啟動(dòng)、停止、溢出標(biāo)志、計(jì)數(shù)器等都是可編程的通過設(shè)置寄存器TMOD,TCON,TH0,TL0,TH1和TL1 實(shí)現(xiàn)。當(dāng)設(shè)置了定時(shí)器的工作方式并啟動(dòng)定時(shí)器工作后,定時(shí)器就按被設(shè)定好的工作方式
11、獨(dú)立工作,不再占用CPU,只有在計(jì)數(shù)器計(jì)滿溢出時(shí)才向CPU申請中斷,占用CPU。由此可見,定時(shí)器是單片機(jī)中工作效率高且應(yīng)用靈活的部件。148051單片機(jī)定時(shí)器主要有幾個(gè)特殊功能寄存器組成:TMOD,TCON,TH0,TL0,TH1,TL1。TMOD:設(shè)置定時(shí)器的工作方式;TCON:控制定時(shí)器的啟動(dòng)和停止;TH0和TL0 :存放定時(shí)器T0的初值或計(jì)數(shù)結(jié)果; TH0存放高8位,TL0 存放低8位;TH1和TL1 :存放定時(shí)器T1的初值或計(jì)數(shù)結(jié)果; TH1存放高8位,TL1 存放低8位;15168位分為兩組,高位分為兩組,高4位控制位控制T1,低,低4位控制位控制T0。(1) GATE 門控位門控位
12、 0: 以以TRX (X=0,1) 來啟動(dòng)定時(shí)器來啟動(dòng)定時(shí)器/計(jì)數(shù)器運(yùn)行。計(jì)數(shù)器運(yùn)行。1: 用外中斷引腳用外中斷引腳 (INT0*或或INT1*) 上的高電平上的高電平和和TRX來啟來啟動(dòng)定時(shí)器動(dòng)定時(shí)器/計(jì)數(shù)器運(yùn)行。計(jì)數(shù)器運(yùn)行。(4)TMOD無位地址,不能位尋址。無位地址,不能位尋址。(5)復(fù)位時(shí),復(fù)位時(shí),TMOD所有位均為所有位均為“0”。(3) C/T* 計(jì)數(shù)器模式和定時(shí)器模式選擇位計(jì)數(shù)器模式和定時(shí)器模式選擇位0: 定時(shí)器模式。定時(shí)器模式。 1: 計(jì)數(shù)器模式。計(jì)數(shù)器模式。(2) M1、M0 工作方式選擇位工作方式選擇位 M1 M0 工工 作作 方方 式式 0 0 方式方式0,13位定時(shí)器位
13、定時(shí)器/計(jì)數(shù)器。計(jì)數(shù)器。 0 1方式方式1,16位定時(shí)器位定時(shí)器/計(jì)數(shù)器。計(jì)數(shù)器。 1 0 方式方式2,8位常數(shù)自動(dòng)重新裝載位常數(shù)自動(dòng)重新裝載 1 1 方式方式3,僅適用于,僅適用于T0,低4位與外部中斷有關(guān),后面介紹。高4位的功能如下: (1) TF1、TF0 計(jì)數(shù)溢出標(biāo)志位 定時(shí)器T0或T1計(jì)數(shù)溢出時(shí),由硬件自動(dòng)將此位置“1”;TFx可以由程序查詢,也是定時(shí)中斷的請求源;(2) TR1、TR0 計(jì)數(shù)運(yùn)行控制位 TRx=1: 啟動(dòng)定時(shí)器/計(jì)數(shù)器工作 TRx=0: 停止定時(shí)器/計(jì)數(shù)器工作 18MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器是可編程的,但在進(jìn)行定時(shí)或計(jì)數(shù)之前要對程序進(jìn)行初始化,具體步驟如下:
14、(1)對TMOD賦值,以確定定時(shí)器的工作模式;(2)置定時(shí)/計(jì)數(shù)器初值,直接將初值寫入寄存器的TH0、TL0或TH1、TL1;(3)根據(jù)需要,對IE置初值,開放定時(shí)器中斷;(4)對TCON寄存器中的TR0或TR1置位,啟動(dòng)定時(shí)/計(jì)數(shù)器,置位以后,計(jì)數(shù)器即按規(guī)定的工作模式和初值進(jìn)行計(jì)數(shù)或開始定時(shí)。19初值計(jì)算: 設(shè)計(jì)數(shù)器的最大值為M,則置入的初值X為: 計(jì)數(shù)方式:X=M-計(jì)數(shù)值 定時(shí)方式:由(M-X)T=定時(shí)值,得X=M-定時(shí)值/T T為計(jì)數(shù)周期,是單片機(jī)的機(jī)器周期。(模式0: M為213,模式1: M為216,模式2和3: M為28)20例如:機(jī)器周期為例如:機(jī)器周期為1s 1s 時(shí),時(shí), 若
15、工作在模式若工作在模式0 0,則最大定時(shí)值為,則最大定時(shí)值為:2:213131s =8.192ms1s =8.192ms 若工作在模式若工作在模式1,1,則最大定時(shí)值為則最大定時(shí)值為: : 2 216161s =65.536ms1s =65.536msMCS-51的定時(shí)器T0有4種工作方式:即:方式0,方式1,方式2,方式3。MCS-51的定時(shí)器T1有3種工作方式:即:方式0,方式1,方式2。215.2.1 方式0 M1、M0設(shè)置為00 ,為13位計(jì)數(shù)器,以T1為例,其框圖如下:22計(jì)數(shù)脈沖輸入加1計(jì)數(shù)器TH1 D12 D11 D10 D9 D8 D7 D6 D5TL1 D4 D3 D2 D1
16、 D023n在這種方式下,在這種方式下,16位寄存器位寄存器TH1和和TL1只用只用13位,位,由由TH1的的8位和位和TL1的低的低5位組成。位組成。TL1的高的高3位不定。位不定。n當(dāng)當(dāng)TL1的低的低5位計(jì)數(shù)溢出時(shí),向位計(jì)數(shù)溢出時(shí),向TH1進(jìn)位。而進(jìn)位。而TH1計(jì)計(jì)數(shù)溢出時(shí),則向中斷標(biāo)志位數(shù)溢出時(shí),則向中斷標(biāo)志位TF1進(jìn)位(即硬件將進(jìn)位(即硬件將TF1置置1),并請求中斷。),并請求中斷。n可通過查詢可通過查詢TF1是否置是否置“1”或考察中斷是否發(fā)生來或考察中斷是否發(fā)生來判定定時(shí)器判定定時(shí)器T1的操作完成與否。的操作完成與否。當(dāng)C/T=0時(shí),為定時(shí)工作模式,開關(guān)接到振蕩器的12分頻器輸出
17、上,計(jì)數(shù)器對機(jī)器周期脈沖計(jì)數(shù)。其定時(shí)時(shí)間為:(213-初值)振蕩周期12例如:若晶振頻率為12MHz,則最長的定時(shí)時(shí)間為(213-0)(1/12)12us=8.191ms當(dāng)C/T=1時(shí),為計(jì)數(shù)工作模式,開關(guān)與外部引腳T1(P3.5)接通,計(jì)數(shù)器對來自外部引腳的輸入脈沖計(jì)數(shù)。當(dāng)外部信號(hào)發(fā)生負(fù)跳變時(shí)計(jì)數(shù)器加1。24GATE控制定時(shí)器Tx(T1或T0)的條件:(1) 當(dāng)GATE=0時(shí),“或門”輸出恒為1,“與門”的輸出信號(hào)K由TRx決定(即此時(shí)K=TRx),定時(shí)器不受INTx輸入電平的影響,由TRx直接控制定時(shí)器的啟動(dòng)和停止。TRx=1;計(jì)數(shù)啟動(dòng);TRx=0;計(jì)數(shù)停止;(2) 當(dāng)GATE=1時(shí), “
18、與門”的輸出信號(hào)K由INTx輸入電平和TRx位的狀態(tài)一起決定(即此時(shí)K=TRxINTx),當(dāng)且僅當(dāng)TRx=1且INTx=1(高電平)時(shí),計(jì)數(shù)啟動(dòng);否則,計(jì)數(shù)停止。255.3.2 方式1 M1、M0=01,為16位的計(jì)數(shù)器,除位數(shù)外,其他與方式0相同。其定時(shí)時(shí)間為:(216-初值)振蕩周期12例如:若晶振頻率為12MHz,則最長的定時(shí)時(shí)間為(216-0)(1/12)12us=65.536ms265.3.3 方式2 M1、M0=10 ,為自動(dòng)恢復(fù)初值的8位計(jì)數(shù)器,等效框圖如下: TLx作為8位計(jì)數(shù)器,THx作為重置初值的緩沖器。 27THx作為常數(shù)緩沖器作為常數(shù)緩沖器,當(dāng),當(dāng)TLx計(jì)數(shù)溢出時(shí),在置
19、計(jì)數(shù)溢出時(shí),在置“1”溢出標(biāo)志溢出標(biāo)志TFx的同時(shí),還的同時(shí),還自動(dòng)的將自動(dòng)的將THx中的初值送至中的初值送至TLx,使,使TLx從初值開從初值開始重新計(jì)數(shù)。定時(shí)器始重新計(jì)數(shù)。定時(shí)器/計(jì)數(shù)器的方式計(jì)數(shù)器的方式2工作過程如圖工作過程如圖 (x=0, 1) 。優(yōu)點(diǎn):方式0和方式1用于循環(huán)重復(fù)定時(shí)或計(jì)數(shù)時(shí),在每次計(jì)數(shù)器擠滿溢出后,計(jì)數(shù)器復(fù)0。若要進(jìn)行新一輪的計(jì)數(shù),就得重新裝入計(jì)數(shù)初值。這樣一來不僅造成編程麻煩,而且影響定時(shí)精度。而方式2具有初值自動(dòng)裝入的功能,避免了這個(gè)缺點(diǎn),可實(shí)現(xiàn)精確的定時(shí)。缺點(diǎn):只有8位計(jì)數(shù)器,定時(shí)時(shí)間短、計(jì)數(shù)范圍小。其定時(shí)時(shí)間為: (28-初值)振蕩周期12若晶振頻率為12MH
20、z,則最長的定時(shí)時(shí)間為(28-0)(1/12)12us=0.256ms28方式方式2 2工作過程圖工作過程圖 (x=0, 1) (x=0, 1) 。5.3.4 方式3 只適用于定時(shí)器/計(jì)數(shù)器T0。T1不能工作在方式3。如果將T1置為方式3,則相當(dāng)于TR1=0,停止計(jì)數(shù) (此時(shí)T1可用來作串行口波特率產(chǎn)生器) 。1. 工作方式3下的T0 T0在方式3時(shí)被拆成兩個(gè)獨(dú)立的8位計(jì)數(shù)器:TH0和TL0。8位計(jì)數(shù)器TL0使用T0的狀態(tài)控制位C/T*、GATE、TR0、INT0,它既可以工作在定時(shí)方式,也可以工作在計(jì)數(shù)方式。8位定時(shí)器TH0被固定為一個(gè)8位定時(shí)器(不能作外部計(jì)數(shù)模式) ,并使用定時(shí)器T1的狀
21、態(tài)控制位TR1,同時(shí)占用定時(shí)器T1的中斷請求源TF1。此時(shí),定時(shí)器TH0的啟動(dòng)或停止只受TR1控制。TR1=1時(shí),啟動(dòng)TH0的計(jì)數(shù); TR1=0時(shí),停止TH0的計(jì)數(shù)2930各引腳與各引腳與T0T0的邏輯關(guān)系如圖所示的邏輯關(guān)系如圖所示: : 2. T0工作在方式3下T1的各種工作方式 注意:當(dāng)T0處于方式3時(shí), T1仍可設(shè)置為方式0、方式1和方式2。當(dāng)時(shí)由于TR1、TF1和T1的中斷源都已被定時(shí)器T0(中的TH0)占用,所以定時(shí)器T1 僅有控制位C/T來決定其工作在定時(shí)方式或計(jì)數(shù)方式。當(dāng)計(jì)數(shù)器計(jì)滿溢出時(shí),不能置位“TF1”,而只能將輸出送往串口。所以,此時(shí)定時(shí)器T1一般用作串口的波特率發(fā)生器,或
22、不需要中斷的場合。(1) T1工作在方式031編程說明MCS-51單片機(jī)的定時(shí)器是可編程的,但在進(jìn)行定時(shí)或計(jì)數(shù)之前要對程序進(jìn)行初始化,具體步驟如下:(1)確定工作方式字:對TMOD寄存器正確賦值;(2)確定定時(shí)初值:計(jì)算初值,直接將初值寫入寄存器的TH0、TL0或TH1、TL1;初值計(jì)算: 設(shè)計(jì)數(shù)器的最大值為M,則置入的初值X為: 計(jì)數(shù)方式:X=M-計(jì)數(shù)值 定時(shí)方式:由(M-X)T=定時(shí)值,得X=M-定時(shí)值/T T為計(jì)數(shù)周期,是單片機(jī)的機(jī)器周期。(模式0 M為213,模式1 M為216,模式2和3 M為28)(3)根據(jù)需要,對IE置初值,開放定時(shí)器中斷;(4)啟動(dòng)定時(shí)/計(jì)數(shù)器,對TCON寄存器
23、中的TR0或TR1置位,置位以后,計(jì)數(shù)器即按規(guī)定的工作模式和初值進(jìn)行計(jì)數(shù)或開始定時(shí)。3233例5-1 要在P1.0上輸出一個(gè)周期為2ms的方波,假設(shè)系統(tǒng)振蕩頻率采用12MHz。 利用T0方式0產(chǎn)生1ms的定時(shí)方波的周期用T0來確定,讓T0每隔1ms計(jì)數(shù)溢出1次,即TF0=1;查詢到TF0=1 則CPU對P1.0取反。即要使即要使P1.0P1.0每隔每隔1ms1ms取反取反一次。一次。34第一步: 確定工作方式字 方式0 (13位)最長可定時(shí) 8.192ms; 方式1 (16位)最長可定時(shí) 65.536ms; 方式2 (8位)最長可定時(shí) 256s。T0為方式0, M1M0=00 定時(shí)工作狀態(tài),
24、C/T=0GATE=0,不受INT0控制,T1不用全部取“0”值。故TMOD=00H35第二步: 計(jì)算1ms定時(shí)的初值X 設(shè)初值為X,則有: (213-X) 1210-6 1/12=110-3可求得:X=8192-1000=7192X化為16進(jìn)制,即X=1C18H=1,1100,000 1,1000B。所以,T0的初值為: TH0=E0H TL0=18HTH0 1 1 1 0 0 0 0 0TL0 1 1 0 0 0第三步: 程序設(shè)計(jì) 采用查詢TF0的狀態(tài)來控制P1.0的輸出,同時(shí)要重新裝入初值。36 參考程序: ORG 0100HMAIN: MOV TMOD, #00H;設(shè)置T0為方式0MO
25、VTL0,#18H;送計(jì)數(shù)初值 MOVTH0,#0E0H;送計(jì)數(shù)初值SETB TR0 ;啟動(dòng)T0LOOP: JBC TF0,NEXT ;查詢定時(shí)時(shí)間到,轉(zhuǎn)NEXT,同時(shí)清TF0SJMPLOOP;重復(fù)循環(huán)NEXT: MOV TL0, #18H ;T0重置初值 MOV TH0, #0E0H ;T0重置初值 CPL P1.0 ;P1.0的狀態(tài)取反SJMPLOOP;重復(fù)循環(huán)END37例5-2 將例5-1中的輸出方波周期改為1秒。 分析: 周期為1s的方波要求500ms的定時(shí)。 (1) T0工作方式的確定因定時(shí)時(shí)間較長,采用哪一種工作方式?由各種工作方式的特性,可計(jì)算出: 方式0 (13位)最長可定時(shí)
26、8.192ms; 方式1 (16位)最長可定時(shí) 65.536ms; 方式2 (8位)最長可定時(shí) 256s。 所以采用定時(shí)器定時(shí)加軟件計(jì)數(shù)的方法來實(shí)現(xiàn)延長定時(shí)。選方式1,定時(shí)50ms,軟件計(jì)數(shù)10次。50ms 10=500ms。 所以,TMOD=01H38以上各方式以上各方式都不滿足要求都不滿足要求 (2) 計(jì)算計(jì)數(shù)初值因?yàn)? (216-X)1210-6 1/12=5010-3所以: X=15536=3CB0H因此: TH0=3CH,TL0=B0H (3) 10次計(jì)數(shù)的實(shí)現(xiàn)設(shè)計(jì)一個(gè)軟件計(jì)數(shù)器,初始值設(shè)為10。每隔50ms定時(shí)時(shí)間到,產(chǎn)生溢出標(biāo)志TF0,程序查詢到TF0=1,則軟件計(jì)數(shù)器減1。這樣
27、減到0時(shí)就獲得了500ms的定時(shí)。39(4) 程序設(shè)計(jì)(參考程序) MAIN: MOV TMOD,#01H ;設(shè)T0工作在方式1MOV TL0,#0B0H ;給T0設(shè)初值MOV TH0,#3CHMOVR7,#10;軟件計(jì)數(shù)器初值SETB TR0 ;啟動(dòng)T0LOOP:JBCTF0, NEXT;查詢定時(shí)時(shí)間到,轉(zhuǎn)NEXT,同時(shí)清TF0SJMP LOOP NEXT: DJNZ R7,EXIT;R7不等于0,則不對P1.0取反CPLP1.0MOVR7,#10;重置軟件計(jì)數(shù)器初值EXIT:MOV TL0,#0B0H ;T0中斷子程序,重裝初值MOV TH0,#3CH SJMPLOOPEND 40以上的定
28、時(shí)程序中,程序都要重置計(jì)時(shí)器初值,這樣從定時(shí)器溢出發(fā)出溢出標(biāo)志,到重裝完定時(shí)器初值,在開始計(jì)數(shù),之間總會(huì)有一段時(shí)間間隔,使定時(shí)時(shí)間增加了若干微秒,造成定時(shí)不夠精確。為了減小這種定時(shí)誤差,單片機(jī)中設(shè)置了工作方式2(自動(dòng)重裝初值),則可避免上述因素,省去程序中重裝初值的指令,實(shí)現(xiàn)精確定時(shí)。但是工作方式2的缺點(diǎn)是只有8位計(jì)數(shù)器,定時(shí)時(shí)間受到很大限制。41例5-3 利用T0方式2產(chǎn)生250us的定時(shí),在P1.0引腳上輸出周期為500us的方波(要求精確定時(shí))。(設(shè)系統(tǒng)振蕩為12MHz)(1) 工作方式選擇實(shí)現(xiàn)精確定時(shí),采用方式2。對于12MHz晶振,方式2的最大計(jì)數(shù)時(shí)間為28=256us, 所以可實(shí)現(xiàn)
29、250us的精確定時(shí)。故,設(shè)置TMOD=02H。(2) 計(jì)算初值設(shè)初值為X: 則 (28-X) 1210-61/12=25010-6 X=28-250=6=06H(3) 程序設(shè)計(jì)采用查詢TF0的狀態(tài)來控制P1.0的輸出。42(4) 參考程序MAIN: MOVTMOD, #02H ;置T0方式2MOVTH0,#06H ;送計(jì)數(shù)初值MOVTL0,#06HSETB TR0 ;啟動(dòng)T0LOOP: JBC TF0,NEXT ;查詢定時(shí)時(shí)間到,轉(zhuǎn)NEXT,同時(shí)清TF0SJMP LOOPNEXT:CPLP1.0;輸出取反SJMP LOOP;重復(fù)循環(huán)END43GATE門可使定時(shí)器Tx(T0或T1)的啟動(dòng)計(jì)數(shù)受
30、INTx*的控制,可測量引腳INTx*(P3.2或P3.3) 上正脈沖的寬度(機(jī)器周期數(shù)) 。以T1為例:44當(dāng)當(dāng)GATE=1GATE=1時(shí),時(shí),K=TRxINTxK=TRxINTxK K例5-4 利用T1門控位GATE測試INT1*(P3.3)引腳上出現(xiàn)的正脈沖的寬度。分析:根據(jù)設(shè)計(jì)要求,將T1設(shè)定為定時(shí)工作模式、方式1、GATE=1;當(dāng)TR1=1時(shí),一旦INT1*(P3.3)引腳上出現(xiàn)高電平就開始計(jì)數(shù),直到出現(xiàn)低電平為止。然后讀取TH1、TL1中的計(jì)數(shù)值,分別送到寄存器A和B中。由于T1工作在定時(shí)方式,計(jì)數(shù)器計(jì)數(shù)的是機(jī)器周期的脈沖數(shù);將脈沖數(shù)轉(zhuǎn)化成時(shí)間,就可得到正脈沖的寬度。45ORG 0
31、100HMAIN: MOV TMOD, #90H ;T1為方式1定時(shí)控制字MOV TL1, #00H;計(jì)數(shù)器初值為0MOV TH1, #00HLOOP: JB P3.3, LOOP;等待INT1*低SETB TR1;如INT1*為低,啟動(dòng)T1LOOP1: JNB P3.3, LOOP1;等待INT1*升高,開始計(jì)數(shù)LOOP2: JB P3.3, LOOP2 ;等待INT1*降低,停止計(jì)數(shù)CLR TR1;停止T1計(jì)數(shù)MOV A, TL1;T1計(jì)數(shù)值的低8位送AMOV B, TH1;T1計(jì)數(shù)值的高8位送B由于定時(shí)器最長為16位計(jì)數(shù)器,因此被測脈沖高電平的寬度不能超過65536個(gè)機(jī)器周期。46參考程
32、序參考程序: :例5-5 當(dāng)T0(P3.4) 引腳上發(fā)生負(fù)跳變時(shí),從P1.0引腳上輸出一個(gè)周期為1ms的方波,如圖所示。(系統(tǒng)振蕩為6MHz) 兩個(gè)計(jì)數(shù)器同時(shí)使用47(1) 工作方式選擇lT0為方式1計(jì)數(shù),初值 0FFFFH,即外部計(jì)數(shù)輸入端T0(P3.4) 發(fā)生一次負(fù)跳變時(shí),T0加1且溢出,溢出標(biāo)志TF0置“1”,發(fā)中斷請求。在進(jìn)入T0中斷程序后,把F0標(biāo)志置“1”,說明T0引腳上已接收了負(fù)跳變信號(hào)。lT1定義為方式2定時(shí)。在T0引腳產(chǎn)生一次負(fù)跳變后,啟動(dòng)T1每500s產(chǎn)生一次中斷,在中斷服務(wù)程序中對P1.0求反,使P1.0產(chǎn)生周期1ms的方波。lTMOD=0010,0101=25H(2)
33、計(jì)算T1初值設(shè)T1的初值為X: 則 (28-X) 210-6=510-4 X=28-250=6=06H48MAIN: MOV TMOD, #25H ;初始化,T1為方式2定時(shí),T0為方 式1計(jì)數(shù)MOV TL0, #0FFH ;T0置初值 MOV TH0, #0FFHSETB TR0 ;啟動(dòng)T0MOV TL1, #06H ;T1置初值MOV TH1, #06HLOOP0:JBCTF0,NEXT0;查詢T0有無負(fù)跳變,有則轉(zhuǎn)到NEXT0SJMP LOOP0NETX0:CPLP1.0;P1.0取反SETB TR1;啟動(dòng)T1LOOP1:JBCTF1,NEXT1 ;查詢T1定時(shí)時(shí)間到否,到則轉(zhuǎn)到NEXT
34、1SJMP LOOP1NEXT1:CPLP1.0;P1.0取反SJMP LOOP1END49(3) (3) 程序設(shè)計(jì)程序設(shè)計(jì)T0 方式3時(shí),TL0和TH0被分成兩個(gè)獨(dú)立的8位定時(shí)器/計(jì)數(shù)器。其中, TL0: 8位定時(shí)器/計(jì)數(shù)器; TH0: 8位定時(shí)器。當(dāng)T1作串行口波特率發(fā)生器時(shí),T0才設(shè)置為方式3。50以上例題均采用查詢的方法,這種方法很簡單,但是在定時(shí)器整個(gè)計(jì)數(shù)的過程中,CPU要不斷地查詢溢出標(biāo)志TFx的狀態(tài),很難執(zhí)行其他操作,占用了CPU的工作時(shí)間,使得CPU的工作效率不高。若采用中斷的方式來實(shí)現(xiàn),可大大提高CPU的工作效率。515-52例5-6 如圖所示:P1中接有八個(gè)發(fā)光二極管,編程
35、使八個(gè)管輪流點(diǎn)亮,每個(gè)管亮100ms,設(shè)晶振為6MHz。5-53分析 : 利用T1完成100ms的定時(shí),當(dāng)P1口線輸出1時(shí),發(fā)光二極管亮,每隔100ms,1左移一次。采用方式1定時(shí),先計(jì)算計(jì)數(shù)初值: 6MHz晶體,機(jī)器周期 MC=2s 計(jì)數(shù)值: 100ms/2s =50000=C350H定時(shí)器初值:(C350H)補(bǔ) =10000H-C350H=3CB0HM0M1GATEM0M1GATEC/ TC/ TT1 方式1 :TMOD=10H5-54 ORG 00HMOV TMOD,#10H ;T1工作于定時(shí)方式1MOV A,#01H ;置初值,第一個(gè)LED亮NEXT:MOV P1,A MOV TH1,
36、#3CH MOV TL1,#0B0H ; 定時(shí)100ms SETB TR1 AGAI: JBC TF1,SHI ; 100ms到轉(zhuǎn)SHI,并清TF1SJMP AGAISHI: RL A SJMP NEXT 查詢方式5-55 ORG 0030H ;主程序MAIN:MOV A,#01H MOV P1,A ;置初值,第一個(gè)LED亮 MOV TMOD,#10H ;T1工作于定時(shí)方式1 MOV TH1,#3CH MOV TL1,#0B0H ;定時(shí)100ms SETB EA ;中斷總允許 SETB TR1 ;啟動(dòng)T1工作 SETB ET1 ;允許T1中斷WAIT:SJMP WAIT ;等待中斷 ORG 0
37、000H AJMP MAIN ;單片機(jī)復(fù)位后從0000H開始執(zhí)行 ORG 001BH ;T1中斷入口 AJMP TIME1 ;轉(zhuǎn)到T1 中斷服務(wù)程序5-56TIME1:RL A ;左移一位 MOV P1,A ;下一個(gè)發(fā)光二極管亮 MOV TH1,#3CH MOV TL1,#0B0H ;重裝計(jì)數(shù)值 RETI ;中斷返回以上程序執(zhí)行結(jié)果,八個(gè)LED一直循環(huán)輪流點(diǎn)亮。5-57例5-7 在P1.7端接一個(gè)發(fā)光二極管LED,要求利用定時(shí)控制使LED亮一秒滅一秒,周而復(fù)始,設(shè)fosc=6MHZ。89C51P1.7+5VLEDP1.0T11s分析:16位定時(shí)最大 65536*2us=131.072ms,顯然不能滿足要求,
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 顧問服務(wù)合同范本條款
- 控?zé)煕Q心壯志
- 新版車輛資產(chǎn)抵押借款合同
- 項(xiàng)目貸款擔(dān)保服務(wù)合同
- 國際采購合同策略
- 買賣房屋宅基地合同應(yīng)注意什么
- 道路貨運(yùn)代理合同
- 企業(yè)產(chǎn)品保證書
- 鞋材采購合同格式范本
- 投標(biāo)保證金函的撰寫要點(diǎn)
- 并購功夫:2015本土并購十大經(jīng)典案例詳解
- 宇通客車新媒體運(yùn)營與傳播方案
- 國家開放大學(xué)《行政組織學(xué)》形考1-5標(biāo)準(zhǔn)答案
- 租賃房屋交接清單49226
- 公司4M變更申請通知書
- 2014高考語文一輪復(fù)習(xí)課外文言訓(xùn)練-文天祥傳
- 國開作業(yè)《建筑制圖基礎(chǔ)》學(xué)習(xí)過程表現(xiàn)參考22
- 《愚公移山》比較閱讀16篇(歷年中考語文文言文閱讀試題匯編)(含答案與翻譯)(截至2021年)
- 食品安全BRCGS包裝材料全球標(biāo)準(zhǔn)第六版管理手冊及程序文件
- 物流公司人員配置及崗位職責(zé)(6篇)
- DB11-T1497-2017學(xué)校及托幼機(jī)構(gòu)飲水設(shè)備使用維護(hù)規(guī)范
評論
0/150
提交評論