單片機(jī)原理和應(yīng)用-KFIL C項(xiàng)目教程項(xiàng)目六 99 s倒計(jì)時(shí)ppt課件_第1頁(yè)
單片機(jī)原理和應(yīng)用-KFIL C項(xiàng)目教程項(xiàng)目六 99 s倒計(jì)時(shí)ppt課件_第2頁(yè)
單片機(jī)原理和應(yīng)用-KFIL C項(xiàng)目教程項(xiàng)目六 99 s倒計(jì)時(shí)ppt課件_第3頁(yè)
單片機(jī)原理和應(yīng)用-KFIL C項(xiàng)目教程項(xiàng)目六 99 s倒計(jì)時(shí)ppt課件_第4頁(yè)
單片機(jī)原理和應(yīng)用-KFIL C項(xiàng)目教程項(xiàng)目六 99 s倒計(jì)時(shí)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩86頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、項(xiàng)目六 99 s倒計(jì)時(shí) 項(xiàng)目六 99 s倒計(jì)時(shí) 6.1 項(xiàng)目說(shuō)明項(xiàng)目說(shuō)明 6.2 基礎(chǔ)知識(shí)基礎(chǔ)知識(shí) 6.3 項(xiàng)目實(shí)施項(xiàng)目實(shí)施 6.4 項(xiàng)目評(píng)價(jià)項(xiàng)目評(píng)價(jià) 6.5 拓展與提高拓展與提高 項(xiàng)目六 99 s倒計(jì)時(shí) 6.1 項(xiàng)項(xiàng) 目目 說(shuō)說(shuō) 明明 項(xiàng)目任務(wù)項(xiàng)目任務(wù)利用利用51單片機(jī)內(nèi)部的定時(shí)單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器設(shè)計(jì)計(jì)數(shù)器設(shè)計(jì)99 s倒計(jì)時(shí)控制電路。倒計(jì)時(shí)控制電路。 知識(shí)培養(yǎng)目標(biāo)知識(shí)培養(yǎng)目標(biāo)(1) 掌握掌握51單片機(jī)中斷系統(tǒng)的組成及應(yīng)用。單片機(jī)中斷系統(tǒng)的組成及應(yīng)用。(2) 掌握掌握51單片機(jī)定時(shí)單片機(jī)定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)以計(jì)數(shù)器的結(jié)構(gòu)以及方式及方式1和方式和方式2的應(yīng)用。的應(yīng)用。(3) 掌握掌握51單片

2、機(jī)定時(shí)單片機(jī)定時(shí)/計(jì)數(shù)器初值的計(jì)計(jì)數(shù)器初值的計(jì)算,并對(duì)其初始化。算,并對(duì)其初始化。(4) 掌握掌握51單片機(jī)中斷系統(tǒng)、定時(shí)單片機(jī)中斷系統(tǒng)、定時(shí)/計(jì)數(shù)計(jì)數(shù)器的綜合應(yīng)用。器的綜合應(yīng)用。項(xiàng)目六 99 s倒計(jì)時(shí) 能力培養(yǎng)目標(biāo)(1) 能利用所學(xué)知識(shí)正確地理解中斷、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)。(2) 能利用所學(xué)知識(shí)編寫(xiě)中斷、定時(shí)/計(jì)數(shù)器綜合應(yīng)用程序。(3) 能利用所學(xué)知識(shí)解決實(shí)際工程問(wèn)題。項(xiàng)目六 99 s倒計(jì)時(shí) 6.2 基 礎(chǔ) 知 識(shí)6.2.1 定時(shí)/計(jì)數(shù)器概述51單片機(jī)內(nèi)部有兩個(gè)互相獨(dú)立的16位可編程定時(shí)/計(jì)數(shù)器:T0(P3.4)和T1(P3.5),52單片機(jī)內(nèi)部多一個(gè)T2定時(shí)/計(jì)數(shù)器。每個(gè)定時(shí)/計(jì)數(shù)器有定時(shí)和

3、計(jì)數(shù)兩種功能。需要注意的是定時(shí)/計(jì)數(shù)器雖集成在51單片機(jī)內(nèi)部,但它是51單片機(jī)內(nèi)一個(gè)獨(dú)立的硬件部分,CPU將它啟動(dòng)后,就可以做其他工作,定時(shí)/計(jì)數(shù)器會(huì)自動(dòng)開(kāi)始計(jì)數(shù),計(jì)滿后,向CPU申請(qǐng)中斷, 由CPU安排定時(shí)/計(jì)數(shù)器下一步做什么。定時(shí)/計(jì)數(shù)器與CPU的關(guān)系就如同鬧鐘與人的關(guān)系一樣。項(xiàng)目六 99 s倒計(jì)時(shí) 1. 本質(zhì)本質(zhì)定時(shí)定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是計(jì)數(shù)器的實(shí)質(zhì)是16位加位加1計(jì)數(shù)器,它可以對(duì)脈沖的計(jì)數(shù)器,它可以對(duì)脈沖的個(gè)數(shù)加個(gè)數(shù)加1計(jì)數(shù),計(jì)數(shù)器每接收到一個(gè)脈沖就加計(jì)數(shù),計(jì)數(shù)器每接收到一個(gè)脈沖就加1,從,從0加至加至65535(二進(jìn)制數(shù)為二進(jìn)制數(shù)為16個(gè)個(gè)1)共需要共需要65535個(gè)脈沖,再來(lái)一個(gè)脈個(gè)

4、脈沖,再來(lái)一個(gè)脈沖,計(jì)數(shù)器溢出回零表示一輪計(jì)數(shù)結(jié)束,因此沖,計(jì)數(shù)器溢出回零表示一輪計(jì)數(shù)結(jié)束,因此16位加位加1計(jì)數(shù)計(jì)數(shù)器一輪最大的計(jì)數(shù)值即模為器一輪最大的計(jì)數(shù)值即模為26=65536次。次。項(xiàng)目六 99 s倒計(jì)時(shí) 2. 功能與原理功能與原理定時(shí)定時(shí)/計(jì)數(shù)器有定時(shí)和計(jì)數(shù)兩種功能,它們的區(qū)別在于計(jì)數(shù)器有定時(shí)和計(jì)數(shù)兩種功能,它們的區(qū)別在于加加1計(jì)數(shù)器的計(jì)數(shù)脈沖不相同。計(jì)數(shù)器的計(jì)數(shù)脈沖不相同。計(jì)數(shù)功能是對(duì)單片機(jī)外部發(fā)生的事件進(jìn)行計(jì)數(shù),外部計(jì)數(shù)功能是對(duì)單片機(jī)外部發(fā)生的事件進(jìn)行計(jì)數(shù),外部事件產(chǎn)生的計(jì)數(shù)脈沖由引腳事件產(chǎn)生的計(jì)數(shù)脈沖由引腳T0(P3.4)或或T1(P3.5)輸入。在引輸入。在引腳腳T0(P3.

5、4)或或T1(P3.5)上,上,CPU每檢測(cè)到一個(gè)下降沿,計(jì)數(shù)每檢測(cè)到一個(gè)下降沿,計(jì)數(shù)器加器加1一次。由于檢測(cè)一個(gè)下降沿需要一次。由于檢測(cè)一個(gè)下降沿需要2個(gè)機(jī)器周期個(gè)機(jī)器周期(1個(gè)機(jī)器個(gè)機(jī)器周期是時(shí)鐘周期的周期是時(shí)鐘周期的12倍倍),因此最高計(jì)數(shù)頻率為時(shí)鐘頻率,因此最高計(jì)數(shù)頻率為時(shí)鐘頻率fosc的的1/24。計(jì)數(shù)功能在實(shí)際控制中應(yīng)用廣泛,例如,制藥。計(jì)數(shù)功能在實(shí)際控制中應(yīng)用廣泛,例如,制藥廠的生產(chǎn)線上每廠的生產(chǎn)線上每50粒藥片裝粒藥片裝1瓶,每裝入瓶,每裝入1個(gè)藥片,就由控個(gè)藥片,就由控制電路產(chǎn)生制電路產(chǎn)生1個(gè)脈沖,將此脈沖輸入計(jì)數(shù)器后就加個(gè)脈沖,將此脈沖輸入計(jì)數(shù)器后就加1一次,一次,計(jì)數(shù)計(jì)數(shù)

6、50次后,再裝下一瓶,這就是計(jì)數(shù)功能的典型應(yīng)用。次后,再裝下一瓶,這就是計(jì)數(shù)功能的典型應(yīng)用。項(xiàng)目六 99 s倒計(jì)時(shí) 定時(shí)功能是將單片機(jī)時(shí)鐘頻率fosc12分頻后作為計(jì)數(shù)脈沖,即1個(gè)機(jī)器周期,計(jì)數(shù)器加1一次,定時(shí)功能與外部事件無(wú)關(guān)。定時(shí)時(shí)間與計(jì)數(shù)器的計(jì)數(shù)值有什么關(guān)系呢?如果單片機(jī)晶振為12 MHz時(shí),時(shí)鐘周期為1/12 s,12分頻后機(jī)器周期為12/12 MHz=1 s;也就是說(shuō)加1一次需1 s,加65536次就需65536 s = 65.536 ms。一般地,定時(shí)時(shí)間=計(jì)數(shù)值(加1的次數(shù))12/ fosc;如果定時(shí)1 ms,計(jì)數(shù)器的計(jì)數(shù)值為1000 s12 MHz/12=1000次。定時(shí)/計(jì)數(shù)

7、器定時(shí)時(shí)間的長(zhǎng)短與時(shí)鐘頻率和計(jì)數(shù)值有關(guān),當(dāng)晶振頻率確定后,主要由計(jì)數(shù)值決定定時(shí)時(shí)間。項(xiàng)目六 99 s倒計(jì)時(shí) 定時(shí)與計(jì)數(shù)雖然是對(duì)不同脈沖進(jìn)行計(jì)數(shù),但相同的是每來(lái)一個(gè)脈沖計(jì)數(shù)器加1,當(dāng)加到65535(二進(jìn)制數(shù)為16個(gè)1)時(shí),再輸入一個(gè)脈沖計(jì)數(shù)器就溢出回零,定時(shí)/計(jì)數(shù)器通過(guò)溢出回零通知CPU,計(jì)數(shù)完成或定時(shí)時(shí)間已到,這和定時(shí)的時(shí)間一到鬧鐘就會(huì)響的道理是一樣的。定時(shí)/計(jì)數(shù)器不進(jìn)行設(shè)置時(shí),默認(rèn)從0開(kāi)始加1,到溢出回零時(shí)需加65536次。從上面舉例可知,藥片裝瓶需計(jì)數(shù)50次,定時(shí)1 ms需計(jì)數(shù)1000次,這些計(jì)數(shù)值不會(huì)恰好是模(如65536),這些任意的計(jì)數(shù)值如何實(shí)現(xiàn)呢?有兩種情況:第一種是計(jì)數(shù)值小于計(jì)數(shù)

8、器的模(如65536),可以先在計(jì)數(shù)器中存入一個(gè)初值,如果存入的初值為65535,只要再輸入1個(gè)脈沖就可以使計(jì)數(shù)器溢出回零,因此計(jì)數(shù)值是1; 項(xiàng)目六 99 s倒計(jì)時(shí) 當(dāng)計(jì)數(shù)值是50時(shí),所需初值為65486,再來(lái)50個(gè)脈沖時(shí)恰好溢出回零。所以定時(shí)/計(jì)數(shù)器從不同的初值開(kāi)始加1至溢出回零時(shí),所需計(jì)數(shù)值不一樣,定時(shí)時(shí)間也隨之改變,可得出計(jì)數(shù)器的初值=計(jì)數(shù)器的模-計(jì)數(shù)值,初值的計(jì)算是定時(shí)/計(jì)數(shù)器初始化時(shí)必需的一步。第二種是計(jì)數(shù)值大于計(jì)數(shù)器的模(如65536)時(shí),通過(guò)統(tǒng)計(jì)定時(shí)/計(jì)數(shù)器溢出的次數(shù)來(lái)計(jì)算計(jì)數(shù)值,例如,設(shè)置定時(shí)/計(jì)數(shù)器計(jì)數(shù)104次時(shí),第1次溢出回零時(shí)計(jì)數(shù)值為104次,第2次溢出回零時(shí)計(jì)數(shù)值為21

9、04次第n次溢出回零時(shí)計(jì)數(shù)值為n104次,完全可實(shí)現(xiàn)大于計(jì)數(shù)器模的計(jì)數(shù)值。兩種方法結(jié)合,就可以實(shí)現(xiàn)任意大小的計(jì)數(shù)值。項(xiàng)目六 99 s倒計(jì)時(shí) 大家可以想一下操場(chǎng)的跑道,一圈是400米,徑賽時(shí)裁判坐在終點(diǎn)位置,100米、200米徑賽時(shí),由于小于一圈400米,徑賽時(shí)選擇不同的起跑位置(相當(dāng)于計(jì)數(shù)初值),可以在同一個(gè)終點(diǎn),實(shí)現(xiàn)不同長(zhǎng)度的比賽;800米、3000米、5000米徑賽時(shí),大于一圈400米,確定起點(diǎn)后,由工作人員統(tǒng)計(jì)運(yùn)動(dòng)員跑的圈數(shù)(相當(dāng)于累計(jì)溢出次數(shù))來(lái)計(jì)算賽跑的總距離。項(xiàng)目六 99 s倒計(jì)時(shí) 3. 構(gòu)造構(gòu)造定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0由高由高8位寄存器位寄存器TH0和低和低8位寄存器位寄存器T

10、L0組成;組成;T1由由TH1和和TL1組成;組成;TMOD是定時(shí)是定時(shí)/計(jì)數(shù)器的工作計(jì)數(shù)器的工作方式寄存器;方式寄存器;TCON是定時(shí)是定時(shí)/計(jì)數(shù)器控制寄存器。定時(shí)計(jì)數(shù)器控制寄存器。定時(shí)/計(jì)數(shù)計(jì)數(shù)器的結(jié)構(gòu)框圖如圖器的結(jié)構(gòu)框圖如圖6-1所示。所示。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-1 定時(shí)/計(jì)數(shù)器結(jié)構(gòu)框圖 項(xiàng)目六 99 s倒計(jì)時(shí) 6.2.2 定時(shí)定時(shí)/計(jì)數(shù)器的控制計(jì)數(shù)器的控制定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0和和T1主要由定時(shí)主要由定時(shí)/計(jì)數(shù)器工作方式寄存器計(jì)數(shù)器工作方式寄存器TMOD、定時(shí)、定時(shí)/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCON進(jìn)行控制。其中,進(jìn)行控制。其中,TMOD用于設(shè)置工作方式,用于設(shè)置工

11、作方式,TCON用于控制它們的啟動(dòng)、用于控制它們的啟動(dòng)、停止及溢出標(biāo)志。停止及溢出標(biāo)志。1. 定時(shí)定時(shí)/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCON定時(shí)定時(shí)/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCON在特殊功能寄存器中,在特殊功能寄存器中,字節(jié)地址為字節(jié)地址為88H,位地址,位地址(由低位到高位由低位到高位)分別是分別是88H8FH,該寄存器可以位尋址。它主要用來(lái)控制定時(shí)器的運(yùn)行、停該寄存器可以位尋址。它主要用來(lái)控制定時(shí)器的運(yùn)行、停頓,標(biāo)志定時(shí)器的溢出等情況。單片機(jī)復(fù)位后,頓,標(biāo)志定時(shí)器的溢出等情況。單片機(jī)復(fù)位后,TCON=0。TCON中與定時(shí)中與定時(shí)/計(jì)數(shù)器有關(guān)的各位如表計(jì)數(shù)器有關(guān)的各位如表6-1

12、所示。所示。項(xiàng)目六 99 s倒計(jì)時(shí) 表表6-1 定時(shí)定時(shí)/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCON(88H) 項(xiàng)目六 99 s倒計(jì)時(shí) TF1定時(shí)/計(jì)數(shù)器T1溢出中斷標(biāo)志,由硬件自動(dòng)設(shè)置。當(dāng)定時(shí)/計(jì)數(shù)器T1計(jì)滿溢出回零時(shí),由硬件使TF1=1。如果定時(shí)/計(jì)數(shù)器工作在中斷方式時(shí),在進(jìn)入中斷服務(wù)函數(shù)后,由硬件自動(dòng)清0,用戶無(wú)需對(duì)它進(jìn)行操作;如果使用軟件查詢方式的話,當(dāng)查詢到該位為1后,由用戶清0。 TF0定時(shí)/計(jì)數(shù)器T0溢出中斷標(biāo)志,由硬件自動(dòng)設(shè)置,方法同TF1。TR1定時(shí)/計(jì)數(shù)器T1運(yùn)行控制位,由用戶設(shè)置。定時(shí)/計(jì)數(shù)器T1有硬啟動(dòng)和軟啟動(dòng)兩種啟動(dòng)方式。 項(xiàng)目六 99 s倒計(jì)時(shí) 硬啟動(dòng):當(dāng)GATE=1

13、時(shí),且引腳P3.3為高電平時(shí),TR1置1可啟動(dòng)T1;當(dāng)P3.3或TR1有任一不滿足要求時(shí),T1停止計(jì)數(shù)。軟啟動(dòng):當(dāng)GATE=0時(shí),TR1置1啟動(dòng)T1,TR1置0則T1停止。TR0定時(shí)/計(jì)數(shù)器T0運(yùn)行控制位,由用戶設(shè)置,方法同TR1。項(xiàng)目六 99 s倒計(jì)時(shí) 2. 定時(shí)定時(shí)/計(jì)數(shù)器工作方式寄存器計(jì)數(shù)器工作方式寄存器TMOD定時(shí)定時(shí)/計(jì)數(shù)器工作方式寄存器計(jì)數(shù)器工作方式寄存器TMOD在特殊功能寄存器在特殊功能寄存器中,字節(jié)地址為中,字節(jié)地址為89H,不能位尋址。,不能位尋址。TMOD用于確定定時(shí)器用于確定定時(shí)器的工作方式、啟動(dòng)方式、功能等。單片機(jī)復(fù)位后,的工作方式、啟動(dòng)方式、功能等。單片機(jī)復(fù)位后,TM

14、OD=0。TMOD各位如表各位如表6-2所示。所示。由表由表6-2可知,可知,TMOD的高的高4位用于設(shè)置定時(shí)位用于設(shè)置定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1,低低4位用于設(shè)置定時(shí)位用于設(shè)置定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0,對(duì)應(yīng),對(duì)應(yīng)4位的含義如下:位的含義如下:GATE門(mén)控位。門(mén)控位。GATE用于選擇定時(shí)用于選擇定時(shí)/計(jì)數(shù)器的啟動(dòng)方計(jì)數(shù)器的啟動(dòng)方式。定時(shí)式。定時(shí)/計(jì)數(shù)器的啟動(dòng)方式有如下兩種:計(jì)數(shù)器的啟動(dòng)方式有如下兩種:項(xiàng)目六 99 s倒計(jì)時(shí) 表表6-2 定時(shí)定時(shí)/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TMOD(89H) 項(xiàng)目六 99 s倒計(jì)時(shí) 軟啟動(dòng):GATE=0,定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止僅由TCON寄存器中TRx(x=0

15、,1)控制。一般的控制要求都可采用軟啟動(dòng)。硬啟動(dòng):GATE=1,定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止由TCON寄存器中TRx(x=0,1)和外部中斷引腳(P3.2或P3.3)上的電平共同控制。C/定時(shí)/計(jì)數(shù)器功能選擇位。當(dāng)C/=1時(shí),為計(jì)數(shù)功能;當(dāng)C/=0,為定時(shí)功能。M1、M0工作方式選擇位。項(xiàng)目六 99 s倒計(jì)時(shí) 6.2.3 定時(shí)定時(shí)/計(jì)數(shù)器的工作方式計(jì)數(shù)器的工作方式定時(shí)定時(shí)/計(jì)數(shù)器的工作方式如表計(jì)數(shù)器的工作方式如表6-3所示。所示。1. 方式方式0及方式及方式1定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1都可設(shè)置為方式都可設(shè)置為方式0或方式或方式1。方式。方式0是是13位計(jì)數(shù)器,主要是為了與早期的產(chǎn)品兼容,現(xiàn)已

16、很少位計(jì)數(shù)器,主要是為了與早期的產(chǎn)品兼容,現(xiàn)已很少使用;方式使用;方式1是是16位計(jì)數(shù)器,模為位計(jì)數(shù)器,模為65536。寄存器。寄存器TLx存放計(jì)存放計(jì)數(shù)值的低數(shù)值的低8位,寄存器位,寄存器THx存放計(jì)數(shù)值的高存放計(jì)數(shù)值的高8位,位,THx、TLx共同完成計(jì)數(shù)功能,邏輯結(jié)構(gòu)如圖共同完成計(jì)數(shù)功能,邏輯結(jié)構(gòu)如圖6-2所示。所示。分析圖分析圖6-2邏輯框圖可知,當(dāng)邏輯框圖可知,當(dāng)C/=0時(shí),時(shí)鐘開(kāi)關(guān)接晶時(shí),時(shí)鐘開(kāi)關(guān)接晶振的振的12分頻輸出,實(shí)現(xiàn)定時(shí)功能;當(dāng)分頻輸出,實(shí)現(xiàn)定時(shí)功能;當(dāng)C/=1時(shí),時(shí)鐘開(kāi)關(guān)時(shí),時(shí)鐘開(kāi)關(guān)接外引腳接外引腳Ti,在外部事件的控制下實(shí)現(xiàn)計(jì)數(shù)功能。,在外部事件的控制下實(shí)現(xiàn)計(jì)數(shù)功能。

17、 TT項(xiàng)目六 99 s倒計(jì)時(shí) 表表6-3 定時(shí)定時(shí)/計(jì)數(shù)器的工作方式計(jì)數(shù)器的工作方式 項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-2 定時(shí)/計(jì)數(shù)器方式0及方式1邏輯結(jié)構(gòu)框圖 項(xiàng)目六 99 s倒計(jì)時(shí) 軟啟動(dòng)當(dāng)GATE=0,TRi=1時(shí),計(jì)數(shù)開(kāi)關(guān)閉合,由C/選擇的脈沖加入計(jì)數(shù)器,計(jì)數(shù)器開(kāi)始加1計(jì)數(shù)。當(dāng)計(jì)數(shù)器的低8位TLx計(jì)滿后向高8位THx進(jìn)一位,直到把高8位THx也計(jì)滿,此時(shí)計(jì)數(shù)器溢出回零,置TFx為1,可向CPU申請(qǐng)中斷,也可對(duì)TFx進(jìn)行查詢。只要TRx為1,定時(shí)/計(jì)數(shù)器將循環(huán)計(jì)數(shù)。循環(huán)計(jì)數(shù)時(shí),不管是中斷方式還是查詢方式,在計(jì)數(shù)器溢出回零時(shí)都要由用戶重新裝入計(jì)數(shù)初值,否則第一次溢出回零后,計(jì)數(shù)器將從0開(kāi)始加

18、1,至下次溢出回零時(shí),需計(jì)數(shù)65536次,這樣就只有第一次的計(jì)數(shù)值是正確的,以后每次溢出時(shí)的計(jì)數(shù)值均為65536。 T項(xiàng)目六 99 s倒計(jì)時(shí) 2. 方式方式2定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1都可設(shè)置為方式都可設(shè)置為方式2,并且它們的結(jié),并且它們的結(jié)構(gòu)和操作完全相同,邏輯結(jié)構(gòu)如圖構(gòu)和操作完全相同,邏輯結(jié)構(gòu)如圖6-3所示。方式所示。方式2是用是用TLx作為作為8位計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)功能,位計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)功能,THx用于存放計(jì)數(shù)初值。方用于存放計(jì)數(shù)初值。方式式2的模雖然只有的模雖然只有256,但是在循環(huán)計(jì)數(shù)溢出回零時(shí),除了,但是在循環(huán)計(jì)數(shù)溢出回零時(shí),除了向向CPU申請(qǐng)中斷,還要由硬件自動(dòng)將存放在申請(qǐng)中斷

19、,還要由硬件自動(dòng)將存放在THx中的初值中的初值送入送入TLx開(kāi)始下一次計(jì)數(shù)。方式開(kāi)始下一次計(jì)數(shù)。方式2的優(yōu)點(diǎn)是用戶編程較為簡(jiǎn)的優(yōu)點(diǎn)是用戶編程較為簡(jiǎn)單,定時(shí)精度高,特別適合于定時(shí)精度要求較高的場(chǎng)合。單,定時(shí)精度高,特別適合于定時(shí)精度要求較高的場(chǎng)合。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-3 定時(shí)/計(jì)數(shù)器方式2邏輯結(jié)構(gòu)框圖 項(xiàng)目六 99 s倒計(jì)時(shí) 3. 方式方式3只有定時(shí)只有定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0可以設(shè)置為方式可以設(shè)置為方式3,邏輯結(jié)構(gòu)如圖,邏輯結(jié)構(gòu)如圖6-4所示。所示。方式方式3時(shí),時(shí),T0被分為被分為2個(gè)獨(dú)立的個(gè)獨(dú)立的8位計(jì)數(shù)器位計(jì)數(shù)器TL0與與TH0,TL0既可以定時(shí)又可計(jì)數(shù),使用既可以定時(shí)又可計(jì)數(shù),

20、使用T0的引腳、各控制位及中的引腳、各控制位及中斷源;斷源;TH0只能用做內(nèi)部定時(shí),它借用了定時(shí)只能用做內(nèi)部定時(shí),它借用了定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1的的運(yùn)行控制位運(yùn)行控制位TR1和中斷標(biāo)志位和中斷標(biāo)志位TF1,它的啟動(dòng)和停止只受,它的啟動(dòng)和停止只受TR1的控制。的控制。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-4 定時(shí)/計(jì)數(shù)器方式3邏輯結(jié)構(gòu)框圖 項(xiàng)目六 99 s倒計(jì)時(shí) 定時(shí)器T0設(shè)置為方式3時(shí),T1仍可設(shè)置為方式0、方式1、方式2,但由于TR1、TF1均被T0占用,此時(shí)僅有控制位C/用于切換定時(shí)或計(jì)數(shù)功能,計(jì)數(shù)器溢出回零時(shí),不能向CPU申請(qǐng)中斷,也不能利用軟件查詢,在這種情況下,可將T1的輸出送入串行口,作為

21、串行口的波特率發(fā)生器。T項(xiàng)目六 99 s倒計(jì)時(shí) 6.2.4 定時(shí)定時(shí)/計(jì)數(shù)器的應(yīng)用計(jì)數(shù)器的應(yīng)用1. 初值的計(jì)算初值的計(jì)算只要為定時(shí)只要為定時(shí)/計(jì)數(shù)器設(shè)置合適的計(jì)數(shù)初值,就可以實(shí)現(xiàn)計(jì)數(shù)器設(shè)置合適的計(jì)數(shù)初值,就可以實(shí)現(xiàn)任意大小的計(jì)數(shù)值。任意大小的計(jì)數(shù)值。(1) 計(jì)數(shù)功能的初值計(jì)算。定時(shí)計(jì)數(shù)功能的初值計(jì)算。定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)功能時(shí)計(jì)數(shù)器實(shí)現(xiàn)計(jì)數(shù)功能時(shí)一般直接給出計(jì)數(shù)值一般直接給出計(jì)數(shù)值N,因此可用下式計(jì)算初值:,因此可用下式計(jì)算初值:初值初值=計(jì)數(shù)器的模計(jì)數(shù)器的模-N留意:留意: 定時(shí)定時(shí)/計(jì)數(shù)器工作在方式計(jì)數(shù)器工作在方式1時(shí),模為時(shí),模為65536;初值的高;初值的高8位送入位送入THx,低,低

22、8位送入位送入TLx,即,即THx=(65536-N)/256,TLx=(65536-N)%256。項(xiàng)目六 99 s倒計(jì)時(shí) 定時(shí)/計(jì)數(shù)器工作在方式2時(shí),模為256;初值同時(shí)送入THx、TLx,即THx=TLx=256-N。 定時(shí)/計(jì)數(shù)器工作在方式3時(shí),模為256;初值送入TH0或TL0。(2) 定時(shí)功能的初值計(jì)算。定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)定時(shí)功能時(shí)會(huì)給出定時(shí)時(shí)間t,因此可用下式計(jì)算初值:初值=計(jì)數(shù)器的模- 12ftosc項(xiàng)目六 99 s倒計(jì)時(shí) 留意: fosc是晶振頻率。當(dāng)fosc以MHz為單位時(shí),定時(shí)時(shí)間以s為單位可方便計(jì)算。 定時(shí)/計(jì)數(shù)器工作在方式1時(shí),模為65536;初值的高8位送入THx,低8

23、位送入TLx,即THx=(65536- tfosc/12)/256,TLx=(65536- tfosc/12)%256。 定時(shí)/計(jì)數(shù)器工作在方式2時(shí),模為256;初值同時(shí)送入THx、TLx,即THx=TLx=256-tfosc/12。 定時(shí)/計(jì)數(shù)器工作在方式3時(shí),模為256;初值送入TH0或TL0。項(xiàng)目六 99 s倒計(jì)時(shí) 2. 定時(shí)定時(shí)/計(jì)數(shù)器的初始化計(jì)數(shù)器的初始化一般在主函數(shù)開(kāi)始對(duì)定時(shí)一般在主函數(shù)開(kāi)始對(duì)定時(shí)/計(jì)數(shù)器進(jìn)行初始化,步驟如計(jì)數(shù)器進(jìn)行初始化,步驟如下:下:(1) 對(duì)對(duì)TMOD賦值,確定賦值,確定T0和和T1的啟動(dòng)方式、功能、工的啟動(dòng)方式、功能、工作方式。作方式。(2) 計(jì)算初值,并將

24、其寫(xiě)入計(jì)算初值,并將其寫(xiě)入TH0、TL0或或TH1、TL1。(3) 中斷方式時(shí),對(duì)中斷方式時(shí),對(duì)IE賦值開(kāi)中斷;查詢方式時(shí),不需賦值開(kāi)中斷;查詢方式時(shí),不需開(kāi)中斷。開(kāi)中斷。(4) 置位置位TR0或或TR1,啟動(dòng)定時(shí),啟動(dòng)定時(shí)/計(jì)數(shù)器。計(jì)數(shù)器。項(xiàng)目六 99 s倒計(jì)時(shí) 3. 定時(shí)定時(shí)/計(jì)數(shù)器應(yīng)用舉例計(jì)數(shù)器應(yīng)用舉例例例1 制藥廠裝瓶生產(chǎn)線上,每瓶裝制藥廠裝瓶生產(chǎn)線上,每瓶裝100個(gè)藥片,用個(gè)藥片,用51單單片機(jī)實(shí)現(xiàn)控制要求,試編寫(xiě)初始化程序。片機(jī)實(shí)現(xiàn)控制要求,試編寫(xiě)初始化程序。解:解:(1) 題目分析。由題意可知,在統(tǒng)計(jì)藥片的個(gè)數(shù)時(shí)題目分析。由題意可知,在統(tǒng)計(jì)藥片的個(gè)數(shù)時(shí)要用到定時(shí)要用到定時(shí)/計(jì)數(shù)器

25、的計(jì)數(shù)功能,計(jì)數(shù)值為計(jì)數(shù)器的計(jì)數(shù)功能,計(jì)數(shù)值為100,用,用T1的方的方式式2實(shí)現(xiàn),采用中斷方式。實(shí)現(xiàn),采用中斷方式。(2) 初始化程序如下:初始化程序如下:TMOD=0 x60;/設(shè)置設(shè)置T1為軟啟動(dòng)、計(jì)數(shù)、方式為軟啟動(dòng)、計(jì)數(shù)、方式2TH1=TL1=256-100;/裝初值,裝初值,TL1 用于計(jì)數(shù)、用于計(jì)數(shù)、TH1存放初值存放初值ET1=1;/定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1開(kāi)中斷開(kāi)中斷EA=1;/CPU開(kāi)中斷,也可用字節(jié)尋址開(kāi)中斷,也可用字節(jié)尋址IE=0 x88;代替這兩條開(kāi)中斷指令代替這兩條開(kāi)中斷指令TR1=1;/啟動(dòng)啟動(dòng)T1項(xiàng)目六 99 s倒計(jì)時(shí) 例2 某控制系統(tǒng)需定時(shí)20 ms,晶振為1

26、2 MHz,試初始化。解:(1) 題目分析。晶振為12 MHz時(shí),定時(shí)20 ms需要的計(jì)數(shù)值為20000 s12 MHz /12=20000次,可用T0的方式1實(shí)現(xiàn),采用中斷方式。(2) 初始化程序如下:TMOD=0 x01;/設(shè)置T0為軟啟動(dòng)、定時(shí)、方式1TH0=(65536-20000)/256;/初值高8位送TH0TL0=(65536-20000)%256;/初值低8位送TL0 ET0=1;/定時(shí)/計(jì)數(shù)器T0開(kāi)中斷EA=1;/CPU開(kāi)中斷TR0=1;/啟動(dòng)T0項(xiàng)目六 99 s倒計(jì)時(shí) 例3 設(shè)某單片機(jī)系統(tǒng)的晶振為12 MHz,P2口上接有8個(gè)發(fā)光二極管,低電平點(diǎn)亮,利用定時(shí)/計(jì)數(shù)器T0工作

27、在方式1,使P2.0所接發(fā)光管LED0以200 ms亮滅閃爍。解:(1) 硬件設(shè)計(jì)。參考項(xiàng)目一相關(guān)內(nèi)容,硬件電路如圖6-5所示。(2) 軟件設(shè)計(jì)。定時(shí)200 ms有兩種方法:一是用延時(shí)函數(shù);二是用定時(shí)/計(jì)數(shù)器。在沒(méi)有講定時(shí)/計(jì)數(shù)器之前,與定時(shí)有關(guān)的定時(shí)功能都是用延時(shí)函數(shù)來(lái)實(shí)現(xiàn)的,CPU執(zhí)行延時(shí)函數(shù)時(shí),只能長(zhǎng)時(shí)間無(wú)意義地等待定時(shí)時(shí)間的到來(lái),降低了CPU的利用率。用定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)定時(shí),CPU只要對(duì)其初始化并啟動(dòng)后,定時(shí)工作就交由定時(shí)/計(jì)數(shù)器來(lái)獨(dú)立完成,而CPU就可以執(zhí)行其他的任務(wù)了,從而完成較為復(fù)雜的控制要求。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-5 定時(shí)/計(jì)數(shù)器例3電路圖 項(xiàng)目六 99 s倒計(jì)時(shí) 定時(shí)

28、200 ms時(shí),需要的計(jì)數(shù)值=200000 s12 MHz/12=200000次65536,T0本身并不能實(shí)現(xiàn)200 ms的定時(shí),考慮到200000=500004,即200 ms=50 ms4,用T0實(shí)現(xiàn)50000次計(jì)數(shù)即定時(shí)50 ms,當(dāng)T0溢出4次時(shí),就可實(shí)現(xiàn)200 ms定時(shí),為此定義變量t0_num(初值4)統(tǒng)計(jì)溢出次數(shù),T0每溢出一次,t0_num就減1,當(dāng)t0_num減至0時(shí),溢出4次。采用中斷方式時(shí),軟件包含主函數(shù)main()與T0中斷服務(wù)函數(shù)time0()。項(xiàng)目六 99 s倒計(jì)時(shí) 定時(shí)/計(jì)數(shù)器T0的中斷號(hào)為1,定義中斷服務(wù)函數(shù)時(shí)一定要寫(xiě)正確。將判斷200 ms是否到,以及200

29、ms到了之后控制燈閃爍安排在time0()中;main()只需完成對(duì)T0的初始化,然后就無(wú)事可做,等待T0申請(qǐng)中斷,這樣安排的好處是main()與time0()之間無(wú)需傳遞信息,適用于初學(xué)者。相關(guān)流程圖如圖6-6所示。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-6 定時(shí)/計(jì)數(shù)器例3流程圖 項(xiàng)目六 99 s倒計(jì)時(shí) (3) 源程序。#include #define uchar unsigned char#define uint unsigned int/*必要的全局變量定義*/sbit LED0=P20; /定義發(fā)光二極管LED0uchar t0_ num=4; /定義變量t0_ num統(tǒng)計(jì)T0的溢出次數(shù)項(xiàng)目六

30、 99 s倒計(jì)時(shí) /*主函數(shù)*/main() TMOD=0 x01; /設(shè)置T0軟啟動(dòng)、定時(shí)50 ms、方式l TH0=(65536-50000)/256; /定時(shí)50 ms初值的高8位送入TH0 TL0=(65536-50000)%256;/定時(shí)50 ms初值的低8位送入TL0 ET0=1; /T0開(kāi)中斷 EA=1; /CPU開(kāi)中斷 TR0=1; /啟動(dòng)T0 while(1); /等待T0中斷項(xiàng)目六 99 s倒計(jì)時(shí) /*T0中斷服務(wù)函數(shù)*/void time0() interrupt 1TH0=(65536-50000)/256; /重裝初值,循環(huán)計(jì)數(shù)時(shí)使T0重復(fù)定時(shí)50 ms TL0=(6

31、5536-50000)%256;t0_num-; / T0每50 ms溢出時(shí),t0_num減1 if(t0_num=0) /當(dāng)t0_num減至0時(shí),表示T0溢出4次,200 ms到 t0_num=4; /t0_num重賦4,可循環(huán)定時(shí)200 msLED0= LED0; /每隔200 ms LED0狀態(tài)取反,實(shí)現(xiàn)閃爍效果 項(xiàng)目六 99 s倒計(jì)時(shí) 在main()函數(shù)中,CPU初始化T0并啟動(dòng)后,就沒(méi)有其他事情可做,因此一邊執(zhí)行語(yǔ)句“while(1);”一邊等待T0申請(qǐng)中斷。另一方面T0啟動(dòng)后一直在加1計(jì)數(shù),溢出回零時(shí)向CPU提出中斷請(qǐng)求,由于初始化時(shí)T0與CPU均設(shè)置為開(kāi)中斷,CPU可以響應(yīng)T0的

32、中斷請(qǐng)求,轉(zhuǎn)去執(zhí)行中斷服務(wù)函數(shù)time0(),在time0()中判斷定時(shí)200 ms是否到等工作。(4) 思索。 用200 ms=20 ms10實(shí)現(xiàn)200 ms定時(shí)。 用T1實(shí)現(xiàn)200 ms定時(shí)。項(xiàng)目六 99 s倒計(jì)時(shí) 在實(shí)際應(yīng)用中,定時(shí)/計(jì)數(shù)器的中斷服務(wù)函數(shù)中不易安排過(guò)多的任務(wù),因?yàn)楫?dāng)語(yǔ)句過(guò)多時(shí),中斷服務(wù)函數(shù)可能還未執(zhí)行完畢,下一次中斷又到了,這樣就會(huì)丟失這次中斷,當(dāng)單片機(jī)循環(huán)執(zhí)行代碼時(shí),這種丟失累積出現(xiàn),不僅降低定時(shí)精度,嚴(yán)重時(shí)程序執(zhí)行也會(huì)亂套。因此在分配任務(wù)時(shí)應(yīng)遵循:能在主函數(shù)中完成的就不要安排在中斷服務(wù)函數(shù)中,必須在中斷函數(shù)中實(shí)現(xiàn)的功能,一定要高效、簡(jiǎn)約。按此原則,重新分配例3的各項(xiàng)任

33、務(wù),定義溢出標(biāo)志位flag在T0的中斷服務(wù)函數(shù)time0()與主函數(shù)之間傳遞信息;當(dāng)flag為1時(shí)表示T0溢出,flag為0時(shí)表示T0未溢出;在time0()中置位flag,在主函數(shù)中根據(jù)flag的狀態(tài)決定做什么工作。項(xiàng)目六 99 s倒計(jì)時(shí) time0()中完成重賦初值、置位flag;而t0_num減1及燈的閃爍等任務(wù)都安排在main()中,流程圖如圖6-7所示。試著寫(xiě)出源程序。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-7 定時(shí)/計(jì)數(shù)器例3流程圖(重新分配任務(wù)) 項(xiàng)目六 99 s倒計(jì)時(shí) 例4 用單片機(jī)的P2口驅(qū)動(dòng)共陽(yáng)型數(shù)碼管,編程使數(shù)碼管上的數(shù)字在09之間遞減,間隔1 s。定時(shí)1 s由定時(shí)/計(jì)數(shù)器T1完成

34、,晶振為12 MHz。解:(1) 硬件設(shè)計(jì)。硬件電路如圖6-8所示。(2) 軟件設(shè)計(jì)。定時(shí)1 s,計(jì)數(shù)值=1000000 s12 MHz/12=1000000次65536,依據(jù)1 s=40 ms25,用T1實(shí)現(xiàn)定時(shí)40 ms,當(dāng)T1溢出25次時(shí),就是1 s。變量t1_num(初值0)統(tǒng)計(jì)T1溢出次數(shù),T1每溢出一次,t1_num就加1,加至25時(shí),1 s到。變量count每隔1 s減1,靜態(tài)顯示時(shí)只需將count的段碼發(fā)送至P2口。項(xiàng)目六 99 s倒計(jì)時(shí) 主函數(shù)初始化T1后,就等待T1中斷;在T1的中斷服務(wù)函數(shù)time1()中實(shí)現(xiàn)1 s的判斷、count處理及顯示等任務(wù)。定時(shí)/計(jì)數(shù)器T1的中斷

35、號(hào)為3。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-8 定時(shí)/計(jì)數(shù)器例4硬件電路圖 項(xiàng)目六 99 s倒計(jì)時(shí) (3) 源程序。#include #define uchar unsigned char#define uint unsigned int/*必要的全局變量定義*/uchar code duan = 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90 ;/定義共陽(yáng)型段碼表uchar t1_ num=0; /定義變量t1_ num統(tǒng)計(jì)T1的溢出次數(shù)uchar count=0;/定義變量count控制數(shù)碼管上的數(shù)值遞減項(xiàng)目六 99 s倒計(jì)

36、時(shí) /*T1中斷服務(wù)函數(shù)*/void time1() interrupt 3TH1=(65536-40000)/256; /重賦初值,使T1多次重復(fù)定時(shí)40 msTL1=(65536-40000)%256;t1_num+; /T1每40 ms溢出時(shí),t1_num加1 if(t1_num=25) /當(dāng)t1_num加至25時(shí),表示1 s到 t1_num=0; /t1_num重賦0,可循環(huán)定時(shí)1 sif(count=0) /將0-1=9變?yōu)?0-1=9,符合減法運(yùn)算count=10;count-;/count每隔1 s減1P2=duancount; /顯示count 項(xiàng)目六 99 s倒計(jì)時(shí) /*主函

37、數(shù)*/main() TMOD=0 x10; /設(shè)置T1軟啟動(dòng)、定時(shí)40 ms、方式l TH1=(65536-40000)/256; /定時(shí)40 ms初值的高8位送入TH1 TL1=(65536-40000)%256;/定時(shí)40 ms初值的低8位送入TL1 ET1=1; /T1開(kāi)中斷 EA=1; /CPU開(kāi)中斷 TR1=1; /啟動(dòng)T1 while(1); /等待T1中斷項(xiàng)目六 99 s倒計(jì)時(shí) 6.3 項(xiàng)項(xiàng) 目目 實(shí)實(shí) 施施6.3.1 硬件設(shè)計(jì)方案硬件設(shè)計(jì)方案倒計(jì)時(shí)就是首先給定一個(gè)初值,然后進(jìn)倒計(jì)時(shí)就是首先給定一個(gè)初值,然后進(jìn)行減行減1操作,直到減至操作,直到減至0為止,需要時(shí)再?gòu)某鯙橹?,需要時(shí)

38、再?gòu)某踔甸_(kāi)始遞減。本項(xiàng)目中為了簡(jiǎn)化源程序,要值開(kāi)始遞減。本項(xiàng)目中為了簡(jiǎn)化源程序,要求當(dāng)由初值減至求當(dāng)由初值減至0時(shí),不停止,重新開(kāi)始遞時(shí),不停止,重新開(kāi)始遞減。減。實(shí)現(xiàn)實(shí)現(xiàn)99 s倒計(jì)時(shí),需要倒計(jì)時(shí),需要2個(gè)共陽(yáng)型數(shù)碼管個(gè)共陽(yáng)型數(shù)碼管顯示計(jì)時(shí)結(jié)果,采用動(dòng)態(tài)顯示,用顯示計(jì)時(shí)結(jié)果,采用動(dòng)態(tài)顯示,用P0口作為口作為數(shù)碼管的字段口,數(shù)碼管的字段口,P2.0接個(gè)位數(shù)碼管的字位接個(gè)位數(shù)碼管的字位口,口,P2.1接十位數(shù)碼管的字位口,硬件電路接十位數(shù)碼管的字位口,硬件電路如圖如圖6-9所示。所示。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-9 項(xiàng)目六硬件電路圖 項(xiàng)目六 99 s倒計(jì)時(shí) 在圖6-9中,當(dāng)I/O口=0時(shí),三極

39、管飽和導(dǎo)通,數(shù)碼管可以顯示;當(dāng)I/O口=1時(shí),三極管截止,數(shù)碼管不能顯示。動(dòng)態(tài)掃描時(shí)要求任何時(shí)刻只能有一個(gè)數(shù)碼管工作,因此采用字節(jié)尋址時(shí),十位數(shù)碼管DS1的位碼為P2=00000001B=1,個(gè)位數(shù)碼管DS0的位碼為P2=00000010B=2。項(xiàng)目六 99 s倒計(jì)時(shí) 6.3.2 軟件設(shè)計(jì)方案軟件設(shè)計(jì)方案實(shí)現(xiàn)實(shí)現(xiàn)99 s倒計(jì)時(shí),軟件編程主要解決以下幾個(gè)問(wèn)題:圖倒計(jì)時(shí),軟件編程主要解決以下幾個(gè)問(wèn)題:圖6-10 項(xiàng)目六主函數(shù)流程圖項(xiàng)目六主函數(shù)流程圖(1) 計(jì)時(shí)的時(shí)間基準(zhǔn)計(jì)時(shí)的時(shí)間基準(zhǔn)1 s由定時(shí)由定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1實(shí)現(xiàn)。原理是實(shí)現(xiàn)。原理是1 s=10 ms100,由,由T1實(shí)現(xiàn)實(shí)現(xiàn)10 ms定

40、時(shí),定義變量定時(shí),定義變量t1_num(初值為初值為0)統(tǒng)計(jì)統(tǒng)計(jì)T1的溢出次數(shù),當(dāng)?shù)囊绯龃螖?shù),當(dāng)T1溢出中斷溢出中斷100次次時(shí),表示時(shí),表示1 s到;定義變量到;定義變量djs(初值為初值為0)用于倒計(jì)時(shí),用于倒計(jì)時(shí),1 s到了到了之后,之后,djs-1,并判斷是否超出允許范圍。,并判斷是否超出允許范圍。項(xiàng)目六 99 s倒計(jì)時(shí) (2) 變量djs的顯示由顯示函數(shù)disp()完成,在disp()中對(duì)2個(gè)數(shù)碼管進(jìn)行動(dòng)態(tài)掃描,每個(gè)數(shù)碼管顯示時(shí)都要發(fā)送位碼、段碼并延時(shí)1 ms。(3) 主函數(shù)對(duì)T1初始化后,一邊調(diào)用顯示函數(shù)掃描數(shù)碼管,一邊等待T1申請(qǐng)中斷。主函數(shù)流程圖如圖6-10所示,定時(shí)/計(jì)數(shù)器中

41、斷函數(shù)流程圖與圖6-6相似,此處略。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-10 項(xiàng)目六主函數(shù)流程圖 項(xiàng)目六 99 s倒計(jì)時(shí) 源程序#include#define uchar unsigned char#define uint unsigned int/*必要的全局變量定義*/uchar djs=0;/定義倒計(jì)時(shí)變量uchar t1_num=0;/定義變量t1_num,用以累計(jì)定時(shí)器T1的溢出次數(shù),實(shí)現(xiàn)1 suchar code duan = 0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90 ;/定義共陽(yáng)型段碼表uchar xian

42、=0,0;/定義顯示數(shù)組,存入變量djs的十位及個(gè)位數(shù)碼uchar code wei =1,2;/定義位碼表,存放兩個(gè)數(shù)碼管的位碼項(xiàng)目六 99 s倒計(jì)時(shí) /*延時(shí)函數(shù)*/void delay() uint i;/時(shí)間約為1 msfor(i=0; i130; i+);/*顯示函數(shù)*/void disp() uchar i;xian0=djs/10;/將變量djs的十位數(shù)碼拆分至顯示數(shù)組xian1=djs%10;/將變量djs的個(gè)位數(shù)碼拆分至顯示數(shù)組for(i=0; i2; i+)項(xiàng)目六 99 s倒計(jì)時(shí) P2=weii; /發(fā)送位碼P0=duanxiani; /發(fā)送段碼delay();/延時(shí)1 m

43、s項(xiàng)目六 99 s倒計(jì)時(shí) /*主函數(shù)*/main()TMOD=0 x10;/設(shè)置T1定時(shí)10 ms,軟啟動(dòng),方式1TH1=(65536-10000)/256;/晶振12 MHz,定時(shí)10 ms時(shí)初值高8位送入TH1TL1=(65536-10000)%256;/晶振12 MHz,定時(shí)10 ms時(shí)初值低8位送入TL1ET1=1;/定時(shí)/計(jì)數(shù)器T1開(kāi)中斷EA=1;/CPU開(kāi)中斷TR1=1;/啟動(dòng)定時(shí)/計(jì)數(shù)器T1while(1)disp();/調(diào)用顯示函數(shù)顯示變量djs項(xiàng)目六 99 s倒計(jì)時(shí) /*定時(shí)/計(jì)數(shù)器T1中斷服務(wù)函數(shù)*/void time1() interrupt 3TH1=(65536-10

44、000)/256;TL1=(65536-10000)%256;t1_num+;/T1每10 ms溢出一次,變量t1_num加1if(t1_num=100)/變量t1_num加至100時(shí),表示1 s到t1_num=0;/變量t1_num重賦初值0,便于重復(fù)定時(shí)1 sif(djs=0)/將0-1=99,變?yōu)?00-1=99,符合減法運(yùn)算規(guī)則djs=100;djs-;/1 s到時(shí),變量djs減1項(xiàng)目六 99 s倒計(jì)時(shí) 6.3.3 程序調(diào)試程序調(diào)試1. 實(shí)驗(yàn)板電路分析實(shí)驗(yàn)板電路分析參照項(xiàng)目三圖參照項(xiàng)目三圖3-15所示所示HOT-51實(shí)驗(yàn)板動(dòng)態(tài)顯示電路。實(shí)驗(yàn)板動(dòng)態(tài)顯示電路。留意:實(shí)驗(yàn)板上是共陰型數(shù)碼管,

45、留意:實(shí)驗(yàn)板上是共陰型數(shù)碼管,P0為字段口,為字段口,P2為字位為字位口,口,8個(gè)數(shù)碼管從左至右的位碼依次是個(gè)數(shù)碼管從左至右的位碼依次是07,晶振為,晶振為11.0592 MHz。項(xiàng)目六 99 s倒計(jì)時(shí) 2. 程序設(shè)計(jì)程序設(shè)計(jì)根據(jù)實(shí)驗(yàn)板的電路連接方式,重新改寫(xiě)程序。實(shí)驗(yàn)板根據(jù)實(shí)驗(yàn)板的電路連接方式,重新改寫(xiě)程序。實(shí)驗(yàn)板上共有上共有8個(gè)共陰型數(shù)碼管,而程序中只需用其中的個(gè)共陰型數(shù)碼管,而程序中只需用其中的2個(gè),個(gè),99s倒計(jì)時(shí)的顯示位置,大家可以自定。中斷服務(wù)函數(shù)完成變倒計(jì)時(shí)的顯示位置,大家可以自定。中斷服務(wù)函數(shù)完成變量量djs遞減的功能,中斷號(hào)要根據(jù)所用定時(shí)遞減的功能,中斷號(hào)要根據(jù)所用定時(shí)/計(jì)數(shù)

46、器來(lái)確定,計(jì)數(shù)器來(lái)確定,一定要寫(xiě)正確;顯示函數(shù)完成變量一定要寫(xiě)正確;顯示函數(shù)完成變量djs的顯示,動(dòng)態(tài)顯示的的顯示,動(dòng)態(tài)顯示的編寫(xiě)對(duì)初學(xué)者是難點(diǎn),編寫(xiě)方法也靈活多樣,但不論如何編寫(xiě)對(duì)初學(xué)者是難點(diǎn),編寫(xiě)方法也靈活多樣,但不論如何變化,每個(gè)數(shù)碼管工作時(shí),都必須發(fā)送位碼、段碼并延時(shí),變化,每個(gè)數(shù)碼管工作時(shí),都必須發(fā)送位碼、段碼并延時(shí),當(dāng)數(shù)碼管的個(gè)數(shù)較少時(shí),也可以改為順序結(jié)構(gòu)。當(dāng)數(shù)碼管的個(gè)數(shù)較少時(shí),也可以改為順序結(jié)構(gòu)。項(xiàng)目六 99 s倒計(jì)時(shí) /*顯示函數(shù),順序結(jié)構(gòu)時(shí),不需要定義顯示數(shù)組xian 、位碼表wei */void disp() P2=1; /發(fā)送十位數(shù)碼管的位碼P0=duandjs/10;

47、/發(fā)送djs十位數(shù)的段碼delay();P2=2; /發(fā)送個(gè)位數(shù)碼管的位碼P0=duandjs%10; /發(fā)送djs個(gè)位數(shù)的段碼delay();項(xiàng)目六 99 s倒計(jì)時(shí) 3. 結(jié)果測(cè)試結(jié)果測(cè)試源程序編譯下載后,觀察顯示結(jié)果。如果不能正常工源程序編譯下載后,觀察顯示結(jié)果。如果不能正常工作,可依照數(shù)碼管上的現(xiàn)象分析產(chǎn)生故障原因;如果數(shù)碼作,可依照數(shù)碼管上的現(xiàn)象分析產(chǎn)生故障原因;如果數(shù)碼管只顯示但不能計(jì)時(shí),一般是與定時(shí)管只顯示但不能計(jì)時(shí),一般是與定時(shí)/計(jì)數(shù)器的初始化、中計(jì)數(shù)器的初始化、中斷服務(wù)函數(shù)有關(guān);顯示出現(xiàn)問(wèn)題則要重點(diǎn)檢查顯示函數(shù)與斷服務(wù)函數(shù)有關(guān);顯示出現(xiàn)問(wèn)題則要重點(diǎn)檢查顯示函數(shù)與主函數(shù)。主函數(shù)。

48、項(xiàng)目六 99 s倒計(jì)時(shí) 4. 拓展練習(xí)拓展練習(xí)根據(jù)下列要求,練習(xí)編程。根據(jù)下列要求,練習(xí)編程。(1) 由定時(shí)由定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0實(shí)現(xiàn)實(shí)現(xiàn)1 s定時(shí)。定時(shí)。(2) 改變改變1 s的實(shí)現(xiàn)原理,如的實(shí)現(xiàn)原理,如1 s=25 ms40。(3) 靈活改變顯示位置。靈活改變顯示位置。(4) 實(shí)現(xiàn)實(shí)現(xiàn)60 s、999 s計(jì)時(shí)。計(jì)時(shí)。(5) 設(shè)置定時(shí)預(yù)置鍵。設(shè)置定時(shí)預(yù)置鍵。項(xiàng)目六 99 s倒計(jì)時(shí) 6.4 項(xiàng)項(xiàng) 目目 評(píng)評(píng) 價(jià)價(jià) 項(xiàng)目六 99 s倒計(jì)時(shí) 項(xiàng)目六 99 s倒計(jì)時(shí) 6.5 拓拓展展與與提提高高在實(shí)際應(yīng)用時(shí),要求計(jì)時(shí)精度較高的電在實(shí)際應(yīng)用時(shí),要求計(jì)時(shí)精度較高的電子時(shí)鐘,通常都采用子時(shí)鐘,通常都采用

49、DS12C887時(shí)鐘日歷芯時(shí)鐘日歷芯片來(lái)完成,片來(lái)完成,DS12C887實(shí)時(shí)時(shí)鐘芯片功能豐實(shí)時(shí)時(shí)鐘芯片功能豐富,能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、富,能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、分、秒等信息,其內(nèi)部又增加了世紀(jì)寄存器,分、秒等信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決從而利用硬件電路解決“千年問(wèn)題;千年問(wèn)題;DS12C887中自帶鋰電池,外部掉電時(shí),其中自帶鋰電池,外部掉電時(shí),其內(nèi)部時(shí)間信息還能夠保持內(nèi)部時(shí)間信息還能夠保持10年之久;時(shí)間格年之久;時(shí)間格式則有式則有12和和24小時(shí)制兩種模式。在小時(shí)制兩種模式。在12小時(shí)制小時(shí)制模式中,用模式中,用AM和和PM區(qū)分上午和下午;時(shí)

50、間區(qū)分上午和下午;時(shí)間的表示方法也有兩種,一種用二進(jìn)制數(shù)表示,的表示方法也有兩種,一種用二進(jìn)制數(shù)表示,一種是用一種是用BCD碼表示;碼表示;DS12C887中帶有中帶有128字節(jié)的字節(jié)的項(xiàng)目六 99 s倒計(jì)時(shí) RAM,其中有11字節(jié)用來(lái)存儲(chǔ)時(shí)間信息,4字節(jié)用來(lái)存儲(chǔ) DS12C887的控制信息,稱為控制寄存器,113字節(jié)通用RAM供用戶使用;此外用戶還可對(duì)DS12C887進(jìn)行編程以實(shí)現(xiàn)多種方波輸出,并可通過(guò)軟件屏蔽其內(nèi)部的三路中斷。DS12C887的引腳排列如圖6-11所示。GND、VCC直流電源,其中VCC接+5 V,GND接地,當(dāng)VCC為+5 V時(shí),用戶可以訪問(wèn)DS12C887內(nèi)部RAM中的

51、數(shù)據(jù),并可對(duì)其進(jìn)行讀、寫(xiě)操作;當(dāng)VCC小于+4.25 V時(shí),禁止用戶對(duì)內(nèi)部RAM進(jìn)行讀、寫(xiě)操作,此時(shí)用戶不能正確獲取芯片內(nèi)的時(shí)間信息;當(dāng)VCC小于+3 V時(shí),DS12C887會(huì)自動(dòng)將電源轉(zhuǎn)換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能夠正常工作。項(xiàng)目六 99 s倒計(jì)時(shí) 圖6-11 DS12C887引腳圖項(xiàng)目六 99 s倒計(jì)時(shí) MOT模式選擇端,DA12C887有Motorola和Intel兩種工作模式,即當(dāng)MOT接VCC時(shí),選用Motorola模式;當(dāng)MOT接GND時(shí),選用Intel模式。SQW方波輸出腳,當(dāng)VCC大于4.25 V時(shí),SQW腳可輸出方波,用戶通過(guò)對(duì)控制寄存器編程,實(shí)現(xiàn)13種方波信號(hào)

52、的輸出。AD0AD7地址/數(shù)據(jù)復(fù)用總線,該總線采用分時(shí)復(fù)用技術(shù),在總線周期的前半部分,出現(xiàn)在AD0AD7上的是地址信息,用以選通DS12C887內(nèi)部的RAM;在總線周期的后半部分,出現(xiàn)在AD0AD7上的是數(shù)據(jù)信息。 項(xiàng)目六 99 s倒計(jì)時(shí) AS地址選通輸入腳,進(jìn)行讀/寫(xiě)操作時(shí),在AS的前一個(gè)上升沿將AD0AD7上的地址信息鎖存到DS12C887上;在AS的后一個(gè)下降沿時(shí),清除AD0AD7上的地址信息,不論是否有效,DS12C887都將執(zhí)行該操作。DS數(shù)據(jù)選擇/讀輸入腳,該引腳有兩種工作模式。當(dāng)MOT接VCC時(shí),選用Motorola工作模式,在這種工作模式中,每個(gè)總線周期的后一部分的DS為高電平

53、,被稱為數(shù)據(jù)選通。在讀操作中,DS的上升沿將DS12C887內(nèi)部數(shù)據(jù)送往總線AD0AD7上,以供外部讀??;在寫(xiě)操作中,DS的下降沿使總線AD0AD7上的數(shù)據(jù)鎖存在DS12C887中。當(dāng)MOT接GND時(shí),選用Intel工作模式,在該模式中,該引腳是讀允許輸入腳。 項(xiàng)目六 99 s倒計(jì)時(shí) R/讀/寫(xiě)輸入端,該管腳也有兩種工作模式:當(dāng)MOT接VCC時(shí),R/工作在 Motorola模式,此時(shí),該引腳的作用是區(qū)分讀操作還是寫(xiě)操作,當(dāng)R/為高電平時(shí)為讀操作,R/為低電平時(shí)為寫(xiě)操作;當(dāng)MOT接GND時(shí),該引腳工作在Intel模式,此時(shí)作為寫(xiě)允許輸入。 片選端,低電平有效。WWWWCS項(xiàng)目六 99 s倒計(jì)時(shí)

54、中斷請(qǐng)求輸出,低電平有效,該引腳有效時(shí),對(duì)DS12C887內(nèi)的時(shí)鐘、日歷和RAM中的內(nèi)容沒(méi)有任何影響,僅對(duì)內(nèi)部的控制寄存器有影響,在典型的應(yīng)用中,可以直接接VCC,這樣可以保證在DS12C887掉電時(shí),其內(nèi)部控制寄存器不受影響。DS12C887內(nèi)部RAM中有11字節(jié)用來(lái)存儲(chǔ)時(shí)間信息,4字節(jié)用來(lái)存儲(chǔ)控制信息,具體地址及取值范圍如表6-4所示。IRQRESET項(xiàng)目六 99 s倒計(jì)時(shí) 表表6-4 DS12C887地址分配表地址分配表 項(xiàng)目六 99 s倒計(jì)時(shí) 1. 控制寄存器控制寄存器A控制寄存器控制寄存器A在在DS12C887的的RAM中占用地址為中占用地址為0AH的的單元,主要用于設(shè)置芯片是否更新

55、、晶體振蕩器的開(kāi)單元,主要用于設(shè)置芯片是否更新、晶體振蕩器的開(kāi)/關(guān)、關(guān)、分頻器復(fù)位及速率選擇等。各位如表分頻器復(fù)位及速率選擇等。各位如表6-5所示。所示。UIP更新位,用來(lái)標(biāo)志芯片是否即將進(jìn)行更新。當(dāng)更新位,用來(lái)標(biāo)志芯片是否即將進(jìn)行更新。當(dāng)UIP=1時(shí),更新即將開(kāi)始;當(dāng)時(shí),更新即將開(kāi)始;當(dāng)UIP=0時(shí),表示至少在時(shí),表示至少在244 s內(nèi)芯片不會(huì)更新,此時(shí),時(shí)鐘、日歷和鬧鐘信息可以通過(guò)內(nèi)芯片不會(huì)更新,此時(shí),時(shí)鐘、日歷和鬧鐘信息可以通過(guò)讀讀/寫(xiě)相應(yīng)的字節(jié)獲得并設(shè)置。寫(xiě)相應(yīng)的字節(jié)獲得并設(shè)置。UIP位為只讀位且不受復(fù)位位為只讀位且不受復(fù)位信號(hào)信號(hào)()的影響。寄存器的影響。寄存器B中的中的SET位設(shè)置為位設(shè)置為l時(shí),可時(shí),可以禁止更新并將以禁止更新并將

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論