最近学习到PIC的中断来了,这篇文章会根据我的学习进度不断跟新滴-。-
一.
First of all, 俺们必须了解的一点是 不同编译器,写中断函数的形式是不一样滴。
这点可以查看对应的编译器的手册。
比如我用的编译器是XC8:
根据手册我的中断函数应该这么写:
低优先级的中断函数:
void interrupt low_priority low_isr (void)
{
/* service routine body goes here */
}
高优先级的中断函数:
void interrupt high_isr (void) // 也可以加 high_priority
{
/* service routine body goes here */
}
而如果编译器是C18的话:
低优先级的中断函数:
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{
_asm GOTO low_isr _endasm
}
#pragma code /* return to the default code section */
#pragma interruptlow low_isr
void low_isr (void)
{
/* service routine body goes here */
}
高优先级的自己去查手册啦,因为我用的是XC8. 可得出用XC8写中断是很简洁滴。
二.
刚刚突然想到,PIC18外部中断就有3个,还有其他很多中断。如果像上面那么写的话
void interrupt high_isr (void)
void interrupt low_priority low_isr (void)
怎么才能同时使用多个中断呢,因为学了51单片机,它的中断函数名字都不一样的,有interrpt0~4 51就只有5个中断,每个中断都编了号的。但是PIC18的关键字都是interrupt,怎么做呢? 其实很简单的:在中断里判断中断的标志位就可以啦。你使用了几个中断就判断几个中断的标志位,就可以知道是哪个中断被触发啦。(这只是我刚刚浏览了下datasheet里中断的部分得出的结论,可能还很不完善,也许有更好的办法)
关于PIC的博客我也同时更新在 与非网 无知的萝卜 的博客