我在PIC16LF1618的RC7上使用电平变化中断。这是我用于I-O-C的初始化位:
void I_O_C_Initialize (void) {
INTCONbits.IOCIF = 0;
IOCCFbits.IOCCF7 = 0;
INTCONbits.IOCIE = 1;
IOCCP = 0x80;
}
我可以使用RC7上的正触发将PIC从掉电模式(SLEEP)唤醒。但是,我想在执行期间也可以使用此触发器,就好像RC7上的任何正触发器应该重置PIC并转到main()函数的第一行。
请告诉我如何实现这个目标?
P.S:由于复位需要尽快发生并且对执行时间至关重要,我无法在main函数中添加多个if语句来检查RC7上的正触发。因此,我正在寻找一个中断选项来复位PIC,即使它正在执行延迟或功能循环。
由于
答案 0 :(得分:1)
在大多数8位PIC器件中,假设您使用XC8,有一个定义可以调用所需的汇编命令:
#define RESET() asm("reset")
因此,在你的中断处理程序中,只需插入以下代码行:
RESET();
答案 1 :(得分:0)
此问题现已得到解决。在运行期间需要中断更改(IOC)并使用以下功能时启用GIE位后,IOC在运行时和掉电模式(SLEEP)期间工作。
void interrupt ISR (void);
void interrupt ISR (void) {
if (RC7==1) {
asm("pagesel foobar");
asm("goto foobar");
}
else
return;
}
asm("foobar:");
while (1) {
IOCCFbits.IOCCF7 = 0;
INTCONbits.GIE = 1;
. //Do the calculations here
. //Here if any Interrupt On Change happens for RC7,
. //the ISR routine would stop all calculations and
. //would return to the start of the loop without
. //resetting any of the registers.
INTCONbits.GIE = 0;
IOCCFbits.IOCCF7 = 0;
SLEEP();
}