如果不愿嵌入汇编 可以用函数指针再找个无用的中断向量.
例:
/*------------------------------------
定时器T1中断服务程序
------------------------------------*/
void t1proc() interrupt TF1_VECTOR using 1
{
//T1已用于串口波特率发生器 故此中断无用 但编译也会产生reti指令
}
/*------------------------------------
定时器T2中断服务程序(5mS)
------------------------------------*/
void t2proc() interrupt TF2_VECTOR using 0
{
void (* func)(void);//申请函数指针
TF2 = 0;
//...................................
func = (void *)t1proc;//由于Keil C不能直接调用中断 但可以间接调用
func();//调用中断 执行reti指令且返回继续运行
//此后的程序和主循环中的程序级别相同 可以再响应任意中断
//但必须注意本程序有可能被二次调用(即再次中断)
//本例中只要保证二次中断时间不超过5mS即可.
}
这实际是dengm同志经常使用的"中断隐身"的标准C语言的写法.
它肯定比嵌入汇编执行速度慢 但肯定不会出错的 尤其在使用using分组时.
一般最好不要操作SP...
文章评论(0条评论)
登录后参与讨论