标题: delay(0)对单片机定时中断有影响吗 [打印本页]

作者: learn_c51    时间: 2017-11-7 16:06
标题: delay(0)对单片机定时中断有影响吗
当我把delay(5000)改成delay(10000)后,数字管上数字滚动延时时间变很长也不规律

单片机源程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar temp,aa,num;
  6. sbit duan=P2^2;
  7. sbit wei=P2^3;
  8. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  9. void delay(uint t);
  10. void InitTimer();
  11. void main()
  12. {
  13.         num=0;
  14.         InitTimer();
  15.         temp=0xfe;
  16.         P1=temp;
  17.         duan=1;
  18.         P0=table[0];
  19.         duan=0;
  20.         wei=1;
  21.         P0=0x00;
  22.         wei=0;
  23.         while(1)
  24.         {
  25.                 delay(5000);
  26.                 temp=_crol_(temp,1);
  27.                 P1=temp;
  28.                 if(aa==40)
  29.                 {
  30.                         aa=0;
  31.                         num++;
  32.                         if(num==16)
  33.                                 num=0;
  34.                         duan=1;
  35.                         P0=table[num];
  36.                         duan=0;
  37.                         
  38.                 }
  39.                
  40.         }
  41. }
  42. void delay(uint t)
  43. {
  44.         while(t--);
  45. }
  46. void InitTimer()
  47. {
  48.     TMOD = 0x01;
  49.     TH0 = (65536-50000)/256;
  50.     TL0 = (65536-50000)%256;
  51.     EA = 1;
  52.     ET0 = 1;
  53.     TR0 = 1;
  54. }
  55. void Timer() interrupt 1
  56. {
  57.    TH0=(65536-50000)/256;
  58.    TL0=(65536-50000)%256;
  59.    aa++;
  60. }
复制代码



作者: bryce1111    时间: 2017-11-7 17:14
肯定有啊
作者: prostone    时间: 2017-11-7 20:04
1.)一般来说说既然已用中断来计时,为何还要另外调用延迟程序???除非延迟程序时间太短!!
2.)假设中断设初始定成2mSec.而且中断程序中运算后利用标号来表示各时间段到达(timeout);
eg.
2*25=50mS//给按键去抖用标号
2*250=500mS//给秒点用标号
...
3.)主程序中只要判断所须标号,是否为真再清除即可.
作者: slzqm    时间: 2017-11-7 20:17
是有影响的吧
作者: slzqm    时间: 2017-11-7 20:17
应该有的吧,存在即合理
作者: 小润龙    时间: 2017-11-7 21:30
调用延时函数的话是根据单片机内部处理指令的时间来计算的,本来就不会很准确,只是一个大致的时间,即处理一条指令说用的时间
延时函数采用循环语句,单片机处理一条指令的时间乘以循环的次数就是你要求的时间,而单片机处理一条指令的时间不是一个准确的时间,不精确,只是一个大致的时间,不知道您能明白吗?如果还有问题请私聊我,




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