89c52的定时器0在开启后无法手工赋初值吗?
桐桐 2011-12-17 12:38:00 问题描述:
因为需要用定时器来计数(非计数器),流程就是:对定时器赋初值→开启定时器→读取TH0和TL0的值→再次对定时器赋初值→再次开启定时器→再次读取TH0和TL0的值。
而现在的问题是,在第二次对定时器赋初值打开定时器(TR0=1)后,读取的定时器值为71,显然和赋的初值65525相差巨大,如果在第二次不开启定时器,则读取的值是正确的,请问这是为何?是否定时器0不支持第二次的手工赋初值,必须在中断里面赋呢?
代码如下:
//变量定义部分
unsigned int i;
//main函数部分
TH0=0xFF;
TL0=0xF6;
TR0=1;//开启定时器
i=TL0;
i+=TH0<<8;
printf("1st is %u\n",i);//这里串行输出的值为65529
DelayMs(200);
TR0=0;
TH0=0xFF;
TL0=0xF5;
TR0=1;//停了后不能开?
i=TL0;
i+=TH0<<8;
printf("2ed is %u\n",i);//按照逻辑应该输出65528,但是实际上输出的值为71或者75
while(1);