首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

怎样实现中断?

怎样实现中断?

各位高手好:我刚用HCS12,碰到很多问题,比如:它是怎样实现中断的?程序怎样通过中断向量进入中断服务程序,写中断程序应该注意什么问题?能不能给出一个实例?谢谢!

中心还有一个装备精良的科研实验室。有由教授、副教授、工程师及多名博士、硕士研究生组成的实力卓著的MCU与DSP应用开发队伍
#pragma CODE_SEG NON_BANKED
interrupt 7 void RTI_int(void) {
M_StepMove(M_Dir);
Count++;
if(Count>=(M_Steps*4)){
CRGINT_RTIE=0;
Count=0;
Phase1=0;
Phase2=0;
MCtle=0;
}
CRGFLG_RTIF = 1;
}
#pragma CODE_SEG DEFAULT

这是RTI中断的中断响应函数,其他的中断响应函数也可以这样写,interrupt关键字不可以少,7是中断向量号(可以从HCS12的datasheet里查),函数名自取。
#pragma CODE_SEG NON_BANKED
#pragma CODE_SEG DEFAULT
也不可以少
记得在程序的其他地方进行相应的模块初始化及开中断即可:)
这是中断函数编写的最简单的方法
请问楼上的,您的代码中“CRGINT_RTIE=0;“是什么意思,这不是禁止中断吗?这样会不会导致中断只执行一次就不再执行了?
谢谢你们的支持!
不过我还想问个问题
在汇编中是怎样实现中断的?
是怎样进入中断的?
中心还有一个装备精良的科研实验室。有由教授、副教授、工程师及多名博士、硕士研究生组成的实力卓著的MCU与DSP应用开发队伍
汇编中实现中断的话跟51差不多,也可以用ORG伪指令的
可以看一下HCS12的书
ORG $FFFE
JMP ENTRY ;ENTRY是主程序的入口标志

ORG $XXXX ;XXXX是中断向量地址,可以从DATASHEET上查到
JMP INTXX ;INTXX是中断服务子程序名,自定义即可。
就这样把各个中断写上去就可以了
lazy crazy
#pragma CODE_SEG NON_BANKED
#pragma CODE_SEG DEFAULT
为啥要写这两句?
是防止编译器将代码放入分页FLASH中吗?
这两句就是告诉编译器把代码放在什么位置。
返回列表