(1)定時器/計數器工作模式暫存器名稱
位址b7
b6b5
b4b3
b2b1
b0tmod
89hgate
c/tm1
m0gate
c/tm1
m0b7~b5為定時器t1位址位
b4~b0為定時器t0位址位
gate:置1時只有在int0引腳置1和tr0置1時,定時器/計算器0才開啟;或者在int1引腳置1和tr1置1時,定時器/計算器1才開啟
c/t:置1做計算器,置0做定時器
m1 m0
工作方式
功能說明
0 0方式0
16位自動重灌初值的定時器/計算器
0 1方式1
16位定時器/計算器
1 0方式2
8位自動重灌初值的定時器/計算器
1 1方式3
t0被分為兩個8位的定時器/計算器,t1停止計數
主要掌握方式0就行,想要深入了解可以檢視stc15系列微控制器手冊
定時器中斷會用到的暫存器簡單介紹到這,下面分析程式。
#include
unsigned
char ucsec;
void
cls_buzz()
//關閉蜂鳴器
void
disp_led
(unsigned
char ucled)
//led亮滅
void
timer0init
(void
)//1毫秒@12.000mhz
//定時器0中斷服務函式
void
timer0
() interrupt 1
}void
main()
程式僅供參考!!!
auxr |
=0x80
;//定時器時鐘1t模式
分析auxr=auxr | 0x80假如auxr=0000 0000 ;0000 0000 | 1000 0000=1000 0000
也就是說這條語句把auxr的最高位置1,即t0x12=1;
重點!!!
雖然定時器/計算器程式在stc-isp中可以直接呼叫,但是理解每條函式的意義。
tmod &
=0xf0
;//設定定時器模式
假如tmod=1111 1111 ;1111 1111&1111 0000=1111 0000;
無論tmod是什麼,tmod &= 0xf0可以把低四位置0,可以開啟定時器0工作在方式0模式,也就是16位自動重灌模式。
tl0 =
0x20
;//設定定時初值
th0 =
0xd1
;//設定定時初值
這裡要解釋下機器週期,振盪週期(時鐘週期),傳統8051系列微控制器乙個機器週期等於12個時鐘週期,這就是所謂的12t模式,為了追求微控制器的執行速度,廠家生產出了6t,1t模式,在1t模式下,機器週期等於時鐘週期。「8051系列微控制器乙個機器週期等於12個時鐘週期」這句話不是絕對的,只是12t模式的一種說法,外界晶振為12mhz,在1t模式下振盪週期(時鐘週期)是1/12us,此時機器週期是1/12us,在12t模式下振盪週期(時鐘週期)是1/12us,此時機器週期是1us。16位計算器可以記2^16=65536個數,就是1~65566;在1t模式下12mhz的乙個機器週期就是1/12us,要計時1ms要計數12000次,這不難理解。注意,當計算器溢位時才會向cpu發出中斷,所以要從64535開始計數,計數12000次剛好溢位。現在正式分析語句,th0是定時初值的高八位,tl0是定時初值的低八位,那什麼是高八位呢?舉個簡單的例子,1111 1111 1010 1000 它的高八位是1111 1111 低八位是1010 1000。這兩條語句這麼寫會清楚一些
//th0=(65536-1000)/256;
//tl0=(65536-1000)%256;
(65536-12000)/256=209;換成16進製制是0xd1
(65536-12000)%256=32;換成16進製制是0x20
static
unsigned
int uims;
//靜態區域性變數
uims++
;
不加static時uims每加一后會重新賦值,ucms一直時1;靜態變數不會重新賦值,ucms加1後變成1,再次執行ucms++,ucms就變成2。 藍橋杯微控制器之定時器
ie 中斷允許暫存器 中斷函式示例 時鐘週期 時鐘頻率的倒數 分頻 晶振的的頻率會變小,時鐘週期變大 詳情見超聲波模組 利用12分頻 即12t模式 更方便的計算聲波的傳輸距離。內部中斷 微控制器內部達到某種情況就觸發中斷 定時 首先是乙個平時我們寫的函式名再加上乙個中斷號 void timer0 i...
定時器 tick 時間輪定時器學習筆記
參考自時間輪的原理和手錶的指標計時類似,將任務結束的時間加入對應最高端的時間輪轉盤中。例如任務結束時間為4 30 20,時間輪盤有三個,分別對應,小時,分鐘和秒。開始時將任務加入4小時所在的時間輪中。四小時過去後,任務的剩餘時間時間為0 30 20就將任務加入30分所在的時間輪中。30分鐘過去後,將...
多執行緒學習筆記3 定時器 zt
timer類 設定乙個定時器,定時執行使用者指定的函式。定時器啟動後,系統將自動建立乙個新的執行緒,執行使用者指定的函式。初始化乙個timer物件 timer timer new timer timerdelegate,s,1000,1000 第乙個引數 指定了timercallback 委託,表示...