Board logo

标题: 怎样实现中断? [打印本页]

作者: lingdukongjian    时间: 2006-3-19 19:53     标题: 怎样实现中断?

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


作者: fireworks    时间: 2006-3-19 22:48

#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
也不可以少
记得在程序的其他地方进行相应的模块初始化及开中断即可:)
这是中断函数编写的最简单的方法
作者: wanwei117    时间: 2006-3-20 09:33

请问楼上的,您的代码中“CRGINT_RTIE=0;“是什么意思,这不是禁止中断吗?这样会不会导致中断只执行一次就不再执行了?

作者: lingdukongjian    时间: 2006-3-20 14:14

谢谢你们的支持!
不过我还想问个问题
在汇编中是怎样实现中断的?
是怎样进入中断的?
作者: fireworks    时间: 2006-3-21 10:55

汇编中实现中断的话跟51差不多,也可以用ORG伪指令的
可以看一下HCS12的书
作者: jiazhenhua    时间: 2006-4-6 01:03

ORG $FFFE
JMP ENTRY ;ENTRY是主程序的入口标志

ORG $XXXX ;XXXX是中断向量地址,可以从DATASHEET上查到
JMP INTXX ;INTXX是中断服务子程序名,自定义即可。
就这样把各个中断写上去就可以了
作者: kbfz2008    时间: 2006-4-6 13:36

#pragma CODE_SEG NON_BANKED
#pragma CODE_SEG DEFAULT
为啥要写这两句?
是防止编译器将代码放入分页FLASH中吗?
作者: seuafu2005    时间: 2006-4-6 15:52

这两句就是告诉编译器把代码放在什么位置。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0