12Mhz晶振,設定時器T0,工作方式0 ,5ms定時。
1.確定定時常數:
一個機器周期為1us,設初值為X。
則:(213 - X)*10⁻⁶ = 5*103 ,213 - X = 5*103 ,X=8192-5000=3192,即0C78H 。
2.查 MCUtool ,定時初值為 0C78H,和計算的結果一致。
二進制數為:0000 00110111 1000
51匯編:
InitTimer0:
MOV TMOD,#00H
MOV TH0,#0CH
MOV TL0,#78H
SETB EA
SETB ET0
SETB TR0
RET
51C:
void InitTimer0(void)
{
TMOD = 0x00;
TH0 = 0x0C;
TL0 = 0x78;
EA = 1;
ET0 = 1;
TR0 = 1;
}
其實,上面的初值只是按高5 位不計的13位計數器計算得出的。
而定時器/計數器工作在方式0 時 ,雖也是13位計數器,但它是由TLx的低5位和THx的高8位構成。這樣,0000 00110111 1000 黑色的3位
數無效。
當TLx的低5位溢出時,向THx進位。根據13位計數器的特性,上面的初值應該為 0000001111000 ,即 0078H
|