我在PIC16LF1618的RC7上使用了中断电平变化。下面是我用我-O-C初始化位:执行期间运行期间的电平变化中断
void I_O_C_Initialize (void) {
INTCONbits.IOCIF = 0;
IOCCFbits.IOCCF7 = 0;
INTCONbits.IOCIE = 1;
IOCCP = 0x80;
}
我能够使用上RC7一个正触发掉电模式(休眠)唤醒PIC。不过,我希望在执行期间也可以使用此触发器,就好像RC7上的任何正触发器都应重置PIC并转至main()函数的第一行。
请问如何让我知道如何做到这一点? P:由于复位需要尽可能快地发生,并且对执行时间至关重要,所以我无法在主函数中添加多个if语句来检查RC7上的正触发。因此,我正在寻找一个中断选项来重置PIC,即使它正在执行延迟或函数循环。
感谢
是的,我正在使用XC8。那么,像这样的帮助? #define RESET()asm(“reset”) 主循环内部:\t //因为我正在调用SLEEP函数,通常应禁用GIE和PEIE位。 \t INTCONbits.GIE = 1; \t INTCONbits.PEIE = 1; 睡眠功能之前:\t //禁用GIE和PEIE位以便从睡眠模式唤醒 \t INTCONbits.GIE = 0; \t INTCONbits.PEIE = 0;如果(RC7 == 1){ \t INTCONbits.GIE = 0; \t INTCONbits.PEIE = 0; IOCCF =((IOCCF)(0xFF)&IOCCF); \t RESET(); } } –
@ArunKumar它应该已经被定义,所以只需使用'RESET();'无论你在哪里需要你的逻辑 - 该逻辑是你的选择,我只是让你知道如何强制PIC的硬件复位来自代码。在你的中断中,你可以检查相关的寄存器来确定你是否刚刚从睡眠中醒来。 –
RESET()正常工作。但是,它完成了一次完全的软重启,我想避免这种情况。有没有办法从ISR中断跳转到main()中的标签? –