关于中断代码的问题,如何解决?

想了解下面的中断代码的讲解,有些东西不是很懂

表头
单元格
void int0() interrupt 0//定义外部中断0
{
static uchar i;//声明静态变量(在跳出函数后在回来执行的时候不会丢失数值)i用于把33次高电平的持续时间存入IRdata
static bit startflag;    //开始储存脉宽标志位
if(startflag)         //开始接收脉宽检测
{
    if( (IRtime < 53) && (IRtime >= 32) ) /*判断是否是引导码,底电平9000us+高4500us这个自己可以算我以11.0592来算了NEC协议的引导码低8000-10000+高4000-5000 如果已经接收了引导码那么i不会被置0就会开始依次存入脉宽*/
    i = 0;                 //如果是引导码那么执行i=0把他存到IRdata的第一个位
    IRdata[i] = IRtime;           //以T0的溢出次数来计算脉宽,把这个时间存到数组里面到后面判断
    IRtime = 0;                 //计数清零,下一个下降沿的时候在存入脉宽
    i++;                      //计数脉宽存入的次数
    if(i == 33)                  //如果存入34次 数组的下标是从0开始i等于33表示执行了34次
    {
         IRok = 1;                 //那么表示脉宽检测完毕
        i = 0;                  //把脉宽计数清零准备下次存入
    }
}
else          
{
    IRtime = 0;                  //引导码开始进入把脉宽计数清零开始计数
    startflag = 1;             //开始处理标志位置1
}

}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7442102
  • 这篇博客你也可以参考下:电子科技大学现代电子信息系统综合实验课程单片机练习题代码
  • 除此之外, 这篇博客: 非自锁物理按键实现自锁功能控制的方法总结中的 代码示例实现方法一 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • /非自锁按键控制模式:按一下得电,再按一下失电,只要按钮被按下,状态就被改变/
    /**非自锁按键控制模式:按一下得电,再按一下失电,只要按钮被按下,状态就改变**/
    #define KEY (5)   //操作对象
    #define LED (6)  //控制对象 (板载 LED_BUILTIN 13 )
    char keyFlag = 0;//按键状态
    void setup() {
      Serial.begin(9600);
      pinMode(KEY,INPUT_PULLUP);//上拉输入模式
      pinMode(LED,OUTPUT);
    }
    void loop() {
      if(digitalRead(KEY) == 1){//注意这里是1不是0
        delay(10);//消抖处理
        if(digitalRead(KEY) == 1){//注意这里是1不是0
          keyFlag = 1 - keyFlag ;
          Serial.println(keyFlag);
          while(digitalRead(KEY));//等待按键被释放
        }
      }
      if(keyFlag == 1){
        digitalWrite(LED,HIGH);//这里可以填写其他控制代码
      }else{
        digitalWrite(LED,LOW);//这里可以填写其他控制代码
      }
    }
    
    
    

    解析;当按键没有被按下的时候,led初始状态是0,低电平,按键检测一直会停留在while(digitalRead(KEY));这里检测,当按键被按下时,就跳出来了,led的状态就改变,如果需要再次改变led灯的状态时,需要再次进入到第一个if条件成立的语句里才行,想要条件成立,必须释放按键才行。

  • 您还可以看一下 李宁老师的征服微信小程序视频教程课程中的 编写猜拳游戏的业务逻辑代码小节, 巩固相关知识点

注释这么详细了,还有哪里不懂?