|
1)假定使用12MHz的晶振,那么,定时器的定时脉冲为晶振频率的1/12,即1MHz。例程中,定时器工作于方式1(TMOD=0X01),所以,定时器0以16位方式定时计数。TH0=-5000/256; TL0=-5000%256(这里一定是写错了,呵呵);主要是为了凑定时器的定时时间。16位定时器在计数到0xFFFF后会产生溢出中断。-5000的16进制值为0xEC78,再加上0x1388就可以使定时器溢出;而0x1388的10进制值就是5000,也就是,为T0置5000(D)的初值,那么1um×5000,即0.5ms后,定时器会产生一次溢出。
之所以用TH0=-5000/256; TL0=-5000%256;是因为方便单片机赋值的缘故。-5000/256=0xE7;-5000%256=0x78,这样,与TH0 =0XE7,TL0=0X78就一样了。
2)重写是因为:方式1工作下的定时器在溢出后自已不会重载,要软件手动重载,故重写了一遍。
PS:
这个程序是有问题的,除了那个"%"以外。在最后的{L3=!L3;L2=!L2;L1=!L1;L0=!L0;} 的花括号里要加一句"buffer[0]=0;",否则,无论你如何改动buffer[0]的判断条件,P0口这几个位的翻转时间都不会有明显的变化。 |
|