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
|