打印

定时器问题请教

[复制链接]
1666|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juelang|  楼主 | 2010-1-21 00:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*=====================================================================================
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();
      
    }
}

相关帖子

沙发
warden| | 2010-1-21 10:30 | 只看该作者
你用仿真还是示波器测呀,软件仿真的话晶振设置得正确哦

使用特权

评论回复
板凳
juelang|  楼主 | 2010-1-21 20:17 | 只看该作者
我用的是仿真,软件设置是正确的,我已经解决了
因为我未设置RCAPH2和RCAPL2的初始值,所以在重新装载后本来溢出一次定时50ms就变成65.536ms了
,所以会出现错误
不过谢谢你了

使用特权

评论回复
地板
juelang|  楼主 | 2010-1-21 20:18 | 只看该作者
么人回复,看来分只能给你了
呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

110

帖子

1

粉丝