找回密码
 立即注册

QQ登录

只需一步,快速开始

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

delay(0)对单片机定时中断有影响吗

[复制链接]
ID:246959 发表于 2017-11-7 16:06 | 显示全部楼层 |阅读模式
当我把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. }
复制代码


回复

使用道具 举报

ID:244971 发表于 2017-11-7 20:04 | 显示全部楼层
1.)一般来说说既然已用中断来计时,为何还要另外调用延迟程序???除非延迟程序时间太短!!
2.)假设中断设初始定成2mSec.而且中断程序中运算后利用标号来表示各时间段到达(timeout);
eg.
2*25=50mS//给按键去抖用标号
2*250=500mS//给秒点用标号
...
3.)主程序中只要判断所须标号,是否为真再清除即可.

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:186510 发表于 2017-11-7 21:30 | 显示全部楼层
调用延时函数的话是根据单片机内部处理指令的时间来计算的,本来就不会很准确,只是一个大致的时间,即处理一条指令说用的时间
延时函数采用循环语句,单片机处理一条指令的时间乘以循环的次数就是你要求的时间,而单片机处理一条指令的时间不是一个准确的时间,不精确,只是一个大致的时间,不知道您能明白吗?如果还有问题请私聊我,

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:247000 发表于 2017-11-7 17:14 | 显示全部楼层
肯定有啊
回复

使用道具 举报

ID:247065 发表于 2017-11-7 20:17 | 显示全部楼层
是有影响的吧
回复

使用道具 举报

ID:247065 发表于 2017-11-7 20:17 | 显示全部楼层
应该有的吧,存在即合理
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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