計數器綜合應用實例講解

【例1】 編寫定時器T0產生1秒的定時程序,通過P1.0口輸出高、低電平均為1s的方波(假設單片機採用12MHz的晶振)。

分析如下:

12MHz的晶振,機器週期為1us,各種工作方式直接定時的最大定時時間分別為:

方式0: 2 13 =8192us=8.192ms

方式1: 2 16 =65536us=65.536ms

方式2、3: 2 8 =256us

編程思路:

任何一種方式都無法直接實現1s的定時,可以考慮採用方式1實現50ms定時中斷,設置一變量對中斷的次數進行計數,計數到20時即為1秒。

c語言源程序如下:

定時器/計數器綜合應用實例講解

【例2】 脈衝寬度的檢測:要求對外部輸入的高電平脈衝持續的時間進行檢測,即檢測高電平脈衝寬度,將檢測的脈寬以微秒為單位顯示在數碼管上(假設單片機的晶振頻率為12MHz)。

脈寬檢測系統電路如圖5-8所示。

定時器/計數器綜合應用實例講解

圖5-8 脈衝寬度檢測系統電路圖

分析如下:

TMOD的GATE位為門控位,當GATE置1時,只有當對應的外部中斷引腳

定時器/計數器綜合應用實例講解

為1,且TRn置1時,定時器n才會啟動定時(n=0或1)。利用該特點,可以檢測

定時器/計數器綜合應用實例講解

口脈衝高電平持續的時間,在信號的上升沿啟動定時器,下降沿停止定時器。

在本實例中,採用T0的方式1定時功能對脈衝寬度進行測量,直接測量的最大值為65535,如果晶振為12MHz,則機器週期為1us,直接可檢測的最大脈衝寬度為65.535ms。如果需要檢測更寬的脈衝,可對定時器0溢出的次數進行計數,將溢出次數乘以65536,來計算。將外部中斷設為下降沿觸發,當檢測到下降沿信號時,將進入外部中斷處理程序,讀取定時器的數值,此數值即為脈衝信號的寬度,通過數碼管(關於數碼管顯示的知識參見8.3節)動態掃描顯示檢測的脈衝寬度值。

c源程序如下:

定時器/計數器綜合應用實例講解

【例3】 單片機時鐘:由6個數碼管的動態掃描顯示分別顯示小時、分鐘、秒,由四個按鍵對時間進行調節。數據調整採用移位的方式,根據移位鍵觸發的次數去調節不同的時間對象,加1、減1鍵分別對時間進行加1和減1調整,清零鍵將時間清零。

單片機時鐘系統電路如圖5-9所示。

分析如下:

根據題目的功能要求,系統主要包括數碼管動態掃描顯示程序、按鍵檢測調時程序、時間產生程序、系統初始化等程序模塊。

➢ 時間產生的思路 :由定時器產生50毫秒定時中斷,中斷20次為1秒,當秒加到60時,秒清零,分鐘加1,當分鐘加到60分時,分鐘清零,小時加1,當小時加到24時,小時清零。

➢ 按鍵檢測調時思路 :設置時間變量setNum對移位按鍵的次數進行記錄,默認為0,不進入調時狀態,隨著移位按鍵的觸發,setNum值加1,程序根據setNum的值分別處於調節秒、分鐘、小時狀態,當setNum加到4時回到0。

➢ 數碼管動態掃描顯示思路 :將秒、分、時時間分別拆分出個位和十位數,通過查詢數字顯示的代碼表,送至P0口,通過P2.0~P2.5動態掃描驅動對應的數碼管顯示。

定時器/計數器綜合應用實例講解

圖5-9 單片機時鐘系統電路圖

c源程序如下:

定時器/計數器綜合應用實例講解

定時器/計數器綜合應用實例講解

定時器/計數器綜合應用實例講解

定時器/計數器綜合應用實例講解

定時器/計數器綜合應用實例講解

定時器/計數器綜合應用實例講解

【例4】 單片機頻率計:將外部脈衝從P3.5口輸入,利用利用單片機的定時/計數器功能,計算脈衝頻率並將頻率值通過數碼管進行顯示。

頻率計系統電路如圖5-10所示。

分析如下:

頻率是週期的倒數,即每秒鐘產生的週期信號的個數。根據頻率的定義,充分的利用單片機的定時/計數器資源,由定時器0實現1秒定時,定時器1則對外部脈衝個數進行計數,這樣1秒鐘內所計的脈衝個數即為輸入信號的頻率。

編程說明:

在8051單片機中有兩個16位的定時/計數器,分別為T0和T1,在這裡設置T0為工作方式1定時,T1為工作方式1計數,則TMOD=0x51。

計數脈衝由單片機的P3.5口輸入,利用定時器0產生50毫秒定時,定時中斷20次即為1秒鐘,將單片機定時器1設為計數模式,由P3.5(T1)口輸入外部計數脈衝,在1秒鐘計數的脈衝信號數即為所測信號的頻率,然後由數碼管動態掃描顯示對應的頻率值。

定時器/計數器綜合應用實例講解

圖5-10 頻率及系統電路圖

c源程序如下:

定時器/計數器綜合應用實例講解

定時器/計數器綜合應用實例講解

定時器/計數器綜合應用實例講解


分享到:


相關文章: