3765|8

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51电子钟,中断时间跑慢了,没找到原因! [复制链接]

#include  
unsigned  char  LEDBuf[6] ;
unsigned  char  s=100;                 //1秒间中断次数
unsigned  char  Hour=0;
unsigned  char Second=0;
unsigned  char Minute=0;
unsigned  char LEDMAP[]={0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}   ;
Delay()                                      //延时
   {unsigned char c;
    for(c=10;c>0;c--)
        ;
   }
void  DisplayLED()                        //动态显示共阴
  {  unsigned   char  i;
         unsigned   char  pos,k;
         pos=0x20;
         for(i=0;i<6;i++)
            {  k=pos;
                   P1=~k;
                   P0=0x00;               
                   P0=LEDBuf[i];
                          Delay();
                   pos>>=1;                          //移为
         }
  }
                       

void   t0()  interrupt  1                 //T0中断
{     s--;                                                        //1秒间中断次数
        if(s==0)
        {  s=100;
                   Second++;
           if(Second==60)
             {Second=0;
                  Minute++;
                  if(Minute==60)
                    {Minute=0;
                     Hour++;
                     if(Hour==24)
                           { Hour=0; }
                    }
              }
         }
       
}
   void  main()
   {
    TMOD = 0x01;                 //方式1
    TH0 = 0xD8;                 //中断初值     0.01毫秒
    TL0 = 0xF0;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
    while(1)
     {
        LEDBuf[5]=LEDMAP[Hour/10];
        LEDBuf[4]=LEDMAP[Hour%10] ;
        LEDBuf[3]=LEDMAP[Minute/10]        ;
        LEDBuf[2]=LEDMAP[Minute%10]        ;
        LEDBuf[1]=LEDMAP[Second/10]        ;
        LEDBuf[0]=LEDMAP[Second%10];

         DisplayLED();                   //调显示
    }   
       
   }                                                          


此帖出自51单片机论坛

最新回复

这位大神说的对,没有手动重装   详情 回复 发表于 2020-3-25 12:35
点赞 关注(1)
 

回复
举报

6040

帖子

202

TA的资源

版主

沙发
 
跑慢正常,跑快跑慢都正常,这种方案不可能做出产品精度的电子钟
此帖出自51单片机论坛
 
 
 

回复

775

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
定时器中断只做一件事,就事加1,然后需要考虑你的晶振源是否精准。
此帖出自51单片机论坛
 
 
 

回复

875

帖子

1

TA的资源

纯净的硅(高级)

4
 
不管跑快还是跑慢都正常,这种东西本来就存在误差,所以,你每隔一段时间就应该做一次校准,这样才能保证误差最小,但是也不能完全消除误差
此帖出自51单片机论坛
 
 
 

回复

2774

帖子

8

TA的资源

版主

5
 
定时器本身就是依据晶振的精度来的,加上还有中断处理时间,然后经过几级倍增误差就进一步放大,这个时钟精度看看就好了。没有实用价值,要不就使用时钟芯片,要不就使用带RTC的MCU。
此帖出自51单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
建议很好,谢谢大家
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

7
 
51的方式1是16位软重装,你在中断服务里没有重装定时器,所以按65536回零计数了。
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

8
 
慢了,65536/10000=6.5倍
此帖出自51单片机论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(初级)

9
 
huo_hu 发表于 2018-4-8 22:56 慢了,65536/10000=6.5倍

这位大神说的对,没有手动重装

此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表