找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 585|回复: 0
打印 上一主题 下一主题
收起左侧

PIC单片机中断处理的一点心得

[复制链接]
跳转到指定楼层
#
ID:1093026 发表于 2023-10-20 16:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
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。



评分

参与人数 2黑币 +56 收起 理由
AAA_MCU + 6 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表