–
第七章
应用范例
中断程式
本章介绍以 C 语言程式处理微控制器的中断事件.
第四章 4.7
中断服务函式 中说明
如何
撰写中断服务函式以及注意事项.
必须遵照下列的规则来定义中断服务函式
→ 函式的返回值型态必须是 void interrupt
→ 函式不可有参数 (argument)
→ 设定中断服务函式的中断向量 (interrupt vector)
使用 @
指定中断向量
→ 最好不要从程式的其他地方呼叫中断服务函式
→ 不要在中断服务函式内做开启本中断功能 (interrupt reentrance) 相同的中断不要重
复进入
格式
void interrupt ISR_Timer(void) @ 0x08
{
}
//
定义 : 返回值的型态, 没有参数,
设定中断向量为 0x08
C 编译器会根据中断服务函式对暂存器的需要, 在进入中断服务函式后, 将这些暂存器
的内
容储存. 等执行完中断服务函式的工作后, 再恢复先前所储存的暂存器内容. 最后回要
被中
断的地方继续执行, 同时中断功能也打开, 允许中断产生. 如果为了节省程式编码的大
小,
在
中断服务函式中也可不要保存某些暂存器,
例如 BP, MP0, MP1.
可参考第四章的 4.9 节关
于
#pragma 的说明及使用. 在中断服务函式中不要将自身的中断功能再打开, 避免重复进入
同一
个中断服务函式. 但是可以打开其他的中断功能, 只是要特别注意两个中断服务函式有无
呼叫
到相同函式的状态, 以致发生变数共用造成资料错误的风险.
7.1.
用时钟控制 LED
的亮与灭
7.1.1
目的
本范例是使用时钟控制 LED 亮与灭的时间. 亮灭的时间相同并且固定. 是以 C 语
言
撰写中断服务函式.
盛群半导体股份有限公司
HOLTEK SEMICONDUCTOR INC
C50
微电脑工具事业处部 撰 写 人 :
文 件 编 号 程式语言及应用范例(三)
版 别
1.10
日 期 2007/11/14
第