前言
在程序運行中,我們有著去定時運行某一功能的需求,或許1s、或許0.5s。如果使用delay函數,必然導致會使得其他任務阻塞。使用定時器對于程序的精準計時有著很大作用,獲取去達到計時的目的,也可以使用定時器,如超聲波的測距方式。
我們生活中采用秒等單位作為生活中的基本單位,而秒的詳細定義為
銫-133原子位于海平面處于非擾動基態時兩個超精細能級間躍遷對應的輻射頻率ΔνCs以Hz(即等于s-1)為單位表達時選取固定數值9192631770倍來定義秒
其銫-133原子的輻射頻率的9192631770為1s
時鐘源
單片機內部當然不可能使用銫原子作為計時的時鐘源,通常是采用石英晶振制成的一種諧振器件,其時鐘頻率為其固有屬性,只受到自身影響。
通過與51單片機的XTL1和XTL2引腳構成一個皮爾斯振蕩器,通過內部時鐘電路的整形調整,向單片機提供穩定的時鐘頻率。若為有員晶振直接將時鐘引腳接到XTL1引腳。
常用于單片機的晶振頻率有11.0592MHz,12MHz等,為什么會有11.0592這么特殊的晶振頻率呢,這涉及到通信的問題,這里暫不引入。
12MHz表示以Hz(即等于s-1)為單位表達時選取固定數值12000000倍為1s。
當然,如果我們使用計數器模式,時鐘源便為外部引腳的電平變化,分別是連接51單片機的 P3.4 P3.5兩個口。
周期
時鐘周期
其時鐘周期是指振蕩源的周期,定義為時鐘脈沖的倒數。
外部晶振12M
則時鐘周期為 1s/12M= 1S/12 000 000 = 1/12us
外部晶振11.0592M
則時鐘周期為 1s/11.0592M = 1S/11 059 200 = 1/11.0592us
外部晶振24M
則時鐘周期為 1s/24M= 1S/24 000 000 = 1/24us
機器周期
機器周期,是指執行一單位指令所需要的時鐘周期個數。
機器周期也稱為CPU周期。
在計算機中,為了便于管理,常把一條指令的執行過程劃分為若干個階段(如取指、譯碼、執行等),每一階段完成一個基本操作。完成一個基本操作所需要的時間稱為機器周期。
一般情況下,一個機器周期由若干個時鐘周期組成。如 1T,就表示,需要 1個時鐘周期; 12T即為 12個時鐘周期。這些都只是
一單位指令的時間(如自增、自減等),多單位指令時間進行倍乘(如賦值語句需要2個機械周期,即乘以2倍),
傳統的8051單片機就是12T的,即完成1個單位指令所需時間為12個時鐘周期。 1T的完成1個單位指令所需時間則為1個機器周期。
傳統的8051使用12Mhz晶振的機器周期是,1T的要比12T的速度更快,而STC89C51RC系列支持6T模式,相當于速度翻倍。
1T 12Mhz的機器周期為1/12us
12T 12Mhz的機器周期為1us
指令周期
CPU完成一條指令的時間叫指令周期
一般一條完整的指令包括:取指周期、間址周期、執行周期、中斷周期。
寄存器
在使用定時器時,我們需要對定時器/計數器的初始化。
第一步,開中斷,對IP和IE賦值。
第二步,配置模式,對TMOD賦值。
先確定定時器還是計數器,TMOD中有相應的控制位 [ C/T ]來選擇T0或T1為定時器還是計數器.
在將控制位GATE打開,最后配置模式位M0,M1,兩位可配置4種模式。
- 定時器/計數器0模式選擇 13位定時器/計數器,兼容8048定時模式,TL0只用低5位參與分頻,TH0整個8位全用。
- 16位定時器/計數器,TL0、TH0全用
- 8位自動重裝載定時器,當溢出時將TH0存放的值自動重裝入TL0定時器0此時作為雙8位定時器/計數器。
- TL0作為一個8位定時器/計數器,通過標準定時器0的控制位控制。TH0僅作為一個 8位定時器,由定時器1的控制位控制。
定時器/計數器的核心部件是一個加法(也有減法)的計數器,其本質是對脈沖進行計數。只是計數脈沖來源不同:
如果計數脈沖來自系統時鐘,則為定時方式,此時定時器/計數器每12個時鐘得到一個計數脈沖,計數值加1;
如果計數脈沖來自單片機外部引腳(T0為P3.4,T1為P3.5),則為計數方式,每來一個脈沖加1。
由于8051單片機為8位單片機,寄存器最多為8位,計數周期太小。
通過兩個寄存器組成16位寄存器(實際還是倆),其16位最多可計時 216個機器周期,12T,12Mhz下為 65,535us。
當開啟定時器后,16位計時器每個機器周期值自加,全為1時觸發中斷,執行中斷程序,根據是否在使用定時器再將值寫入16位寄存器,學習單片機嵌入式,元器件有需求可以去唯樣商城看看,學生還有優惠哦。
初值計算
TL表示低8位。TH表示高八位。
其值為
0XFFFF -(初值(單位:s)/1s)*(晶振頻率/12)
其初值計算可用相應的工具,如STCISP就自帶計算,但我們要理解其相應的工作方式。
審核編輯 黃昊宇
-
單片機
+關注
關注
6067文章
44992瀏覽量
650657 -
定時器
+關注
關注
23文章
3298瀏覽量
119008
發布評論請先 登錄
stm32H743定時器溢出的原因?怎么解決?
MCU定時器/計數器
STM32G474HRTIM使用HRTIM配置了主定時器中斷,為啥調試的跳轉到硬件中斷,進不去定時器中斷,為什么?

詳解CKS32F107xx系列的定時器同步功能

評論