标题: STC89单片机定时器比预定值快3倍,不知道程序那里出问题了? [打印本页]

作者: robinsonlin    时间: 2019-5-13 22:20
标题: STC89单片机定时器比预定值快3倍,不知道程序那里出问题了?
晶振12M没有问题, 硬件电路一切正常。  val就是自加变量,用来在LED上显示读秒的。   主要是为了调定时器,结果就是调不准。时间读数快出将近3倍。 不知道哪里出问题了。  请职业高手赐教。

void ConfigTimer1(void)  //5ms定时
{
        AUXR &= 0xBF;                //定时器时钟12T模式
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x10;                //设置定时器模式
        TL1 = 0xB0;                //设置定时初值
        TH1 = 0x3c;                //设置定时初值
        TF1 = 0;                //清除TF1标志
        TR1 = 1;                //定时器1开始计时
}

void main()
{
   EA=1;
        // ET0=1;
         ET1=1;
         k1=1;
         k2=0;
  // ConfigTimer0();           //10ms
         ConfigTimer1();           //50ms
         while(1)
         {
                 LedRefresh();                 
                 LedBuffUpdate();
         }
}
void InterruptTimer1() interrupt 3
{
TH1 = 0xB0; //加载 T1 重载值
TL1 = 0x3C;
if(tmr1s>=20)
{
        val++;
        if(val>=60)
        {
                val=0;
                k1=~k1;
        }
        tmr1s=0;
}
else tmr1s++;
        
}



作者: wulin    时间: 2019-5-14 06:53
就按普通51的模式设置定时器,下载时不要勾选“使能6T模式”
void ConfigTimer1(void)  //50毫秒@12.000MHz
{
        TMOD= 0x10;                //设置定时器模式
        TL1 = 0xB0;                //设置定时初值
        TH1 = 0x3C;                //设置定时初值
        TF1 = 0;                        //清除TF1标志
        TR1 = 1;                        //定时器1开始计时
}
作者: yzwzfyz    时间: 2019-5-14 07:59
注意一下,主频时钟是否设置成取晶振频率。
作者: robinsonlin    时间: 2019-5-14 11:42
yzwzfyz 发表于 2019-5-14 07:59
注意一下,主频时钟是否设置成取晶振频率。

在哪里设置? 还请详细说来,这两天被这个定时器搞晕了。
作者: robinsonlin    时间: 2019-5-14 14:19
问题找到了。  还真是在代码里面,看花眼了。  低级错误。  中断里面重载初值时,高位和低位搞返了。哎。
作者: 酸葡萄    时间: 2019-5-15 19:14
将主频时钟设置成晶振频率




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1