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

第十二章 SysTick——系統(tǒng)定時(shí)器

MCU定時(shí)器/計(jì)數(shù)器
STM32G474HRTIM使用HRTIM配置了主定時(shí)器中斷,為啥調(diào)試的跳轉(zhuǎn)到硬件中斷,進(jìn)不去定時(shí)器中斷,為什么?
stm32f103定時(shí)器2配置中斷,程序一直死循環(huán),無法進(jìn)入中斷,怎么解決?

史上最暢銷的芯片,竟然是555定時(shí)器! #科技 #電子 #555定時(shí)器 #YXC晶振 #揚(yáng)興科技
詳解CKS32F107xx系列的定時(shí)器同步功能

看門狗定時(shí)器的工作原理

定時(shí)器自動(dòng)控制開關(guān)怎么設(shè)置
請(qǐng)問studio中可以像裸機(jī)一樣調(diào)用定時(shí)器中斷嗎?
LM555-MIL定時(shí)器數(shù)據(jù)表

LM555QML定時(shí)器數(shù)據(jù)表

LM555定時(shí)器數(shù)據(jù)表

評(píng)論