[英]Interrupt-On-Change during execution runtime
我正在PIC16LF1618的RC7上使用電平變化中斷。 這是我用於IOC的初始化位:
void I_O_C_Initialize (void) {
INTCONbits.IOCIF = 0;
IOCCFbits.IOCCF7 = 0;
INTCONbits.IOCIE = 1;
IOCCP = 0x80;
}
我可以使用RC7上的正觸發將PIC從掉電模式(SLEEP)中喚醒。 但是,我也希望在執行期間也可以使用此觸發器,就像RC7上的任何正觸發器都應將PIC復位並轉到main()函數的第一行一樣。
您能否讓我知道如何實現這一目標?
PS:由於重置需要盡快發生,並且對執行時間至關重要,因此我無法在主函數內添加多個if語句來檢查RC7上的正觸發。 因此,即使它正在執行延遲或功能循環,我仍在尋找一個中斷選項來復位PIC。
謝謝
在大多數8位PIC器件中,假設您使用的是XC8,則有一個定義可調用所需的匯編命令:
#define RESET() asm("reset")
因此,在您的中斷處理程序中,只需插入以下代碼行:
RESET();
該問題現已解決。 在我在運行時需要中斷變化時(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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.