定時器學習

2021-08-13 05:12:10 字數 1460 閱讀 2602

mcs-51微控制器定時器/計數器的簡單結構圖:

8051微控制器的兩個定時器t0和t1分別都由兩個特殊功能暫存器組成;t0由特殊功能暫存器th0和tl0構成,而t1則是由th1和tl1構成;

8051微控制器設計了兩個8位的特殊功能暫存器來控制定時器/計數器的工作狀態;這兩個特殊功能暫存器分別是tmod和tcon;它倆都在特殊功能暫存器區;

定時器時間的設定

在12m的晶振下,每秒(s)可產生1m(10^6 us)個機器週期。

50ms就需要50×1000 us × 1us(1機器週期)個機器週期 = 50000。

這樣的話,50ms定時操作需要50000個機器週期,1個機器週期=1us,所以需要50000次計數操作。

定時器在方式1工作,是16位計數器,最大值為65536(2^16),也就是能進行最大65536次計數。

為了計數器定時器工作,需要預先填充定時器初值(初值=定時器計數最大計數次數 - 所需定時計數次數)。

所以需設定定時器初值15536 = 65536 -50000,即3cb0h(10進製15536轉換成16進製制數3cb0)。

所以th0=0x3c,tl0=0xb0,高位就是th0的值,低位為tl0的值。

若假設使用11.0592mhz的晶振,其他條件不變

11.0592m的晶振每秒可產生0.9216m個機器週期,50ms就需要46080個機器週期。

定時器在方式1工作,是16位計數器,最大值為65536,所以需設定初值19456 = 65536 - 46080,即4c00h。

所以th0=0x4c,tl0=0x00。

既可以設定為: th0=(65536- 所需計數次數)/256 = 初值/256; tl0=(65536 - 所需技術次數)%256 = 初值%256;

為什麼除以256,因為我們的計時器是兩個8位組成的,那麼要把那些差值裝進這兩個8位,計數從低8位開始,那麼低8位最多能裝256個機器週期,那麼256計滿了就用高8位的,就是說低8位滿一次高8位加1,那麼高8位裝多少,低8位就滿了幾次,演算法就是用差值除一下256取其整數,剩下的,就是還剩了小於256次數的就放在低8位,就是差值 的餘數。

定時器的應用

51微控制器定時/計數模版

定時50ms,採用11.0592mhz的晶振。

void main()

void t0_isr() interrupt 1

include

sbit led=p0^0;

void main()

void ex_int0() interrupt 0

/*int0中斷服務程式*/

interrupt 0:中斷子程式關鍵字標示,int0口控制的外部中斷。

定時器學習一

1 首先定時器和計數器是由同乙個模組管理的,由tmod模式暫存器的c t位控制選擇。2 時鐘週期 微控制器時序中的最小單位,計算方法是晶振時鐘源分之一。3 機器週期 微控制器完成乙個具體操作的最短時間。比如二極體小燈的亮一次所需要的時間就是乙個機器週期。它 的值等於時鐘週期 12,單位是s 4 定時...

學習 SpringBoot 定時器

在springboot啟動類上 加入註解 enablescheduling 在定時器任務的方法上加上註解 scheduled fixedrate 5000 如果該類未被spring管理 那麼需要加上 component 才能被 componentscan basepackages 掃瞄到 sched...

定時器 tick 時間輪定時器學習筆記

參考自時間輪的原理和手錶的指標計時類似,將任務結束的時間加入對應最高端的時間輪轉盤中。例如任務結束時間為4 30 20,時間輪盤有三個,分別對應,小時,分鐘和秒。開始時將任務加入4小時所在的時間輪中。四小時過去後,任務的剩餘時間時間為0 30 20就將任務加入30分所在的時間輪中。30分鐘過去後,將...