pin18f4520 TIMER0中斷與外部RB0中斷

作者 henry2777 於 2018年09月06日 17:53:14
請問兩種不同中斷方式要用什麼方法結合??
還是我的概念錯誤,才無法使用
目前就只能使用一個中斷無法兩個同時使用
內容大概是TIMER中斷執行LED,途中可以使用外部按鈕中斷進行我要的閃爍方式



// --------------------------- 計數中斷
void low_interrupt (void)
{
_asm GOTO timer0_isr _endasm
}
#pragma code

#pragma interrupt timer0_isr

// --------------------------- 按鈕中斷
void high_interrupt (void)
{
_asm GOTO button_isr _endasm
}
#pragma code

#pragma interrupt button_isr


void main(void)
{
PORTD = 0x00;
TRISD = 0;
T0CON = 0b10000101; // 計數器暫存器
INTCON = 0b11110000;
TRISBbits.TRISB0 = 1;
INTCON2bits.INTEDG0 = 1;
WriteTimer0(TMR0_VAL);
INTCONbits.TMR0IF = 0;
INTCONbits.INT0IF = 0;
RCONbits.IPEN = 1;

INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;

while(1);
}

void timer0_isr(void)
{
INTCONbits.TMR0IF = 0;
WriteTimer0(TMR0_VAL);
PORTD = LED_mode[LED_status];
if (LED_count < 4)
{
time_increase++;
if (time_increase == 4)
{
time_increase = 0;
LED_status++;
LED_count++;
}
}
else
{
time_increase++;
if (time_increase == 2)
{
time_increase = 0;
LED_status--;
LED_count++;
}
}
if (LED_count == 9)
{
LED_count = 0;
LED_status = 0;
}
}

void button_isr(void)
{
// INTCONbits.INT0IF = 0;
// if (PORTBbits.RB0 == 0)
// {
// button_increase++;
// if (button_increase >= 4)
// {
PORTD = 0x81;
// }
// }
// else
// {
// button_increase = 0;
// }
}

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22408&post_id=78639