/*=====================================================================================
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();
}
} |
|