我寫了一些代碼,一個簡單的程序,試圖在portbbits.rb7的中斷期間遞增計數器。該方案建立沒有錯誤但警告存在:MPLAB XC8中斷程序沒有被調用IOC(圖16f877a)模擬器
::警告:(1273)全知代碼生成在免費模式下不可 的main.c:32:警告:(520)功能「_interrupt」從來都不是所謂
#define _XTAL_FREQ 8000000
#include <pic16f887.h>
#include <xc.h>
char counter = 0;
char dummy = 0;
void main(void)
{
TRISB = 0x80; //Configure PORTB pin 7 to input
TRISC = 0xOO; //Configure PORTC to output
INTCONbits.RBIF = 0; //clear interrupt on change flag
INTCONbits.GIE = 1; //enable global interrupts
INTCONbits.RBIE = 1; //enable port change interrupt
while(1)
{
PORTC = counter; //update PORTC with value of counter
}
return;
}
void Interrupt (void)
{
INTCONbits.RBIF = 0; //clear Interrupt on change flag
dummy = PORTB; //do a dummy read to clear IOC flag
counter++; //increment counter
}
在我見過的代碼片段,人們通常是在硬件上測試他們的中斷。然而,我還沒有硬件,所以試圖做一些模擬和檢查地址寄存器等東西。
我做了一個假設,我可以用軟件驗證中斷程序(參見附件屏幕抓取)。 File RegistersCounter Variable Address
因此,如果任何人都可以指出我的遺漏,或引導我在正確的方向,這將是非常感激。
你覺得'中斷'會怎麼被調用? – Olaf
我的歉意,我忘了提及我可以在模擬器中切換PORTBbits.7。因此,我期望一旦我這樣做,這個例程就會被調用。 – misterjase
嗨,Olaf,你是否提到我在中斷定義中缺少[tag:ISR]的事實?那麼事情並不是你所指的,我已經包括它,我現在有一個乾淨的構建,但我仍然無法訪問中斷服務程序。還有什麼提示? – misterjase