找回密码
 立即注册
查看: 45|回复: 0

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2026-03-07 11:12:15
已绑定手机

12

主题

13

回帖

2604

积分

金牌会员

积分
2604
发表于 7 天前 | 显示全部楼层 |阅读模式
继上节开发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);
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-7 15:31 , Processed in 0.098687 second(s), 42 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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