这是18f4550's datasheet的摘要; 9.0 中断,第 101 页:
高优先级
中断向量位于 000008h 和低优先级
中断向量在 000018h。
这里有一些控制UART中断的寄存器:
IPR1bits.RCIP=1; //priority of UART interrupt :1==high
PIR1bits.RCIF=0;//erase interruption flag if set
PIE1bits.RCIE=1;//enable interrupt on UART reception
如果设置PIR1bits.RCIF=0;PIE1bits.RCIE=0; 不能清除您的问题,则问题可能出在其他地方。
否则,添加中断代码。如果你使用microchip的XC8编译器,它看起来像:
//on high priority interrupt, going here
void interrupt high_isr (void)
{
if(PIR1bits.RCIF){ //receiving something, UART
//reading...
c=getcUSART ();
//doing someting...
...
PIR1bits.RCIF=0; //clearing interrupt flag, UART
}
}
//on low priority interrupt, going here
void interrupt low_priority low_isr (void)
{
}
使用 microchip 的 C18 编译器稍微复杂一些:
void YourHighPriorityISRCode();
void YourLowPriorityISRCode();
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO YourHighPriorityISRCode _endasm
}
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{
_asm GOTO YourLowPriorityISRCode _endasm
}
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode()
{
...
}
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode()
{
...
}