标题: PIC单片机中断处理的一点心得 [打印本页]

作者: hero_71    时间: 2023-10-20 16:24
标题: PIC单片机中断处理的一点心得
PIC单片机不支持中断向量表,硬件设计上固定将中断向量设置在0004h这个地址。当任何中断触发时,CPU都会跳转到这个地址(interrupt vector)指向的中断服务函数(ISR)执行,在ISR中通过判断中断标志位来识别具体触发中断的事件类型,并处理响应的中断。
CPU处理中断的过程为:
1)中断产生时,首先由CPU硬件检测到中断事件,并上报给CPU;
2)CPU压栈PC指针,然后Load中断向量地址的值(ISR指针)到PC寄存器;
3)CPU执行ISR程序处理中断;
4)CPU执行RETFIE指令,从栈中Load步骤2压栈的PC指针,继续执行被中断的程序;


关于压栈,PIC单片机硬件实现了一个由8个寄存器组成的LIFO(Last-In-First-Out)的结构体,可以最多压栈8个寄存器值。

中断服务函数示例:
void interrupt ISR(void)
{
}

Microchip最新语法为:
void __interrupt() ISR(void)
{
}

编译器会自动将中断服务函数的地址放置在0004h地址处,同时,会自动在函数返回时添加RETFIE指令。


关于中断重入和中断嵌套,当PIC单片机进入ISR处理中断A时,CPU会自动将GIE(全局中断使能寄存器)置为0,这样单片机即可以安心处理当前中断,而不用担心被打断。此时,中断B会置位中断标志位,但是不会立刻触发中断进入ISR。CPU从ISR退出时,CPU自动将GIE置为1,此时,因为中断B的中断标志位被置位,则会进入ISR处理中断B。




作者: xnysfh    时间: 2024-5-31 16:10
error: (2016) interrupt function "ISR" does not service any interrupt sources
作者: xnysfh    时间: 2024-5-31 16:12
error: (2016) interrupt function "ISR" does not service any interrupt sources按照这么输入后就出现错误了,用的是xc8




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1