51微控制器(十八) 定時器0例項測試

2021-10-03 01:32:35 字數 1156 閱讀 6974

在本文中,我們對51微控制器的定時器0進行測試。用定時器0來定時,並用來控制led閃爍。定時器0的初始化**如下所示。

void init_t0(void)

在這個實驗中,採用定時器0的方式1進行定時。方式1為16位定時器方式。th0和tl0的初始值都設定為0x00,則定時器0的計數為由0計數到65535之後溢位,及需要65536個機器週期溢位。採用12mhz的外部晶振,機器週期為1us。則定時器0的溢位週期為65.536ms。每兩個週期led燈閃一次,因此,led的閃爍頻率為1/(2*65.536ms)≈7.6hz。

在程式中,tmod|= 0x01;這個語句對tmod暫存器進行賦值。tmod|= 0x01;這一句是tmod= tmod| 0x01;的簡寫。「|」為按位或的運算。0x01的二進位制值為00000001,它與tmod進行按位或的運算結果為tmod的bit0位強制置為1,其它位保持不變。

ea=1;          

et0=1;         

tr0=1;

這三句分別對ie暫存器的ea位和et0位以及tcon暫存器的tr0位進行賦值。可以看出對tmod和ie、tcon的賦值方式是不一樣的。原因在於tmod這個暫存器不能進行位定址,賦值時必須對整個暫存器進行賦值。而ie和tcon這兩個暫存器是可以進行位定址的,程式設計時可以對其中的位直接進行賦值。

在這個程式中,以中斷方式處理定時器0的溢位事件,中斷處理**如下所示。在中斷處理函式中將led的狀態改變。

void t0_isr(void) interrupt 1 using 1

中斷服務程式的標準格式為:

void 函式名() interrupt 中斷號 using 工作組

中斷函式不能返回任何值,所以最前面用void;後邊緊跟著函式名,名字可以由使用者自己決定,但不要違反c語言的標準;中斷函式不帶任何引數,所以函式名後邊的括號內為空或者寫void;中斷號是指中斷源的編號,這個編號是編譯器識別不同中斷的唯一標識,因此在寫中斷服務程式時務必要寫正確;「using 工作組」是指這個中斷函式使用微控制器記憶體中4組工作暫存器中的哪一組,編譯器在編譯程式時會自動分配工作組,因此最後這句通常可以省略不寫,比如源程式可以寫成:void t0_isr(void) interrupt 1。

將程式燒寫到微控制器中,並執行,可以看到led連續閃爍。

51微控制器 定時器

定時 計數器的結構和工作原理 定時 計數器的實質是加1計數器 16位 由高8位和低8位兩個暫存器組成。80c51 微控制器定時 計數器的工作是由兩個特殊功能暫存器控制的。tmod是定時 計數器的工 作方式暫存器,確定工作方式和功能,低四位用於t0,高四位用於t1。t con是控制寄 存器,控制t0和...

51微控制器 定時器

標準的51微控制器內部有t0和t1兩個定時器。定時器的計數值儲存在暫存器中。th0 tl0用於t0,th1 tl1用於t1.定時器儲存暫存器 名稱描述 sfr位址 復位值th0 t0高位元組 0x8c 0x00 tl0t0低位元組 0x8a 0x00 th1t1高位元組 0x8d 0x00 tl1t...

51微控制器定時器 彙編

定時器控制流水燈的速度,但流水燈到邊緣的時候,自動調整方向,先反方向繼續流動 使用的是 定時器0 org 0000h ljmp mian org 000bh ljmp t0 break org 0200h init mov tmod,01h 定時器0為方式1 定時器0計時100us mov tl0,...