日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《單片機(jī)原理與應(yīng)用》 > 第5章 MCS-51單片機(jī)內(nèi)部資源

第1節(jié) 單片機(jī)計(jì)數(shù)并顯示

  5.1.1 硬件電路與工作原理

  1. 硬件電路

  硬件電路同單元二中圖2.1。

  2. 工作原理

  用手按動按鍵S3,每按鍵一次S3引腳上出現(xiàn)一個(gè)負(fù)脈沖,單片機(jī)計(jì)數(shù)一次,并實(shí)時(shí)將按鍵次數(shù)以BCD碼方式,在發(fā)光二極管上面顯示。

  5.1.2 控制程序

  1. 主程序流程圖

  

 

  圖5.1

  2. 控制程序

  ORG 0000H

  LJMP MAIN

  ORG 0030H

  MAIN: MOV TMOD,#06H ;設(shè)定T0的工作方式

  MOV TH0,#00H ;設(shè)定計(jì)數(shù)初值

  MOV TL0,#00H ;

  SETB TR0 ;啟動計(jì)數(shù)器

  MOV P1,TL0 ;送顯示

  END

  5.1.3 源程序的編輯、編譯、下載

  打開“偉福”模擬仿真軟件進(jìn)行程序的編輯、編譯。

  打開“ISP下載軟件”將目標(biāo)文件下載到ISP-4實(shí)驗(yàn)開發(fā)板上的AT89S51單片機(jī)芯片,觀察程序運(yùn)行結(jié)果。

  5.1.4 相關(guān)知識

  1. 單片機(jī)是如何進(jìn)行計(jì)數(shù)的?

  本次任務(wù)中,單片機(jī)完成了對S3鍵按鍵次數(shù)的累計(jì),那么,單片機(jī)是如何進(jìn)行計(jì)數(shù)的?

  在單片機(jī)的內(nèi)部結(jié)構(gòu)中,我們知道在MCS-51的單片機(jī)內(nèi)有兩個(gè)16位可編程的定時(shí)/計(jì)數(shù)器,它們具有四種工作方式,其控制字和狀態(tài)均在相應(yīng)的特殊功能寄存器中,通過對控制寄存器的編程,就可方便地選擇適當(dāng)?shù)墓ぷ鞣绞?。下面我們對它們的特性進(jìn)行闡述。

  (1) 定時(shí)/計(jì)數(shù)器的工作方式

  MCS-51單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)如圖5.2所示,

  

 

  圖5.2 MCS-51定時(shí)/計(jì)數(shù)器結(jié)構(gòu)圖

  定時(shí)器T0特性功能寄存器TL0(低8位)和TH0(高8位)構(gòu)成,定時(shí)器T1由特性功能寄存器TL1(低8位)和TH1(高8位)構(gòu)成。特殊功能寄存器TMOD控制定時(shí)計(jì)數(shù)器的工作方式,TCON則用于控制定時(shí)計(jì)數(shù)器T0和T1的啟動和停止計(jì)數(shù),同時(shí)管理定時(shí)器T0和T1的溢出標(biāo)志等。程序開始時(shí)需對TL0、TH0、TL1和TH1進(jìn)行初始化編程,以定義它們的工作方式和控制T0和T1的計(jì)數(shù)。

  TMOD和TCON這兩個(gè)特殊功能寄存器的格式參見下表:

  定時(shí)/計(jì)數(shù)器的方式控制字TMOD,字節(jié)地址為89H,其格式如表5.1:

  表5.1 TMOD寄存器結(jié)構(gòu)

  定時(shí)器控制積存器TCON,字節(jié)地址為88H,位地址為88H—8FH,其格式如表5.2:

  表5.2 TCON結(jié)構(gòu)

  TMOD和TCON各位的意義和用途我們將在下面的章節(jié)中予以介紹,需要注意的是,TCON的D0—D3位與中斷有關(guān),我們會在中斷的內(nèi)容中加以說明,MCS-51的定時(shí)/計(jì)數(shù)器共有四種工作方式,我們逐個(gè)進(jìn)行討論。

  1) 工作方式0

  定時(shí)/計(jì)數(shù)器0的工作方式0電路邏輯結(jié)構(gòu)見圖5.3(定時(shí)/計(jì)數(shù)器1與其完全一致),

  

  圖5.3

  工作方式0是13位計(jì)數(shù)結(jié)構(gòu)的工作方式,其計(jì)數(shù)器由TH的全部8位和TL的低5位構(gòu)成,TL的高3位沒有使用。當(dāng)時(shí),多路開關(guān)接通振蕩脈沖的12分頻輸出,13位計(jì)數(shù)器以次進(jìn)行計(jì)數(shù)。這就是定時(shí)工作方式。當(dāng)=1時(shí),多路開關(guān)接通計(jì)數(shù)引腳(To),外部計(jì)數(shù)脈沖由銀南腳To輸入。當(dāng)計(jì)數(shù)脈沖發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加1,這就是我們常稱的計(jì)數(shù)工作方式。不管是哪種工作方式,當(dāng)TL的低5位溢出時(shí),都會向TH進(jìn)位,而全部13位計(jì)數(shù)器溢出時(shí),則會向計(jì)數(shù)器溢出標(biāo)志位TF0進(jìn)位。

  我們討論門控位GATA的功能,GATA位的狀態(tài)決定定時(shí)器運(yùn)行控制取決于TR0的一個(gè)條件還是TR0和INT0引腳這兩個(gè)條件。當(dāng)GATA=1時(shí),由于GATA信號封鎖了與門,使引腳INT0信號無效。而這時(shí)候如果TR0=1,則接通模擬開關(guān),使計(jì)數(shù)器進(jìn)行加法計(jì)數(shù),即定時(shí)/計(jì)數(shù)工作。而TR0=0,則斷開模擬開關(guān),停止計(jì)數(shù),定時(shí)/計(jì)數(shù)不能工作。

  當(dāng)GATA=0時(shí),與門的輸出端由TR0和INT0電平的狀態(tài)確定,此時(shí)如果TR0=1,INT0=1與門輸出為1,允許定時(shí)/計(jì)數(shù)器計(jì)數(shù),在這種情況下,運(yùn)行控制由TR0和INT0兩個(gè)條件共同控制,TR0是確定定時(shí)/計(jì)數(shù)器的運(yùn)行控制位,由軟件置位或清“0”。

  如上所述,TF0是定時(shí)/計(jì)數(shù)器的溢出狀態(tài)標(biāo)志,溢出時(shí)由硬件置位,TF0溢出中斷被CPU響應(yīng)時(shí),轉(zhuǎn)入中斷時(shí)硬件清“0”,TF0也可由程序查詢和清“0”。

  在工作方式下,計(jì)數(shù)器的計(jì)數(shù)值范圍是:

  1~8192(213)

  當(dāng)為定時(shí)工作方式時(shí),定時(shí)時(shí)間的計(jì)算公式為:

  (213-計(jì)數(shù)初值)×晶振周期×12

  或 (213-計(jì)數(shù)初值)×機(jī)器周期

  其時(shí)間單位與晶振周期或機(jī)器周期相同。

  如果單片機(jī)的晶振選為6.000MHz,則最小定時(shí)時(shí)間為:

  [213—(213—1)]×1/6×10-6×12=2×10-6(s)=2(us)

  (213—0)×1/6×10-6×12=16384×10-6(s)=16384(us)。

  2) 工作方式1

  當(dāng)M1,M0=01時(shí),定時(shí)/計(jì)數(shù)器處于工作方式1,此時(shí),定時(shí)/及數(shù)器的等效電路如圖5.4所示,仍以定時(shí)器0為例,定時(shí)器1與之完全相同。

 

  圖5.4

  可以看出,方式0和方式1的區(qū)別僅在于計(jì)數(shù)器的位數(shù)不同,方式0為13位,而方式1則為16位,由TH0作為高8位,TL0為低8位,有關(guān)控制狀態(tài)字(GATA、、TF0、TR0)和方式0相同。在工作方式1下,計(jì)數(shù)器的計(jì)數(shù)值范圍是:

  1~65536(216)

  當(dāng)為定時(shí)工作方式1時(shí),定時(shí)時(shí)間的計(jì)算公式為:

  (216—計(jì)數(shù)初值)× 晶振周期×12

  或 (216—計(jì)數(shù)初值)× 機(jī)器周期

  其時(shí)間單位與晶振周期或機(jī)器周期相同。

  如果單片機(jī)的晶振選為6.000MHz,則最小定時(shí)時(shí)間為:

  [213—(216—1)]×1/6×10-6×12=2×10-6(s)=2(us)

  (216—0)×1/6×10-6×12=131072×10-6(s)=131072(us)。

  3) 工作方式2

  當(dāng)M1M0=10時(shí),定時(shí)/計(jì)數(shù)器處于工作方式2.此時(shí)定時(shí)器的等效電阻如圖5.5所示.我們還是以定時(shí)/計(jì)數(shù)器0為例,定時(shí)/計(jì)數(shù)器1與之完全一致。

  

 

  圖5.5 定時(shí)器等效電阻

  工作方式0和工作方式1的最大特點(diǎn)就是計(jì)數(shù)溢出后,計(jì)數(shù)器為全0,因而循環(huán)定時(shí)或循環(huán)計(jì)數(shù)應(yīng)用時(shí)就存在反復(fù)設(shè)置初值的問題,這給程序設(shè)計(jì)帶來許多不便,同時(shí)也會影響計(jì)時(shí)精度,工作方式2就針對這個(gè)問題而設(shè)置,它具有自動重裝載功能,即自動加載計(jì)數(shù)初值,所以也有的文獻(xiàn)稱之為自動重加載工作方式。在這種工作方式中,16位計(jì)數(shù)器分為兩部分,即以TL0為計(jì)數(shù)器,以TH0作為預(yù)置寄存器,初始化時(shí)把計(jì)數(shù)初值分別加載至TL0和TH0中,當(dāng)計(jì)數(shù)溢出時(shí),不再象方式0和方式1那樣需要“人工干預(yù)”,由軟件重新賦值,而是由預(yù)置寄存器TH以硬件方法自動給計(jì)數(shù)器TL0重新加載。

  程序初始化時(shí),給TL0和TH0同時(shí)賦以初值,當(dāng)TL0計(jì)數(shù)溢出時(shí),置位TF0的同時(shí)把預(yù)置寄存器TH0中的初值加載給TL0,TL0重新計(jì)數(shù)。如此反復(fù),這樣省去了程序不斷需給計(jì)數(shù)器賦值的麻煩,而且計(jì)數(shù)準(zhǔn)確度也提高了。但這種方式也有其不利的一面,就是這樣一來的計(jì)數(shù)結(jié)構(gòu)只有8位,計(jì)數(shù)值有限,最大只能到255。所以這種工作方式很適合于那些重復(fù)計(jì)數(shù)的應(yīng)用場合。例如我們可以通過這樣的計(jì)數(shù)方式產(chǎn)生中斷,從而產(chǎn)生一個(gè)固定頻率的脈沖。也可以當(dāng)作串行數(shù)據(jù)通信的波特率發(fā)送器使用。

  4) 工作方式3

  當(dāng)M1M0=11時(shí),定時(shí)/計(jì)數(shù)器處于工作方式3,此時(shí),定時(shí)/計(jì)數(shù)器的等效電路如圖5.6所示,仍以定時(shí)器0為例,值得注意的是,在工作方式3模式下,定時(shí)/計(jì)數(shù)器1的工作方式與之不同,下面我們分別討論。

  

 

  圖5.6

  在工作方式3模式下,定時(shí)/計(jì)數(shù)器0被拆成兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。其中TL0既可以作計(jì)數(shù)器使用,也可以作為定時(shí)器使用,定時(shí)/計(jì)數(shù)器0的各控制位和引腳信號全歸它使用。其功能和操作與方式0或方式1完全相同。TH0就沒有那么多“資源”可利用了,只能作為簡單的定時(shí)器使用,而且由于定時(shí)/計(jì)數(shù)器0的控制位已被TL0占用,因此只能借用定時(shí)/計(jì)數(shù)器1的控制位TR1和TF1,也就是以計(jì)數(shù)溢出去置位TF1,TR1則負(fù)責(zé)控制TH0定時(shí)的啟動和停止。等效電路參見圖5.7。由于TL0既能作定時(shí)器也能作計(jì)數(shù)器使用,而TH0只能作定時(shí)器使用而不能作計(jì)數(shù)器使用,因此在方式3模式下,定時(shí)/計(jì)數(shù)器0可以構(gòu)成二個(gè)定時(shí)器或者一個(gè)定時(shí)器和一個(gè)計(jì)數(shù)器。

  如果定時(shí)/計(jì)數(shù)器0工作于工作方式3,那么定時(shí)/計(jì)數(shù)器1的工作方式就不可避免受到一定的限制,因?yàn)樽约旱囊恍┛刂莆灰驯欢〞r(shí)/計(jì)數(shù)器借用,只能工作在方式0、方式1或方式2下,等效電路參見圖5.7

  

 

  圖5.7

  在這種情況下,定時(shí)/計(jì)數(shù)器1通常作為串行口的波特率發(fā)生器使用,以確定串行通信的速率,因?yàn)橐褯]有TF1被定時(shí)/計(jì)數(shù)器0借用了,只能把計(jì)數(shù)溢出直接送給串行口。當(dāng)作波特率發(fā)生器使用時(shí),只需設(shè)置好工作方式,即可自動運(yùn)行。如要停止它的工作,需送入一個(gè)把它設(shè)置為方式3的方式控制字即可,這是因?yàn)槎〞r(shí)/計(jì)數(shù)器本身就不能工作在方式3,如硬把它設(shè)置為方式3,自然會停止工作。

  從前面的任務(wù)中,我們看到了,首先必須對定時(shí)計(jì)數(shù)器進(jìn)行初始化,然后再開啟定時(shí)或計(jì)數(shù)。簡單的總結(jié)一下,定時(shí)計(jì)數(shù)器的初始化包括以下內(nèi)容。

  (1) 確定工作方式——對TMOD賦值;

  如:任務(wù)中的MOV TMOD,#06H指令,設(shè)定T0為計(jì)數(shù)器工作方式。

  (2) 預(yù)置定時(shí)計(jì)數(shù)器中計(jì)數(shù)的初值——直接寫入TH和TL;

  如:任務(wù)中的MOV TH0,#00H 兩條指令,設(shè)定計(jì)數(shù)初值。

  MOV TL0,#00H

  (3) 根據(jù)需要開放定時(shí)器/計(jì)數(shù)器的中斷——對IE位賦值;

  (4) 啟動定時(shí)器/計(jì)數(shù)器;

  如:任務(wù)中的SETB TR0 指令

  初值的計(jì)算方法

  X=M-計(jì)數(shù)值

  M是定時(shí)器的最大計(jì)數(shù)值。視工作方式不同而不同。

  工作方式0: 13位定時(shí)/計(jì)數(shù)方式,因此,最多可以計(jì)到2的13次方,也就是8192次。

  工作方式1: 16位定時(shí)/計(jì)數(shù)方式,因此,最多可以計(jì)到2的16次方,也就是65536次。

  工作方式2和工作方式3,都是8位的定時(shí)/計(jì)數(shù)方式,因此,最多可以計(jì)到2的8次方,也說是256次。

  預(yù)置值計(jì)算: 用最大計(jì)數(shù)量減去需要的計(jì)數(shù)次數(shù)即可。

  通過上面的任務(wù),我們掌握了計(jì)數(shù)程序的編制方法,下面我們再看看定時(shí)程序怎樣編制。

  首先我們看一下下面的程序段。

  MOV TMOD,#01H

  MOV TL0,#00H

  MOV TH0,#4CH

  SETB TR0

  以上程序是任務(wù)一中的定時(shí)程序段,它的初始化過程和計(jì)數(shù)方式類似。 

?
孟津县| 镇远县| 临汾市| 紫金县| 盖州市| 浦江县| 洪江市| 红河县| 大邑县| 高青县| 漳浦县| 濮阳县| 东乌珠穆沁旗| 孟津县| 龙井市| 扶沟县| 周宁县| 西乌珠穆沁旗| 兴宁市| 大石桥市| 个旧市| 海晏县| 青龙| 崇阳县| 读书| 大连市| 普兰县| 霍山县| 延安市| 台州市| 荆门市| 嘉兴市| 桦南县| 张北县| 绍兴市| 乌鲁木齐县| 中西区| 桃园市| 铅山县| 安徽省| 田阳县|