LeoringYang 发表于 2026-2-28 16:10:56

STC单片机开发之面向对象开发_04_第一个STC中断程序

继上节开发STC程序,本节介绍如何写中断程序。在创建项目后,sdk会默认设置计数器0作为计时器。本节就拿计数器0中断作为示例,详细介绍如何开发中断。

通过查STC32G12K手册,计数器0的中断向量地址为0x000B。sdk以中断向量n作为索引,INT0中断的向量为0,计数器0中断的向量为1,其他中断依次类推。比如INT1中断向量为2,计数器1中断向量为3。
打开项目中程序InterEnter,其代码如下:

package yxra.interrupt;

/**
* 中断入口
*/
public class InterEnter{
    //进入中断程序
    private static void enterInterrupt(){
      protectScence();
      handleInterrupt();
      restoreScence();
    }
   
    //中断程序处理
    private static void handleInterrupt(){
      //获取中断号
      int interNo=getInterruptNo();
      
      //中断事件处理
      switch(interNo){
            case 0x01:
                Timer.setTimerDida();
                InterTimer.handleTimerEvent();
      }
    }
   
   
    //中断程序处理
    private static int getInterruptNo(){
      return 0;
    }
   
    //保护现场
    private static void protectScence(){
      
    }
   
    //恢复现场
    private static void restoreScence(){
      
    }
}

下面对各方法予以说明:
enterInterrupt():进入中断处理程序,这个方法先保护现场,调用中断,恢复现场

handleInterrupt():为处理中断的具体实现。
getInterruptNo():获取当前中断号,当发生中断时,由系统将中断号写入,用此方法获取。

protectScence():保护现场,主要是保护相关的寄存器

restoreScence():恢复现场,按保护的反顺序弹出寄存器值

对于初学者以上代码保持不变,直接调整计数器0的中断处理程序InterTimer.handleTimerEvent();
打开InterTimer程序,会发现handleTimerEvent()方法中无代码,即计数器0中断啥也没做。在这个方法中添加相应的业务逻辑即可。
比如设置P0=0xFF,代码如下:
GPIO.setGPIOValue(0,0xFF);
页: [1]
查看完整版本: STC单片机开发之面向对象开发_04_第一个STC中断程序