簡體   English   中英

執行運行時發生變化中斷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM