PIC之中断

2019-04-15 12:33发布

最近学习到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的博客我也同时更新在 与非网 无知的萝卜 的博客