打印

定时器问题请教

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

相关帖子

沙发
清风致影| | 2010-1-21 09:05 | 只看该作者
这个1.3s时间是怎么测量出来的?软件仿真还是用示波器看?
  T2CON=0X04这句你把定时器2打开了,它会一直运行的。

使用特权

评论回复
板凳
g1234567| | 2010-1-21 13:47 | 只看该作者
RCAP2H = =(65536-50000)/256;
RCAP2L = =(65536-50000)/256;
在哪啊?
你的加载(RCAP2)是 0, t=65.536*20=1.3.

使用特权

评论回复
地板
juelang|  楼主 | 2010-1-21 20:20 | 只看该作者
已经解决了
谢谢三楼
就是你说的那样
当然也谢谢二楼

使用特权

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

本版积分规则

42

主题

110

帖子

1

粉丝