标题: 单片机Proteus仿真的时候灯为啥停不下来? [打印本页]

作者: zhangzzh    时间: 2022-3-1 19:56
标题: 单片机Proteus仿真的时候灯为啥停不下来?
void main(void)                                          
{
TMOD=0x01; //使用定时器 T0 的模式 2
EA=1; //开总中断
ET0=1; //定时器 T0 中断允许
TR0=1; //定时器 T0 开始运行
TH0=256-200; //定时器 T0 赋初值,每 200 微妙来 1 次中断请求
TL0=256-200;
speed=2; //默认流水灯流水点亮延时 20ms×3=60ms
i=0;
t=1;
while(t>i)
{
P1=0x7f; //第一个灯亮
delay(speed); //调用延时可调子程序
P1=0xbf; //第二个灯亮
delay(speed);
P1=0xdf; //第三个灯亮
delay(speed);
P1=0xef; //第四个灯亮
delay(speed);
P1=0xf7; //第五个灯亮
delay(speed);
P1=0xfb; //第六个灯亮
delay(speed);
P1=0xfd; //第七个灯亮
delay(speed);
P1=0xfe; //第八个灯亮
delay(speed);
P1=0xff;
i++;

}

}


作者: lkc8210    时间: 2022-3-1 23:37
  1. void main(void)                                          
  2. {
  3. TMOD=0x01; //使用定时器 T0 的模式 2
  4. EA=1; //开总中断
  5. ET0=1; //定时器 T0 中断允许
  6. TR0=1; //定时器 T0 开始运行
  7. TH0=256-200; //定时器 T0 赋初值,每 200 微妙来 1 次中断请求
  8. TL0=256-200;
  9. speed=2; //默认流水灯流水点亮延时 20ms×3=60ms
  10. i=0;
  11. t=1;P1=0x7f; //第一个灯亮
  12. delay(speed); //调用延时可调子程序
  13. P1=0xbf; //第二个灯亮
  14. delay(speed);
  15. P1=0xdf; //第三个灯亮
  16. delay(speed);
  17. P1=0xef; //第四个灯亮
  18. delay(speed);
  19. P1=0xf7; //第五个灯亮
  20. delay(speed);
  21. P1=0xfb; //第六个灯亮
  22. delay(speed);
  23. P1=0xfd; //第七个灯亮
  24. delay(speed);
  25. P1=0xfe; //第八个灯亮
  26. delay(speed);
  27. P1=0xff;
  28. while(1);
  29. }
复制代码



作者: zhxiufan    时间: 2022-3-2 07:16
之所以停不下来,是因为当从while(t>i)这个循环退出之后,程序就跑飞了,单片机又从“复位”状态开始运行。因此需要在程序末尾加一个while(1);来保证程序处于可控状态。
作者: zhangzzh    时间: 2022-3-2 09:47
lkc8210 发表于 2022-3-1 23:37

谢谢!
作者: zhangzzh    时间: 2022-3-2 09:47
zhxiufan 发表于 2022-3-2 07:16
之所以停不下来,是因为当从while(t>i)这个循环退出之后,程序就跑飞了,单片机又从“复位”状态开始运行 ...

谢谢!




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