jianhong_wu 发表于 2014-11-11 09:00:51

用单片机做一个时钟,定时中断的代码该怎么写?如何解决时间太快的问题?已解答。

小石—哈尔滨:
求大神指教,想弄个定时器,为什么时间跑的飞快? 以下是定时中断的代码:
void time1() interrupt 3
{
      TH1=(65536-5000)/256;
      TL1=(65536-5000)%256;
      num1++;
if(num1==2)
         {
         num1=0;
         shi=t1/10;
         ge=t1%10;
   t1++;
                                       if(t1==100)
                                        {
                                       t1=0;
                                       
                                       qian=t2/10;
                                       bai=t2%10;
                      t2++;
                                                          if(t2==60)
                                                          {
                                                               t2=0;
                                                          }
                            }
   }


鸿哥-深圳:
我帮你修改如下:

#define const_1s1000//你自己慢慢调整这个数字,直到它大概产生1秒钟左右为止

unsigned int uiTimeCnt=0; //多增加这个变量,目的就是让它产生一个时间基准

void time1() interrupt 3
{
      TH1=(65536-5000)/256; //不要这样写公式,涉及运算可能会耗时间,应该直接写它的结果TH1=0xec;
      TL1=(65536-5000)%256; //不要这样写公式,涉及运算可能会耗时间,应该直接写它的结果TL1=0x78;

    uiTimeCnt++; //多增加这个变量,目的就是让它产生一个时间基准
    if(uiTimeCnt>const_1s)//const_1s是一个宏定义常量,你自己慢慢调整这个数字,直到它大概产生1秒钟左右为止
    {
       uiTimeCnt=0; //及时清零,为下一个时基做准备
             num1++;
       if(num1==2)
         {
             num1=0;
             shi=t1/10;
             ge=t1%10;
         t1++;
               if(t1==100)
               {
                         t1=0;
                                       
                     qian=t2/10;
                         bai=t2%10;
             t2++;
                         if(t2==60)
                         {
                              t2=0;
                         }
               }
       }
   }
}




页: [1]
查看完整版本: 用单片机做一个时钟,定时中断的代码该怎么写?如何解决时间太快的问题?已解答。