藍橋杯學習筆記(3)定時器程式

2021-10-21 21:07:14 字數 2797 閱讀 1496

(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 委託,表示...