RS08没有中断向量,中断标志会映射到SIP1寄存器,此外,在wait和stop模式下会唤醒CPU。需要通过查询得到对应的中断,调用对应的ISR,<br /><br />// MTIM 中断服务程序<br />inline void MTIM_isr(void)<br />{<br /> ...<br />}<br /><br />// ACMP 中断服务程序<br />inline void ACMP_isr(void)<br />{<br /> ...<br />}<br /><br />void main(void)<br />{<br /> ...<br /> <br /> asm(" wait"); // 进入wait,中断自然唤醒<br /><br /> while(1)<br /> {<br /> if (SIP1_MTIM) // 检测MTIM是否中断<br /> {<br /> MTIM_isr(); // 调用MTIM ISR<br /> continue; // 返回调度开始<br /> }<br /><br /> if (SIP1_ACMP) // 检测ACMP是否中断<br /> {<br /> ACMP_isr(); // 调用ACMP ISR<br /> continue; // 返回调度开始<br /> }<br /><br /> ...<br /><br /> asm(" wait"); // 进入wait,中断自然唤醒<br /><br /> }<br /><br />}<br /><br />调用ISR后的continue一般情况下要用,这样就可以对中断处理优先级排序。如果ISR定义在main之前,定义inline的话可以使ISR在main中内联,这样可以省一级SPC调用,那么ISR内部就可以再嵌套一次函数调用而不需要使用软件栈。<br />
|