找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2003|回复: 5
收起左侧

STC89单片机定时器比预定值快3倍,不知道程序那里出问题了?

[复制链接]
ID:451718 发表于 2019-5-13 22:20 | 显示全部楼层 |阅读模式
50黑币
晶振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++;
        
}


回复

使用道具 举报

ID:213173 发表于 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开始计时
}
回复

使用道具 举报

ID:123289 发表于 2019-5-14 07:59 | 显示全部楼层
注意一下,主频时钟是否设置成取晶振频率。
回复

使用道具 举报

ID:451718 发表于 2019-5-14 11:42 | 显示全部楼层
yzwzfyz 发表于 2019-5-14 07:59
注意一下,主频时钟是否设置成取晶振频率。

在哪里设置? 还请详细说来,这两天被这个定时器搞晕了。
回复

使用道具 举报

ID:451718 发表于 2019-5-14 14:19 | 显示全部楼层
问题找到了。  还真是在代码里面,看花眼了。  低级错误。  中断里面重载初值时,高位和低位搞返了。哎。
回复

使用道具 举报

ID:537018 发表于 2019-5-15 19:14 | 显示全部楼层
将主频时钟设置成晶振频率
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表