独闷闷网

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

作者: jianhong_wu    时间: 2014-11-11 09:00
标题: 用单片机做一个时钟,定时中断的代码该怎么写?如何解决时间太快的问题?已解答。
小石—哈尔滨:
求大神指教,想弄个定时器,为什么时间跑的飞快? 以下是定时中断的代码:
  1. void time1() interrupt 3
  2. {
  3.         TH1=(65536-5000)/256;
  4.         TL1=(65536-5000)%256;
  5.         num1++;
  6.   if(num1==2)
  7.          {
  8.          num1=0;
  9.          shi=t1/10;
  10.          ge=t1%10;
  11.      t1++;
  12.                                          if(t1==100)
  13.                                         {
  14.                                          t1=0;
  15.                                          
  16.                                          qian=t2/10;
  17.                                          bai=t2%10;
  18.                       t2++;
  19.                                                           if(t2==60)
  20.                                                           {
  21.                                                                  t2=0;
  22.                                                           }
  23.                             }
  24.      }
复制代码


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

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

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

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

  7.     uiTimeCnt++; //多增加这个变量,目的就是让它产生一个时间基准
  8.     if(uiTimeCnt>const_1s)  //const_1s是一个宏定义常量,你自己慢慢调整这个数字,直到它大概产生1秒钟左右为止
  9.     {
  10.        uiTimeCnt=0; //及时清零,为下一个时基做准备
  11.              num1++;
  12.        if(num1==2)
  13.            {
  14.              num1=0;
  15.              shi=t1/10;
  16.              ge=t1%10;
  17.          t1++;
  18.                  if(t1==100)
  19.                  {
  20.                          t1=0;
  21.                                          
  22.                      qian=t2/10;
  23.                          bai=t2%10;
  24.              t2++;
  25.                          if(t2==60)
  26.                          {
  27.                                 t2=0;
  28.                          }
  29.                  }
  30.        }
  31.    }
  32. }
复制代码










欢迎光临 独闷闷网 (http://www.dumenmen.com/) Powered by Discuz! X3.2