| 
 
| /*===================================================================================== T2定时1s,16位自动重载,T2有两种工作模式,定时/计数器和波特率发生器方式
 下面的定时有很大的问题,当TH2=(65536-5000)/256;
 TL2=(65536-5000)%256;
 而下面设置成count=20时,它却定时在大约1.3s,按计算来说,它应该是定时0.1s,当改成
 TH2=0X3C;TL2=0XB0;时,也就是用16位定时器设置初值为50ms时,
 它定时大约在13.6s,更差劲的是当我把TH2=0X3C;TL2=0XB0;改成
 TH0=0X3C;TL0=0XB0;其他的都不变,它居然也能运行,而且定时还是13.6s
 麻烦高手帮我看下这是什么问题,
 我用时STC89C52单片机,在keil中选的是Ateml 89C52单片机
 
 ====================================================================================*/
 #include<REG52.H>
 /*========================T2定时器定时1s==============*/
 void T2_1s()
 {
 unsigned int count=0;
 T2CON=0X04;//选择自动重装载,并置TR2=1;
 /*====50ms 初始值=====*/
 TH2=(65536-50000)/256;
 TL2=(65536-50000)%256;
 while(1)
 {
 if(TF2==1)//判断T2的溢出标志位是否为1,即是否计数满
 {
 count++;
 if(count==20)//50ms*20==1s
 goto loop;
 TF2=0;//T2的溢出标志位置为0,即重新开始计数
 }
 }
 loop :  ;
 }
 
 void main(void)
 {
 
 while(1)
 {
 
 P1=0x00;
 T2_1s();
 
 P1=0xf0;
 T2_1s();
 
 }
 }
 | 
 |