目前常用的單片機中往往都配備了定時器/計數器。在AT89S52芯片內包含有三個16位的定時器/計數器:T0、T1和T2,其核心是加1計數器。我們主要要求掌握T0和T1的結構和功能。學習中要注意從電路結構上來理解功能的實現。定時器/計數器方式寄存器TMOD和定時器/計數器控制寄存器TCON是用以設定定時器/計數器的工作方式、定時或計數功能,控制啟動或停止以及產生溢出中斷的重要模塊,應該對這兩個寄存器中的逐位的定義和功能進行學習和掌握。
圖1:T0和T1的基本構成
一、定時器/計數器的功能
AT89S52單片機定時器/計數器的基本部件是兩個8位的計數器(T1計數器分為高8位TH1和低8位TL1,T0計數器的高8位是TH0,低8位是TL0)。如圖1所示。
定時器/計數器的核心是一個加1計數器,在作定時器使用時,它對機器周期進行計數,每過一個機器周期計數器加1,直到計數器計滿溢出。
當它用作對外部事件計數時,計數器接相應的外部輸入引腳T0(P3.4)或T1(P3.5)并在每個機器周期的S5P2時采樣,當采樣到1—0的負跳變時,計數器加1。二、定時器/計數器的結構
AT89S52單片機內部的定時/計數器的結構如圖2所示。定時器T0由特殊功能寄存器TL0(低8位)和TH0(高8位)構成,定時器T1由特殊功能寄存器TL1(低8位)和TH1(高8位)構成。每個寄存器均可單獨訪問。
圖2 定時器/計數器的內部結構1、定時/計數的基本概念定時和計數是日常生活和生產中最常見和最普遍的問題。
定時器和計數器功能基本上都是使用相同的邏輯實現的,而且這兩個功能都包含輸入的計數信號,本質上都是對脈沖計數。計數器用來計數并指示在任意間隔內輸入信號(事件)的個數,而定時器則對規定間隔內輸入的信號個數進行計數,用來指示經歷的時間。
在單片機中,定時/計數器作定時功能用時,對機器周期計數(由單片機的晶體振蕩器經過12分頻后得到),因每次計數的周期是固定的,所以根據它計數的多少就可以很方便的計算出它計數的時間。如圖3所示。
圖3 計數與定時
2、溢出的基本概念從一個生活中的例程看起:一個水盆在水龍頭下,水龍頭沒關緊,水一滴滴地滴入盆中。盆的容量是有限的,水滴持續落下,盆中的水持續變滿,最終有一滴水使得盆中的水滿了,這就是“溢出”。如果一個空的盆要1萬滴水滴進去才會滿,開始滴水之前可以先放入一部分水,叫做計數初值。如果現在要計數9000,那么可以先放入1000滴水,也就是計數初值為1000,再計數9000就可以溢出產生中斷。
單片機中通常采用計數初值的辦法,如果每個脈沖是1微秒,則計滿256個脈沖需時256微秒,如果現在要定時100微妙,只要在計數器里面先放進156,然后計數100就可以就可以溢出產生中斷了。如圖4所示。
圖4 定時器/計數器的溢出
3、定時/計數的主要方法
實現定時或計數,主要有三種方法。
(1)軟件延時
軟件延時利用微處理器執行一個延時程序段實現。因為微處理器執行每條指令都需要一定時間,通過指令的循環實現軟件延時。軟件定時具有不使用硬件的特點,但卻占用了大量CPU時間。另外,軟件定時精度不高,在不同系統時鐘頻率下,執行一條指令的時間不同,同一個軟件延時程序的定時時間也會不同。
(2)硬件定時
硬件定時采用數字電路中的分頻器將系統時鐘進行適當分頻產生需要的定時信號,也可以采用單穩電路或簡易定時電路(如常用的555定時器)由外接RC(電阻、電容)電路控制定時時間。這樣的定時電路較簡單,利用不同分頻倍數或改變電阻阻值、電容容值使定時時間在一定范圍內改變。
(3)可編程的硬件定時
可編程定時器/計數器最大特點是可以通過軟件編程來實現定時時間的改變,通過中斷或查詢方法來完成定時功能或計數功能。這種電路不僅定時值和定時范圍可用程序改變,而且具有多種工作方式,可以輸出多種控制信號,具備較強的功能。
原文標題:單片機定時器/計數器基本原理
文章出處:【微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
-
單片機
+關注
關注
6039文章
44579瀏覽量
636458 -
寄存器
+關注
關注
31文章
5357瀏覽量
120668 -
計數器
+關注
關注
32文章
2256瀏覽量
94706
原文標題:單片機定時器/計數器基本原理
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論