標(biāo)題: 單片機(jī)匯編語言實(shí)驗(yàn)八 利用定時計(jì)數(shù)器產(chǎn)生波形 [打印本頁]

作者: cangyuan    時間: 2021-7-23 16:15
標(biāo)題: 單片機(jī)匯編語言實(shí)驗(yàn)八 利用定時計(jì)數(shù)器產(chǎn)生波形
本實(shí)驗(yàn)設(shè)8051微控制器采用的晶振頻率為12MHz,利用定時器T1定時,使P1.0 輸出周期為2ms的方波。目的是為了1、了解8051定時計(jì)數(shù)器的硬件結(jié)構(gòu)和寄存器;2、掌握8051定時計(jì)數(shù)器軟件查詢和中斷的處理方法。

1、定時計(jì)數(shù)器概述
定時/計(jì)數(shù)器,其具有定時和計(jì)數(shù)的功能。計(jì)數(shù)是指對外部脈沖信號進(jìn)行比較,每來一個脈沖,計(jì)數(shù)值加1;當(dāng)產(chǎn)生的信號脈沖很有規(guī)律時,比如1秒鐘來一個,那么計(jì)數(shù)多少個脈沖就知道過了多少秒,從而計(jì)數(shù)功能可以演化為定時功能。時功能需要用到某個基準(zhǔn)時鐘,通過對基準(zhǔn)時鐘的計(jì)數(shù)來完成定時功能。
定時/計(jì)數(shù)器的種類比較多,但一般可歸為兩類:
1)專用的定時/計(jì)數(shù)器器件(如8253);
2)處理器中集成定時器/計(jì)數(shù)器(如8051單片機(jī)自帶2個16位定時/計(jì)數(shù)器)。這些定時器一般都有一個輸入時鐘,即基準(zhǔn)時鐘。

定時/計(jì)數(shù)器有如下一些用途:
1)產(chǎn)生所需頻率的脈沖。如產(chǎn)生頻率1000hz,占空比1:1的脈沖波。
2)在累加計(jì)數(shù)中的應(yīng)用。計(jì)數(shù)器可在一段時間內(nèi)記錄信號A經(jīng)整形后的脈沖個數(shù)。
3)在頻率測量中的應(yīng)用。通過測量脈沖寬度或在一定時間內(nèi)測量脈沖的個數(shù),從而推算出脈沖的頻率。
4)定時/計(jì)數(shù)器在計(jì)時中的應(yīng)用。定時/計(jì)數(shù)器可對時鐘信號,如秒信號進(jìn)行計(jì)數(shù),也可用來倒計(jì)時,秒表計(jì),時間循環(huán)等。
1、8051定時計(jì)數(shù)器
8051單片機(jī)內(nèi)部有2個16位的定時/計(jì)數(shù)器:T1和T0。
T0定時/計(jì)數(shù)器詳解: 寄存器位C/T控制開關(guān),往上是振蕩器,即CPU晶振產(chǎn)生的脈沖,往下是P3.4的引腳,即從外部得到的脈沖信號。進(jìn)來之后首先送到TL0寄存器中,當(dāng)TL0寄存器計(jì)數(shù)滿了之后,就會進(jìn)位到TH0寄存器,當(dāng)TH0寄存器計(jì)數(shù)滿了之后,就會產(chǎn)生溢出信號,TCON寄存器就會設(shè)置一個相應(yīng)的標(biāo)志,標(biāo)志會引發(fā)CPU的中斷,即51單片機(jī)的內(nèi)核處理單元處理。整個定時器是受到TMOD和TCON這兩個寄存器的控制,分別控制工作模式與工作狀態(tài)。
1、計(jì)數(shù)功能與定時功能
計(jì)數(shù)功能就是對外部脈沖進(jìn)行計(jì)數(shù);
計(jì)時就是針對內(nèi)部振蕩器,一般12MHz,除以12 ,就是1MHz,相當(dāng)于一個脈沖就是1us,數(shù)多少個脈沖就知道多少us,就是定時功能;
2、T0相關(guān)寄存器4個
寄存器描述
6個相關(guān)的寄存器:TMOD、TCON、TH0、TL0、TH1、TL1
其中TMOD用于控制和確定各定時/計(jì)數(shù)器的功能和工作方式,TCON用于控制各定時/計(jì)數(shù)器的啟動和停止計(jì)數(shù),同事 包含定時/計(jì)數(shù)器的狀態(tài),TH0、TL0用于T0的計(jì)數(shù),TH1、TL1用于T1的計(jì)數(shù)。系統(tǒng)復(fù)位時,這些寄存器的所有為都被清零。
#TMOD方式寄存器描述

C/T:選擇計(jì)數(shù)器或定時器功能,C/T=1位外部脈沖計(jì)數(shù)器功能,C/T=0為內(nèi)部脈沖計(jì)數(shù)器功能(可做定時器)
GATE:選通控制,GATE=0,由軟件控制TR0或TR1位啟動定時器:GATE=1,由外部中斷引腳INT0(P3.2)和INT1(P3.3)輸入電平分別控制T0和T1的運(yùn)行。
方式1
方式0和方式1工作過程差不多,只不過方式0為13位計(jì)數(shù)方式,最大計(jì)數(shù)值只能達(dá)到213=8192;而方式1為16位計(jì)數(shù)方式,最大計(jì)數(shù)值為216=65536。
當(dāng)工作在計(jì)數(shù)方式時,最大計(jì)數(shù)值為2^16=65536。
當(dāng)為定時工作方式時,定時時間計(jì)算公式為:
T=(216-計(jì)數(shù)初值)×晶振周期×12=(216-計(jì)數(shù)初值)×12÷晶振頻率
假設(shè)晶振頻率為12MHz,則方式1下最大定時時間T=(2^16-0)×12÷12MHz=65536x1us=65.536ms。
方式2
方式2為8位計(jì)數(shù)方式,最大計(jì)數(shù)值為2^8,能夠自動重裝計(jì)數(shù)值。
方式2特別適合于把定時/計(jì)數(shù)器用作串口波特率發(fā)生器。
定時時間T=(2^8-計(jì)數(shù)初值)×晶振周期×12 =(2^8-計(jì)數(shù)初值)×12÷晶振頻率。
方式1
方式2

方式1詳解: C/T開關(guān)控制脈沖的來源,不管哪種脈沖,都會送到K往后計(jì)數(shù),其中K的狀態(tài)受下方邏輯控制。當(dāng)GATE=0,A處輸出1,此時B處的狀態(tài)只受TR0控制,當(dāng)TR0=1,K處開關(guān)閉合,當(dāng)TR0=0,K處開關(guān)斷開,即只通過TR0(軟件控制位)來控制定時器。當(dāng)GATE=1,A處輸出值受INT0引腳控制,當(dāng)TR0=1,此時K狀態(tài)只受INT0控制,當(dāng)INT0=1,K處開關(guān)閉合,當(dāng)INT0=0,K處開關(guān)斷開,即只通過引腳的電平來控制定時器。開關(guān)閉合后,開始計(jì)數(shù),TL0計(jì)數(shù)滿進(jìn)位到TH0,TH0計(jì)數(shù)滿進(jìn)位到TF0(中斷標(biāo)志),即產(chǎn)生中斷給了51。
方式2詳解: 方式2與方式1的前面大部分原理相同,不同的是8位計(jì)數(shù)方式,TL0計(jì)數(shù)滿直接進(jìn)位給TF0產(chǎn)生中斷,同時通過選通控制將TH0(已設(shè)置好)的值覆蓋到TH0(自動重裝計(jì)數(shù)值),重新計(jì)數(shù)。
TCON寄存器描述
其中高4位控制定時/計(jì)數(shù)器T0和T1的運(yùn)行,低4位控制外部中斷INT1和INT0的運(yùn)行。
TF1: T1計(jì)數(shù)溢出標(biāo)志位,計(jì)數(shù)寄存器產(chǎn)生溢出時由硬件自動置位,置位后向CPU申請中斷,中斷響應(yīng)后硬件自動復(fù)位,若采用程序查詢方式,必須軟件清除該位。
TR1: T1運(yùn)行控制位,由軟件置位和復(fù)位。當(dāng)GATE(TMOD.7)為0時,由軟件設(shè)置為“1”時立即啟動T1計(jì)數(shù)寄存器開始計(jì)數(shù),清除為“0”時立即停止T1計(jì)數(shù)器寄存器計(jì)數(shù)。當(dāng)GATE為1時,置位TR1為“1”時還必須INT1輸入為高電平時,才啟動T1計(jì)數(shù),清除為“0”時或INT1輸入為低電平時均可停止T1計(jì)數(shù)。
TF0: 定時器T0溢出標(biāo)志位,其含義與TF1類似。
TR0: 定時器T0的運(yùn)行控制位,其含義與TR1類似。
#使用步驟
1、定時/計(jì)數(shù)功能的確定,從而確定C/T位的值;以及T0、T1的選用。
2、計(jì)數(shù)值的確定。 如果選擇為定時功能,則需要計(jì)算計(jì)數(shù)值,公式如下:
(注:一個機(jī)器周期等于12個時鐘周期,時鐘周期是晶振振蕩頻率的倒數(shù))
計(jì)數(shù)值 = 定時時間/機(jī)器周期 = 定時時間×12/晶振頻率。比如單片機(jī)系統(tǒng)的晶振頻率為12MHz,現(xiàn)需要定時1ms,則計(jì)數(shù)值 = 1ms × 12/12MHz = 1000。
3、確定定時/計(jì)數(shù)器的工作方式,一般選用方式1和方式2,當(dāng)需要計(jì)數(shù)值比較大時(計(jì)數(shù)值>256),選用方式1工作,此時最大計(jì)數(shù)范圍為2^16。
4、計(jì)數(shù)初值的確定,即THn和TLn的確定。因?yàn)?1單片機(jī)的定時/計(jì)數(shù)器是采用計(jì)滿溢出的,所以:計(jì)數(shù)初值=(計(jì)數(shù)最大值-計(jì)數(shù)值),從而確定計(jì)數(shù)初值。比如計(jì)數(shù)值為1000,選用方式2(16位寄存器),則:計(jì)數(shù)初值 = 2^16-1000 = 64536 = 0xFC18,所以THn = 0xFC,TLn = 0x18。
5、溢出標(biāo)志位TFn(n=0或1)清0。
6、運(yùn)行控制位TRn置1,定時/計(jì)數(shù)器開始計(jì)數(shù)。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. ORG  0000H
  2. LJMP MAIN
  3. ORG 000BH
  4. LJMP COUNT
  5.        
  6.         MAIN:
  7.         CLR P1.0
  8.         MOV R4,#0
  9.         MOV R5,#0
  10.         MOV TMOD,#6
  11.         MOV TH0,#9CH
  12.         MOV TL0,#9CH
  13.         SETB EA
  14.         SETB ET0
  15.         SETB TR0
  16.         SJMP $
  17.        
  18.         COUNT:
  19.         SETB P1.0
  20.         MOV A,R4
  21.         ADD A,R5
  22.         MOV R4,A
  23.         MOV A,R5
  24.         ADDC A,#0
  25.         MOV R5,A
  26.         MOV R3,#250
  27.         DLY:NOP
  28.         MOV R2,#250
  29.         D1:NOP
  30.         DJNZ R2,D1
  31.         DJNZ R3,DLY
  32.         CLR P1.0
  33.         RETI
  34.        
  35.         END
復(fù)制代碼

仿真代碼51hei附件下載:
實(shí)驗(yàn)八工程.7z (53.81 KB, 下載次數(shù): 11)

圖片4.png (48.02 KB, 下載次數(shù): 158)

圖片4.png





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1