版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
4.1簡(jiǎn)易秒表的設(shè)計(jì)
4.2簡(jiǎn)易計(jì)數(shù)器的設(shè)計(jì)
4.3簡(jiǎn)易交通燈控制系統(tǒng)的設(shè)計(jì)
4.4習(xí)題實(shí)例四定時(shí)器/計(jì)數(shù)器學(xué)習(xí)目標(biāo)
◆理解簡(jiǎn)易交通燈控制系統(tǒng)的電路構(gòu)成、工作原理和電路中各元器件的作用。
◆理解51單片機(jī)的計(jì)數(shù)器和定時(shí)中斷,并正確使用。
◆正確使用MedWin軟件和Proteus仿真軟件。
◆正確理解RETI、RET,掌握中斷服務(wù)程序設(shè)計(jì)的基本方法。
工作任務(wù)
◆設(shè)計(jì)與制作簡(jiǎn)易秒表。
◆設(shè)計(jì)與制作簡(jiǎn)易計(jì)數(shù)器。
◆設(shè)計(jì)與制作簡(jiǎn)易交通燈控制系統(tǒng)。4.1簡(jiǎn)易秒表的設(shè)計(jì)學(xué)習(xí)目標(biāo)◆理解定時(shí)器的工作原理和內(nèi)部結(jié)構(gòu)中各元件的作用?!粽_計(jì)算定時(shí)時(shí)間、定時(shí)初始值、計(jì)數(shù)次數(shù)等參數(shù)?!粽_使用MedWin軟件和Proteus仿真軟件。
工作任務(wù)◆設(shè)計(jì)與制作簡(jiǎn)易秒表。
經(jīng)過(guò)前面知識(shí)的學(xué)習(xí),我們掌握了單片機(jī)的一些基本應(yīng)用。設(shè)計(jì)中所需的延時(shí)都是用軟件延時(shí)的方法實(shí)現(xiàn)的,占用了CPU大量的時(shí)間,使CPU的效率低下,如果將來(lái)設(shè)計(jì)要求需要單片機(jī)系統(tǒng)能“同時(shí)”完成很多任務(wù),這時(shí)還讓CPU花費(fèi)大量時(shí)間來(lái)做一些無(wú)謂的延時(shí)就不現(xiàn)實(shí)了,所以我們希望有一種機(jī)構(gòu)能代替CPU來(lái)實(shí)現(xiàn)延時(shí)的控制。MCS-51單片機(jī)內(nèi)設(shè)置了兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器,它可以在CPU給出具體要求后獨(dú)立完成延時(shí)工作,而且它還具有計(jì)數(shù)的功能,可以用作計(jì)數(shù)器,這樣就可以很方便地解決很多問(wèn)題,大大提高CPU的工作效率。生活中我們經(jīng)常會(huì)遇到需定時(shí)或計(jì)數(shù)的場(chǎng)合。例如,午休時(shí)間不太長(zhǎng),為了防止睡過(guò)頭我們會(huì)設(shè)置好鬧鐘再睡;啤酒廠打包生產(chǎn)線上要求每10瓶啤酒裝箱,這就要數(shù)出來(lái),靠人工來(lái)操作既耗勞力又費(fèi)工時(shí)。這樣的例子生活中還有很多,這些問(wèn)題都可以通過(guò)MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器輕松解決?,F(xiàn)在,我們先來(lái)學(xué)習(xí)MCS-51單片機(jī)內(nèi)的定時(shí)器/計(jì)數(shù)器是如何工作的。
1.定時(shí)器/計(jì)數(shù)器的認(rèn)識(shí)
1)計(jì)數(shù)概念的引入
很早以前,我們的祖先就開(kāi)始用計(jì)繩結(jié)的方法來(lái)計(jì)數(shù)。生活中我們經(jīng)常要計(jì)量一些物件,用什么方法計(jì)數(shù)更方便呢?用什么工具更省力呢?人們根據(jù)不斷的試驗(yàn)總結(jié)出很多實(shí)用的計(jì)數(shù)方法,例如一般對(duì)選票的統(tǒng)計(jì)我們會(huì)通過(guò)畫(huà)“正”字來(lái)計(jì)數(shù),倉(cāng)庫(kù)點(diǎn)貨通常會(huì)使用貼標(biāo)簽的方法。計(jì)數(shù)用的工具也不斷發(fā)展,從最初用繩結(jié)、貝殼、石塊進(jìn)行簡(jiǎn)單的計(jì)數(shù)到使用可快速運(yùn)算的算盤,再到運(yùn)算能力很強(qiáng)的計(jì)算器,再到處理能力極強(qiáng)的計(jì)算機(jī),計(jì)數(shù)工具的飛速發(fā)展給人們帶來(lái)了不可估量的價(jià)值。MCS-51單片機(jī)內(nèi)的計(jì)數(shù)器是一種能自動(dòng)記錄數(shù)目的儀器,也是一種計(jì)數(shù)工具,而且這個(gè)計(jì)數(shù)工具是可編程的。也就是說(shuō),我們可以通過(guò)不同的指令控制它實(shí)現(xiàn)各種計(jì)數(shù)功能。
2)計(jì)數(shù)器的容量
任何計(jì)數(shù)器都有一定的容量限制。例如我們用容量為250mL的杯子來(lái)盛水,那么這個(gè)杯子就只能盛250mL的水。MCS-51單片機(jī)中的計(jì)數(shù)器也有容量,其容量有多大呢?MCS-51單片機(jī)中的計(jì)數(shù)器是16位的,因此最大計(jì)數(shù)容量為216(65536)。
3)溢出
我們用杯子接水時(shí),最后總會(huì)有一滴水使杯中的水裝滿到極限,這時(shí)如果再有一滴水落下,水就會(huì)滿出來(lái),用術(shù)語(yǔ)來(lái)講就是“溢出”。MCS-51單片機(jī)中的計(jì)數(shù)器也會(huì)產(chǎn)生溢出現(xiàn)象。MCS-51單片機(jī)中的計(jì)數(shù)器是加1計(jì)數(shù)器,當(dāng)其累加到最大計(jì)數(shù)容量時(shí),再加1一次就會(huì)溢出,同時(shí)產(chǎn)生溢出標(biāo)志(TF0或TF1變?yōu)椤?”)。
4)定時(shí)概念的引入
MCS-51單片機(jī)中的計(jì)數(shù)器除了可以用于計(jì)數(shù)外,還可以用于定時(shí),為什么呢?下面我們來(lái)仔細(xì)看看日常用的時(shí)鐘(指針式)的工作原理。時(shí)鐘的秒針每走動(dòng)一次的時(shí)間定為1秒,走動(dòng)60次則為1分鐘,走動(dòng)3600次則為1小時(shí)。反過(guò)來(lái),我們預(yù)先規(guī)定秒針走動(dòng)的次數(shù),例如3600次,當(dāng)秒針走完了規(guī)定的次數(shù)我們就知道時(shí)間過(guò)了1小時(shí),這就是時(shí)鐘的定時(shí)原理。MCS-51單片機(jī)的計(jì)數(shù)器的最大計(jì)數(shù)容量為65?536,如果每1微秒(1秒=106微秒)計(jì)數(shù)一次,則當(dāng)計(jì)數(shù)器從“0”計(jì)數(shù)到“65535”時(shí),總共計(jì)數(shù)了65536次,需要65536微秒,所以可以用于實(shí)現(xiàn)65536微秒的定時(shí)。所以,MCS-51單片機(jī)將定時(shí)器和計(jì)數(shù)器合二為一,計(jì)數(shù)器記錄的是外界發(fā)生的事情,而定時(shí)器則由單片機(jī)提供一個(gè)非常穩(wěn)定的時(shí)鐘源。
要點(diǎn):書(shū)看到這里,讀者可能會(huì)問(wèn),前面不是已經(jīng)介紹了用軟件延時(shí)的方法嗎?現(xiàn)在又用定時(shí)器來(lái)定時(shí),它們有什么區(qū)別呢?它們最大的區(qū)別就在于:首先,采用軟件延時(shí)占用CPU的時(shí)間,而采用定時(shí)器定時(shí)可以不占用CPU的時(shí)間;其次采用定時(shí)器定時(shí)比采用軟件延時(shí)精度高,修改更方便。
2.定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)
我們剛剛認(rèn)識(shí)了MCS-51單片機(jī)中的定時(shí)器/計(jì)數(shù)器的用途,那么怎樣才能讓它們?yōu)槲覀児ぷ髂??為了解決這個(gè)問(wèn)題,下面先來(lái)看看MCS-51單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)。MCS-51單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)框圖如圖4-1所示。圖4-1定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)框圖
MCS-51單片機(jī)內(nèi)部設(shè)置了兩個(gè)16位可編程的定時(shí)器/計(jì)數(shù)器T0和T1,它們具有定時(shí)和計(jì)數(shù)兩種工作模式以及0~3四種工作方式,用戶可通過(guò)軟件對(duì)相應(yīng)的控制寄存器TCON和TMOD編程來(lái)選擇合適的工作模式和工作方式。定時(shí)器/計(jì)數(shù)器T0由TL0、TH0構(gòu)成,定時(shí)器/計(jì)數(shù)器T1由TL1、TH1構(gòu)成。TCON和TMOD都是特殊功能寄存器,系統(tǒng)復(fù)位時(shí),寄存器的所有位都被清零。
1)計(jì)數(shù)功能
所謂計(jì)數(shù)功能,就是單片機(jī)對(duì)外部事件進(jìn)行計(jì)數(shù)的功能。外部事件的產(chǎn)生是以脈沖的形式輸入單片機(jī)的,因此計(jì)數(shù)功能的實(shí)質(zhì)就是對(duì)外部脈沖進(jìn)行計(jì)數(shù)。對(duì)MCS-51單片機(jī)來(lái)說(shuō),有T0(P3.4)和T1(P3.5)兩個(gè)信號(hào)引腳,分別是兩個(gè)計(jì)數(shù)器的輸入端,外部每輸入1個(gè)脈沖(負(fù)跳變時(shí)有效),內(nèi)部的計(jì)數(shù)器加1計(jì)數(shù)一次。
2)定時(shí)功能
定時(shí)功能也是通過(guò)計(jì)數(shù)器的計(jì)數(shù)來(lái)實(shí)現(xiàn)的,只不過(guò)這次的計(jì)數(shù)脈沖不是外部的脈沖,而是來(lái)自單片機(jī)內(nèi)部,每個(gè)機(jī)器周期計(jì)數(shù)器加1計(jì)數(shù)一次。因?yàn)橐粋€(gè)機(jī)器周期等于12個(gè)振蕩周期,即計(jì)數(shù)頻率為振蕩頻率的1/12,所以如果單片機(jī)采用12MHz的晶振,則機(jī)器周期為1μs,計(jì)數(shù)頻率為1?MHz,也就是每微秒計(jì)數(shù)器加1計(jì)數(shù)一次。這樣就可以很方便地根據(jù)計(jì)數(shù)次數(shù)計(jì)算出定時(shí)時(shí)間,也可以倒過(guò)來(lái)根據(jù)定時(shí)時(shí)間要求計(jì)算出計(jì)數(shù)器的初始值。
注意:?jiǎn)纹瑱C(jī)系統(tǒng)選用的晶振不同,工作的機(jī)器周期就不同。
3)工作方式寄存器TMOD
在單片機(jī)中有兩個(gè)特殊功能寄存器與定時(shí)/計(jì)數(shù)有關(guān),即TMOD和TCON。TMOD和TCON是寄存器的名稱,我們?cè)诰幊虝r(shí)既可以直接用這個(gè)名稱來(lái)指定它們,也可以直接用它們的地址89H和88H來(lái)指定它們。下面我們先來(lái)認(rèn)識(shí)一下TMOD。TMOD用于控制T0和T1的工作模式和工作方式,其格式如圖
4-2所示,它的高4位用于控制T1,低4位用于控制T0。圖4-2TMOD寄存器的格式圖4-3所示為定時(shí)器/計(jì)數(shù)器在工作方式0的邏輯結(jié)構(gòu)框圖,圖中X為0或1。TMOD各位的功能說(shuō)明如下:
(1)?GATE——選通控制位(門控位)。當(dāng)設(shè)置GATE=0時(shí),只要用軟件對(duì)TR0(或TR1)置“1”就可以啟動(dòng)定時(shí)器;當(dāng)設(shè)置GATE=1時(shí),只有(或)引腳為“1”,且用軟件對(duì)TR0(或TR1)置“1”才可啟動(dòng)定時(shí)器工作。
(2)
——定時(shí)工作方式/計(jì)數(shù)工作方式選擇位。
當(dāng)設(shè)置時(shí),設(shè)置為定時(shí)工作方式;當(dāng)設(shè)置
時(shí),設(shè)置為計(jì)數(shù)工作方式。圖4-3定時(shí)器/計(jì)數(shù)器在工作方式0的邏輯結(jié)構(gòu)框圖
(3)?M1、M0——工作方式控制位。M1、M0用于設(shè)置定時(shí)器的工作方式,具體設(shè)置如表4-1所示。要點(diǎn):TMOD不能進(jìn)行位尋址,只能用字節(jié)方式設(shè)置工作方式。當(dāng)只需改變某一個(gè)定時(shí)器/計(jì)數(shù)器時(shí),應(yīng)采用適當(dāng)?shù)姆绞椒乐箤?duì)另一個(gè)定時(shí)器/計(jì)數(shù)器工作方式的改變。比如,我們只需改變T0的工作方式為用方式1計(jì)數(shù)時(shí),可以先采用邏輯與屏蔽要改變的定時(shí)器/計(jì)數(shù)器,再采用邏輯或設(shè)置新的工作方式。具體指令為“ANLTMOD,#0F0H”和“ORLTMOD,#05H”。
4)控制寄存器TCON
TCON用于控制定時(shí)器的啟動(dòng)、停止,以及指示定時(shí)器的溢出和中斷情況。其格式如圖4-4所示。圖4-4TCON寄存器的格式從圖4-4中我們可以看出,TCON也被分成兩部分,高4位用作定時(shí)器/計(jì)數(shù)器,低4位則用于中斷。各位的定義如下:
(1)?TF1——定時(shí)器/計(jì)數(shù)器T1的溢出標(biāo)志位。當(dāng)T1被啟動(dòng)計(jì)數(shù)后,T1從初始值開(kāi)始加“1”計(jì)數(shù),最高位產(chǎn)生溢出時(shí),置TF1為“1”,并向CPU提出中斷請(qǐng)求。當(dāng)CPU響應(yīng)時(shí),由硬件清零。TF1也可以由程序查詢或清零。
(2)?TR1——定時(shí)器/計(jì)數(shù)器T1的運(yùn)行控制位。該位由軟件置位和復(fù)位。當(dāng)設(shè)置GATE?=0?(TMOD的D3位)?時(shí),TR1為“1”表示啟動(dòng)計(jì)數(shù),TR1為“0”表示停止計(jì)數(shù);當(dāng)設(shè)置GATE=1時(shí),只有當(dāng)TR1為“1”且(P3.3引腳)為高電平時(shí)才可啟動(dòng)計(jì)數(shù),若TR1為“0”或?yàn)榈碗娖?,則停止計(jì)數(shù)。
(3)?TF0——定時(shí)器/計(jì)數(shù)器T0的溢出標(biāo)志位。TF0的意義和使用方法同TF1類似。
(4)?TR0——定時(shí)器/計(jì)數(shù)器T0的運(yùn)行控制位。該位由軟件置位和復(fù)位。TR0的意義和使用方法同TR1類似。要點(diǎn):TCON可以進(jìn)行位尋址,其各位對(duì)應(yīng)的位地址為88H~8FH?(D0~D7),所以對(duì)于定時(shí)器/計(jì)數(shù)器的運(yùn)行控制位,我們可以用指令SETB來(lái)置位以啟動(dòng)計(jì)數(shù)器/定時(shí)器計(jì)數(shù),用指令CLR來(lái)停止定時(shí)器/計(jì)數(shù)器的計(jì)數(shù),一切盡在自己的掌握中。
3.定時(shí)器/計(jì)數(shù)器的初始值
從前面“定時(shí)器/計(jì)數(shù)器的認(rèn)識(shí)”部分已經(jīng)看到這樣一種現(xiàn)象,我們有時(shí)需要定時(shí)器/計(jì)數(shù)器從某一個(gè)初始值開(kāi)始計(jì)數(shù),以實(shí)現(xiàn)最終的定時(shí)時(shí)間或計(jì)數(shù)的需求。那么,怎樣才能設(shè)置好定時(shí)器/計(jì)數(shù)器的初始值呢?一般采用的方法如下:
(1)定時(shí)模式:初始值?=?最大值-定時(shí)時(shí)間/Tcy(Tcy為機(jī)器周期)。
(2)計(jì)數(shù)模式:初始值?=?最大值-計(jì)數(shù)值。
然后將初始值裝入相應(yīng)的定時(shí)器/計(jì)數(shù)器的寄存器中。例如,設(shè)定時(shí)器/計(jì)數(shù)器T0為8位加1計(jì)數(shù)器,要求每隔100μs時(shí)間,發(fā)一次中斷請(qǐng)求(設(shè)機(jī)器周期為2μs),選定時(shí)功能,計(jì)數(shù)初值為28-100/2?=?206。
又如,設(shè)定時(shí)器/計(jì)數(shù)器T0為8位加1計(jì)數(shù)器,要求檢測(cè)到150個(gè)脈沖時(shí),發(fā)一次中斷請(qǐng)求?(設(shè)機(jī)器周期為1μs),選計(jì)數(shù)功能,計(jì)數(shù)初值為28-150=106。
4.定時(shí)器/計(jì)數(shù)器的四種工作方式
如上所述,定時(shí)器/計(jì)數(shù)器的工作方式是由TMOD的M1、M0兩位來(lái)控制的,而定時(shí)器/計(jì)數(shù)器的每種工作方式都各有特點(diǎn)。下面就對(duì)定時(shí)器/計(jì)數(shù)器四種工作方式的具體工作情況進(jìn)行詳細(xì)介紹。由于T0和T1的結(jié)構(gòu)完全一樣,因此以下的應(yīng)用同樣適合于T0(方式3除外)。
1)工作方式0
(1)基本結(jié)構(gòu)。定時(shí)器/計(jì)數(shù)器T1在工作方式0的邏輯結(jié)構(gòu)圖如圖4-5所示,這種工作方式稱為13位定時(shí)/計(jì)數(shù)方式。在該方式下,TL1的低5位和TH1的8位構(gòu)成13位的計(jì)數(shù)器,此時(shí)TL1的高3位未用。當(dāng)TL1的低5位計(jì)滿時(shí),向TH1進(jìn)位;當(dāng)TH1溢出后,對(duì)中斷標(biāo)志TF1置“1”,同時(shí)向CPU提出中斷請(qǐng)求。T1是否溢出也可以通過(guò)軟件查詢TF1是否為“1”來(lái)判斷。我們通過(guò)圖4-5來(lái)仔細(xì)分析一下T1工作在方式0下的具體情況。
前面說(shuō)過(guò),是定時(shí)/計(jì)數(shù)工作方式選擇位,當(dāng)為0時(shí)用作定時(shí)器,當(dāng)為1時(shí)用作計(jì)數(shù)器。選擇好工作模式后,定時(shí)/計(jì)數(shù)脈沖是否能到達(dá)計(jì)數(shù)器端,還需通過(guò)控制端這個(gè)開(kāi)關(guān),顯然這個(gè)開(kāi)關(guān)不合上,計(jì)數(shù)脈沖就沒(méi)法過(guò)去,而要使這個(gè)開(kāi)關(guān)接通,只有如下兩種情況。圖4-5定時(shí)器/計(jì)數(shù)器T1在工作方式0的邏輯結(jié)構(gòu)圖①當(dāng)GATE=0時(shí),GATE信號(hào)經(jīng)過(guò)非門后是1,與信號(hào)經(jīng)過(guò)或門后在輸出端(A)總是1,此時(shí)A的狀態(tài)與的狀態(tài)無(wú)關(guān),A再和TR1的信號(hào)進(jìn)行邏輯與。根據(jù)邏輯與的規(guī)則可知,此時(shí)只要TR1=1,與門的輸出端(B)即為1,開(kāi)關(guān)閉合,計(jì)數(shù)脈沖得以暢通無(wú)阻;如果TR1=0,則開(kāi)關(guān)斷開(kāi),計(jì)數(shù)脈沖無(wú)法通過(guò)。因此,定時(shí)器/計(jì)數(shù)器是否工作只取決于TR1。②當(dāng)GATE=1時(shí),GATE信號(hào)經(jīng)過(guò)非門后是0,與信號(hào)邏輯或,此時(shí)輸出端(A)信號(hào)就取決于,A再和TR1的信號(hào)進(jìn)行邏輯與。根據(jù)邏輯與的規(guī)則可知,此時(shí)只有TR1=1,為高電平時(shí),與門的輸出端(B)才為1,開(kāi)關(guān)閉合,計(jì)數(shù)脈沖得以暢通無(wú)阻,否則開(kāi)關(guān)斷開(kāi),計(jì)數(shù)脈沖無(wú)法通過(guò)。這個(gè)特性可以用來(lái)測(cè)量一個(gè)信號(hào)的高電平的寬度。例如定時(shí)器用于測(cè)量接于引腳輸入的正脈沖寬度,即當(dāng)引腳由低電平變?yōu)楦唠娖綍r(shí),啟動(dòng)T1開(kāi)始計(jì)數(shù),一旦引腳變?yōu)榈碗娖骄完P(guān)閉T1,此時(shí)T1計(jì)數(shù)前后的差值就是引腳輸入的正脈沖的寬度。要點(diǎn):一個(gè)定時(shí)器/計(jì)數(shù)器同一時(shí)刻要么用作定時(shí)器,要么用作計(jì)數(shù)器,定時(shí)和計(jì)數(shù)是不可能由一個(gè)定時(shí)器/計(jì)數(shù)器在同一時(shí)刻實(shí)現(xiàn)的。
(2)計(jì)算初始值。
最大計(jì)數(shù)值為:213?=?8192。
定時(shí)時(shí)間:T=?(213-?T1的初值)?×?Tcy。
計(jì)數(shù)個(gè)數(shù):S?=?213-T1的初值。
(3)定時(shí)器/計(jì)數(shù)器的初始化編程。
①向TMOD寄存器中寫(xiě)入工作方式控制字。
②向定時(shí)器/計(jì)數(shù)器TH0、TL0(或TH1、TL1)裝入初值。
③啟動(dòng)定時(shí)器/計(jì)數(shù)器(置位TR0/TR1)。
④如果采用中斷方式,則置位ET0(ET1)、EA、IP等中斷寄存器。
(4)定時(shí)設(shè)計(jì):已知單片機(jī)晶振頻率為6MHz,利用T1的方式0在P1.0引腳輸出周期為500μs的方波。
設(shè)計(jì)思路:
①實(shí)現(xiàn)設(shè)計(jì)要求之前一定要看清楚要求,這里晶振頻率采用6MHz,機(jī)器周期則為1μs,要輸出周期為500μs的方波,方波波形如圖4-6所示。實(shí)際是250μs高電平、
250μs低電平的周期波形,所以可以利用定時(shí)器T1定時(shí)
250μs,每次定時(shí)時(shí)間到,P1.0輸出信號(hào)反轉(zhuǎn)一次。圖4-6方波波形圖注意:雖然定時(shí)器/計(jì)數(shù)器T1啟動(dòng)后是自動(dòng)計(jì)數(shù)的,但它什么時(shí)候計(jì)數(shù)溢出CPU并不知道,所以要通過(guò)不斷地查詢定時(shí)器/計(jì)數(shù)器T1的溢出標(biāo)志TF1,看其是否為高電平。若為高電平,則說(shuō)明定時(shí)器/計(jì)數(shù)器T1溢出,即定時(shí)時(shí)間到了。②?TMOD初始化:
TMOD=00H,MOV TMOD,#00H
工作方式0的控制字如圖4-7所示。圖4-7工作方式0的控制字③計(jì)數(shù)初值。
工作方式0的初始值如圖4-8所示。圖4-8工作方式0的初始值所以,TH1=0FCH,TL1=03H。④?TCON初始化:
TR1=1,SETB TR1
仿真圖如圖4-9所示。
流程圖如圖4-10所示。圖4-9定時(shí)器/計(jì)數(shù)器工作方式的仿真圖圖4-10工作方式0的流程圖程序設(shè)計(jì)所需指令表如表4-2所示。若在MedWin軟件中單步仿真調(diào)試,則可以在“端口”窗口中觀察到P1.0口隨著程序的單步運(yùn)行每500μs閃爍一次?(這次所使用的調(diào)試方法僅用前面介紹的方法是不夠的),稍后會(huì)介紹;若在Proteus軟件中運(yùn)行,則可直觀用仿真示波器觀察P1.0輸出的波形。
MedWin仿真過(guò)程如下:
①在MedWin中編輯好下面這段程序,然后選擇“項(xiàng)目管理”/“編譯匯編”編譯代碼,若沒(méi)有語(yǔ)法錯(cuò)誤,則選擇“調(diào)試”/“開(kāi)始調(diào)試”進(jìn)行調(diào)試。
②為觀察數(shù)據(jù)方便,讀者可以選擇“外圍部件”/“端口”,打開(kāi)“端口”窗口。端口中的數(shù)據(jù)表現(xiàn)形式為:P0~P3口的數(shù)據(jù)為“1”,則有亮色標(biāo)識(shí);P0~P3口的數(shù)據(jù)為“0”,則為灰色。③為觀察程序運(yùn)行每一步的結(jié)果,讀者可以選擇“調(diào)試”/“單步”,使程序單步運(yùn)行。若調(diào)試定時(shí)器,則不能只用F8等待它的溢出,因?yàn)楹茈y捕捉到溢出的時(shí)刻。這樣我們就很難觀察,那么我們?cè)趺崔k呢?選擇“外圍部件”/“中斷”,打開(kāi)“中斷”窗口,選擇定時(shí)器T1(Timer1)行,窗口最下端會(huì)顯示一些可編程的標(biāo)志位。這些標(biāo)志位我們以后再理會(huì),現(xiàn)在先找到TF1,用鼠標(biāo)單擊它旁邊的復(fù)選框,打鉤則“溢出”,不打鉤則“未溢出”。這樣我們就可以很方便地調(diào)試了。
④調(diào)試成功后,可產(chǎn)生代碼,將代碼下載到實(shí)驗(yàn)板LJ_2,觀察效果。要點(diǎn):方式0在使用時(shí)一般都要重裝初始值,因?yàn)橛?jì)數(shù)器在每次溢出時(shí)回到0重新開(kāi)始計(jì)數(shù)。為了使每次定時(shí)時(shí)間一樣,我們必須在每次計(jì)數(shù)器溢出后重裝初始值。這個(gè)道理和用250mL的杯子取1?L水是一樣的。每次裝滿250mL水時(shí),我們倒空杯子后再接水,如果只要800mL水,且每次取水的量是一樣的,每次杯子都裝滿,那么可以采用每次取
200mL分4次取的方法,這樣我們就要保證在每次取水前杯子里已經(jīng)有50mL的水。
(5)脈沖寬度測(cè)量設(shè)計(jì)。利用T1的門控位GATE測(cè)量引腳上出現(xiàn)的脈沖寬度。
設(shè)計(jì)思路:利用門控位測(cè)量脈沖寬度的方法在基本結(jié)構(gòu)中已做了詳細(xì)的闡述,這里以實(shí)際的例子來(lái)加以說(shuō)明。上述要求的實(shí)現(xiàn)可以采用T1定時(shí)方式工作,由外部脈沖通過(guò)控制計(jì)數(shù)器控制開(kāi)關(guān),每次開(kāi)關(guān)通過(guò)計(jì)數(shù)器的脈沖信號(hào)是一定的,計(jì)數(shù)值乘以機(jī)器周期就是脈沖寬度。當(dāng)出現(xiàn)高電平時(shí)開(kāi)始計(jì)數(shù),當(dāng)為低電平時(shí)停止計(jì)數(shù),讀出T1的值。要點(diǎn):由于方式0的最大值為213(8192),所以可以測(cè)量的脈沖寬度最寬不能超過(guò)它的最大值。
思考:讀者可以自己練習(xí)利用T1的方式0在P1.0輸出周期為1ms的方波。
2)工作方式1
(1)基本結(jié)構(gòu)。定時(shí)器/計(jì)數(shù)器T1在工作方式1的邏輯結(jié)構(gòu)圖如圖4-11所示,這種工作方式稱為16位定時(shí)/計(jì)數(shù)方式。在該方式下,TL1的8位和TH1的8位構(gòu)成16位的計(jì)數(shù)器,其他特性與工作方式0相同。圖4-11定時(shí)器/計(jì)數(shù)器在工作方式1的邏輯結(jié)構(gòu)框圖
(2)計(jì)算初始值。
最大計(jì)數(shù)值:216??=65536。
定時(shí)時(shí)間:T?=?(216-?T1的初值)?×?Tcy。
計(jì)數(shù)個(gè)數(shù):S?=?216-?T1的初值。
(3)定時(shí)器/計(jì)數(shù)器的初始化編程和工作方式0的一樣。
(4)設(shè)計(jì)要求:已知單片機(jī)晶振頻率為6MHz,利用T1的方式1在P1.0引腳輸出周期為500μs的方波。設(shè)計(jì)思路:
①方波波形和工作方式0中的舉例一樣。
②如圖4-12所示,TMOD初始化:
TMOD=10H,MOV TMOD,#10H圖4-12工作方式1的控制字③計(jì)數(shù)初值:
所以,TH1=0FFH,TL1=83H。
④TCON初始化:
TR1=1,SETB TR1
仿真圖如圖4-9所示,流程圖如圖4-13所示,程序設(shè)計(jì)所需指令表和工作方式0的一樣。圖4-13工作方式1的流程圖
3)工作方式2
(1)基本結(jié)構(gòu)。定時(shí)器/計(jì)數(shù)器T1在工作方式2的邏輯結(jié)構(gòu)圖如圖4-14所示。這種工作方式將16位計(jì)數(shù)器拆成兩個(gè)8位計(jì)數(shù)器,TL1用作8位計(jì)數(shù)器,TH1用來(lái)保存初始值。每當(dāng)TL1計(jì)數(shù)溢出時(shí),TH1會(huì)自動(dòng)將初始值裝入到TL1,繼續(xù)計(jì)數(shù),如此循環(huán)工作。其他特性與工作方式0的相同。圖4-14定時(shí)器/計(jì)數(shù)器在工作方式2的邏輯結(jié)構(gòu)圖
(2)計(jì)算初始值。
最大計(jì)數(shù)值:28?=?256。
定時(shí)時(shí)間:T?=?(28-T1的初值)?×?Tcy。
計(jì)數(shù)個(gè)數(shù):S?=?28-T1的初值。
(3)定時(shí)器/計(jì)數(shù)器的初始化編程和工作方式0的一樣。
(4)設(shè)計(jì)要求:已知單片機(jī)晶振頻率為6MHz,利用T1的方式2在P1.0引腳輸出周期為500μs的方波。設(shè)計(jì)思路:
①方波波形和工作方式0中的舉例一樣。
②如圖4-15所示,TMOD初始化:
TMOD=20H,MOV TMOD,#20H圖4-15工作方式2控制字計(jì)數(shù)初值:
所以,TH1?=?83H,TL1?=?83H。
TCON初始化:
TR1
=
1,SETB TR1
仿真圖如圖4-9所示,流程圖如圖4-16所示,程序設(shè)計(jì)所需指令表與工作方式0的一樣。圖4-16工作方式2的流程圖參考程序代碼如下:
;***********************************
;文件名:EX4_3.asm功能:定時(shí)器在工作方式2實(shí)現(xiàn)周期為500μs的方波
;說(shuō)明:P1.0輸出
;***********************************
MedWin仿真過(guò)程和工作方式0的一樣。
要點(diǎn):工作方式2與前兩種工作方式的區(qū)別就在于它有自動(dòng)重裝初始值的功能。這其實(shí)有點(diǎn)像生產(chǎn)流水線上,你在組裝線的最后一崗,每次流水線上送來(lái)的都是已經(jīng)組裝好的半成品,加上你這道工序就成成品了,成品送走后,流水線上又會(huì)自動(dòng)送來(lái)新的半成品。你每次工作的基礎(chǔ)都是一樣的,而每次你完成工作后,成品就送走了。當(dāng)然,送到你這里的半成品其實(shí)也是由其他工友完成的。定時(shí)器/計(jì)數(shù)器的工作方式2每次重裝的內(nèi)容也是程序員事先設(shè)置好的,所以使用定時(shí)器/計(jì)數(shù)器前,一定要記得設(shè)置計(jì)數(shù)初始值。
4)工作方式3
定時(shí)器/計(jì)數(shù)器T0在工作方式3的邏輯結(jié)構(gòu)圖如圖4-17所示。在這種工作方式之下,定時(shí)器/計(jì)數(shù)器T0被拆成2個(gè)獨(dú)立的定時(shí)器/計(jì)數(shù)器。其中,TL0可以用作8位定時(shí)器或計(jì)數(shù)器,而TH0只能用作定時(shí)器。根據(jù)定時(shí)器/計(jì)數(shù)器T0在工作方式3的邏輯結(jié)構(gòu)圖,我們可以很清楚地看到TL0還是用原來(lái)的T0的各標(biāo)志位,而TH0則借用T1的各標(biāo)志位。因此,T1在T0工作在方式3時(shí)無(wú)法正常用作定時(shí)器或計(jì)數(shù)器,一般以工作方式2運(yùn)行,并且不占用TR1、TF1等標(biāo)志位。通常這種工作方式用于波特率發(fā)生器,此時(shí)定時(shí)器T1用來(lái)提供一個(gè)時(shí)間基準(zhǔn),計(jì)數(shù)溢出后只是重新裝入初始值,再開(kāi)始計(jì)數(shù),所以一般使用工作方式2。圖4-17定時(shí)器/計(jì)數(shù)器0在工作方式3的邏輯結(jié)構(gòu)圖(a)TL0用作8位定時(shí)器/計(jì)數(shù)器;(b)TH0用作8位定時(shí)器;(c)T0工作在方式3,T1工作在方式2的工作示意圖設(shè)計(jì)實(shí)例這里不再重復(fù)敘述了,讀者可以從前面介紹的3種工作方式總結(jié)出來(lái)。
要點(diǎn):細(xì)心的讀者可能會(huì)發(fā)現(xiàn),采用定時(shí)器來(lái)延時(shí)對(duì)時(shí)間的控制仍然不夠精確,這是什么原因呢?不是說(shuō)定時(shí)器可以不占用CPU的時(shí)間就能很精確地控制時(shí)間嗎?是的,但是必須利用中斷系統(tǒng),現(xiàn)在采用的仍然是查詢方式,CPU通過(guò)不斷查詢是否有溢出標(biāo)志來(lái)判斷定時(shí)或計(jì)數(shù)是否符合要求,CPU仍然沒(méi)有徹底解放出來(lái),所以要真正地提高CPU的效率還要學(xué)會(huì)后面講的MCS-51單片機(jī)的中斷系統(tǒng)。
【練習(xí)】
項(xiàng)目:簡(jiǎn)易秒表的設(shè)計(jì)。
項(xiàng)目編號(hào):EX4_4。
任務(wù)要求:在Proteus中設(shè)計(jì)簡(jiǎn)易秒表電路,編程實(shí)現(xiàn)簡(jiǎn)易秒表,時(shí)間在0~9秒循環(huán)顯示,用定時(shí)器來(lái)實(shí)現(xiàn)1?s延時(shí)。在MedWin集成開(kāi)發(fā)環(huán)境中編輯/編譯控制程序,并產(chǎn)生代碼,在Porteus平臺(tái)里仿真系統(tǒng),撰寫(xiě)練習(xí)報(bào)告(格式要求見(jiàn)附錄A)。
1.設(shè)計(jì)思路
電路的設(shè)計(jì)和3.4.2節(jié)中的設(shè)計(jì)一樣,編程實(shí)現(xiàn)效果的思路也和3.4.2節(jié)的差不多,只不過(guò)這次延時(shí)1?s子程序采用定時(shí)器來(lái)實(shí)現(xiàn),仿真過(guò)程中選用的晶振為12MHz,那么機(jī)器周期就為1?μs。由前面定時(shí)器/計(jì)數(shù)器4種工作方式的介紹可知,采用工作方式1定時(shí)時(shí)間最長(zhǎng),但也只有216(66536)μs,而1s?=?106μs,怎么辦?我們?cè)傧胂霑r(shí)鐘的設(shè)計(jì)原理,如果我們也讓定時(shí)器像時(shí)鐘指針一樣一圈一圈周而復(fù)始地工作,那么是不是就能實(shí)現(xiàn)呢?所以,我們采用讓定時(shí)器以50?ms定時(shí)溢出一次,當(dāng)定時(shí)器溢出20次時(shí)就表示1s到了。
2.設(shè)計(jì)步驟
(1)設(shè)計(jì)仿真圖如圖4-18所示,流程圖如圖4-19所示。圖4-18簡(jiǎn)易秒表仿真圖圖4-19簡(jiǎn)易秒表的流程圖(a)單個(gè)數(shù)碼管顯示;(b)1s延時(shí)子程序
(2)程序設(shè)計(jì)所需指令表如表4-3所示。
(3參考程序代碼如下:
;***********************************
;文件名:EX4_4.asm功能:定時(shí)器工作方式1實(shí)現(xiàn)簡(jiǎn)易秒表
;說(shuō)明:數(shù)碼管接在P2口
;***********************************
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV SP,#5FH ;置堆棧棧頂
MOV R0,#20
;設(shè)置定時(shí)器的循環(huán)計(jì)數(shù)器的初值
MOV TMOD,#01H
;設(shè)置定時(shí)器T0為定時(shí)模式,工作方式1
MOV TH0,#3CH
;設(shè)置定時(shí)器T0的定時(shí)初值
MOV TL0,#0B0H
CLR A
;累加器清零
MOV30H,A
;表格偏移量清零
MOVDPTR,#TAB
;置表格首地址給DPTR注意:這里定時(shí)器T0用查詢方式進(jìn)行延時(shí),而通過(guò)學(xué)習(xí)后面的內(nèi)容會(huì)發(fā)現(xiàn)用中斷方式進(jìn)行延時(shí)就不存在調(diào)用子程序,這是為什么呢?
思考:若需要數(shù)碼管倒計(jì)時(shí)顯示,則應(yīng)怎樣修改程序呢?4.2簡(jiǎn)易計(jì)數(shù)器的設(shè)計(jì)
【練習(xí)】項(xiàng)目:簡(jiǎn)易計(jì)數(shù)器的設(shè)計(jì)。項(xiàng)目編號(hào):EX4_5。任務(wù)要求:在Proteus中設(shè)計(jì)簡(jiǎn)易計(jì)數(shù)器電路,編程實(shí)現(xiàn)計(jì)數(shù)器T0每輸入一次,數(shù)碼管顯示值在當(dāng)前的基礎(chǔ)上加1一次,數(shù)值以0~9循環(huán)顯示。在MedWin集成開(kāi)發(fā)環(huán)境中編輯/編譯控制程序,并產(chǎn)生代碼,在Porteus平臺(tái)里仿真系統(tǒng),撰寫(xiě)練習(xí)報(bào)告(格式要求見(jiàn)附錄A)。
1.設(shè)計(jì)思路
利用T0的計(jì)數(shù)器功能將一個(gè)按鍵連接在T0引腳上,按鍵每按一次,就要使數(shù)碼管顯示值加1一次。如果利用T0作為普通的I/O,則可以利
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陜教新版必修3物理下冊(cè)階段測(cè)試試卷
- 2025年滬教版七年級(jí)化學(xué)上冊(cè)階段測(cè)試試卷
- 二零二五年股權(quán)贈(zèng)與與員工創(chuàng)業(yè)扶持協(xié)議3篇
- 2025年建筑勞務(wù)承包協(xié)議書(shū)3篇
- 2025年華東師大版三年級(jí)英語(yǔ)下冊(cè)月考試卷含答案
- 2024版大學(xué)生畢業(yè)生實(shí)習(xí)期間人身意外傷害保險(xiǎn)協(xié)議3篇
- 二零二五年雞蛋收購(gòu)與加工企業(yè)合作合同3篇
- 2025年中圖版七年級(jí)生物上冊(cè)月考試卷含答案
- 2025年浙教版九年級(jí)化學(xué)下冊(cè)階段測(cè)試試卷含答案
- 2025年人教五四新版選修1生物上冊(cè)階段測(cè)試試卷
- 建設(shè)工程總承包計(jì)價(jià)規(guī)范
- 大同市陽(yáng)高縣王官屯50MW風(fēng)電項(xiàng)目220kV升壓站及送出工程環(huán)評(píng)報(bào)告
- GB/T 2992-1998通用耐火磚形狀尺寸
- 英語(yǔ)名著閱讀老人與海教學(xué)課件(the-old-man-and-the-sea-)
- 學(xué)校食品安全知識(shí)培訓(xùn)課件
- 全國(guó)醫(yī)學(xué)博士英語(yǔ)統(tǒng)一考試詞匯表(10000詞全) - 打印版
- 最新《會(huì)計(jì)職業(yè)道德》課件
- DB64∕T 1776-2021 水土保持生態(tài)監(jiān)測(cè)站點(diǎn)建設(shè)與監(jiān)測(cè)技術(shù)規(guī)范
- ?中醫(yī)院醫(yī)院等級(jí)復(fù)評(píng)實(shí)施方案
- 數(shù)學(xué)-九宮數(shù)獨(dú)100題(附答案)
- 理正深基坑之鋼板樁受力計(jì)算
評(píng)論
0/150
提交評(píng)論