关于中断的问题(我是菜鸟)

[复制链接]
 楼主| 大碴子味 发表于 2020-4-22 07:20 | 显示全部楼层 |阅读模式
本帖最后由 yueguang3048 于 2020-4-22 09:51 编辑
  1. #include <reg51.h>
  2. sbit LED=P3^7;
  3. sbit LED1=P3^6;
  4. unsigned char second;
  5. unsigned char tcount ,t,a;
  6. void delay(unsigned int c);
  7. void time_int();
  8. void main()
  9. {
  10.    int d;
  11.    time_int();
  12.    a=1;
  13.    delay(100);
  14.    for(d=0;d<3;d++)
  15.    {
  16.      LED1=0;
  17.      LED=0;
  18.      delay(100);
  19.      LED1=1;
  20.      LED=1;
  21.      delay(100);
  22.    }
  23.   while(1);
  24. }
  25. void t0() interrupt 1 using 0
  26. {
  27.   int i;
  28.   TH0=0Xd8;                //重装50ms初值,TH0=(65536-50000)/256
  29.   TL0=0Xf0;                //              TL0=(65536-50000)/256
  30.   if(a==1)
  31.   {
  32.    while(1)
  33.   {
  34.    for(i=0;i<3;i++)
  35.    {
  36.    LED=0;
  37.    delay(1000);  
  38.    LED=1;
  39.    delay(1000);
  40.    }
  41.   a=0; break;
  42.   }
  43.    if(a==0)
  44. { while(1) //本段程序功能为显示
  45.   {
  46.   
  47.          LED1=0;
  48.          delay(1000);
  49.      LED1=1;
  50.          delay(1000);
  51.          break;
  52. }
  53. }
  54.         
  55. }


  56. }
  57. void time_int()
  58. {


  59.          TMOD=0x01;        //定时器0工作在工作方式1下
  60.         TH0=0Xd8;        //设置50ms定时时计数器的初值,TH0=(65536-50000)/256
  61.         TL0=0Xf0;        //                            TL0=(65536-50000)/256
  62.         EA=1;                //CPU开总中断
  63.         ET0=1;                //T0开中断
  64.         TR0=1;                //启动T0
  65.           tcount=0;
  66.           second=0;
  67.         t=0;
  68. }
  69. void delay(unsigned int c)
  70. {
  71. unsigned int x,y;
  72. for(x=c;x>0;x--)
  73.    for(y=110;y>0;y--);
  74. }

  75. 这是一个中断的实验
  76. 当检测到a==1的时候,进入中断,当执行完中断的函数后,为何不能
  77. 执行主函数的

  78. for(d=0;d<3;d++)
  79.    {
  80.      LED1=0;
  81.      LED=0;
  82.      delay(100);
  83.      LED1=1;
  84.      LED=1;
  85.      delay(100);
  86.    }
代码,请使用“添加代码文字”!

我是菜鸟,求大神解答下,谢谢!!!
yueguang3048 发表于 2020-4-22 09:55 | 显示全部楼层
因为程序是顺序执行的,所以你说的那些代码只能在上电开始执行一次,后面就一直卡在main函数的while(1);这里;中断触发后,处理一下中断,然后再回while(1);这里。
21iscolor 发表于 2020-4-22 20:38 | 显示全部楼层
程勋逻辑设计有问题,应该在while前开中断,while里等待中断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

372

主题

372

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部