单片机与DSP中的PIC中档单片机的中断总结
与51或者其他系列的单片机相比,PIC 单片机的中断机制有其特殊之处,针对我们一些初学者存在的一些问题和疑惑,我在此做一个个人总结,不当的地方,请站友们指正。 先摘引三个对PIC中断理解的回帖,然后我再对中断活动的过程、应该注意的事项、及一个疑惑进行较详细的总结和解释。 --------------- john frank :关于pic中断有些不明白的地方 借用大虾的程序; ;******************** 中断服务代码 btfss INTCON,T0IE ; 判断是否为T0中断 goto other_int btfss IN 在单片机与DSP的世界中,PIC单片机以其独特的中断机制著称,尤其是在中档型号上。相较于传统的51系列或其他系列单片机,PIC的中断系统有一些显著的差异,这常常会让初学者感到困惑。以下是对PIC中断机制的详细解析。 中断请求在PIC单片机中相当于一个事件的触发,比如定时器溢出或者外部中断。当这样的事件发生时,它会向CPU发送一个中断请求,但并不会立即打断当前执行的程序,而是等待合适的时机。这就涉及到了中断标志,比如在上述代码中`INTCON`寄存器的`T0IF`位,当定时器0中断发生时,该标志会被置位。 中断服务过程是中断机制的核心。在51系列中,如果高优先级中断发生,CPU会立即停止当前中断服务,转而处理新来的中断。然而,PIC单片机并不存在硬件级别的中断优先级。一旦CPU开始执行中断服务例程,即使有新的中断请求,也不会立即切换,而是将新的中断标志位设置为1,等待当前中断服务结束后再处理。这种机制实际上是一种"中断级联",而不是真正的优先级处理,因为CPU不会在中断服务中跳转到新的中断地址,除非已经完成当前的服务。 在中断服务例程中,通常需要检查中断标志,以确定中断类型。例如,`btfss INTCON, T0IE`指令用于判断是否为定时器0中断,如果为真,则执行相应的处理,否则跳过。同时,需要清除中断标志,如`bcf INTCON, T0IF`,以防止重复执行中断服务。 对于中断嵌套,PIC单片机允许中断嵌套,但嵌套层数受到硬件堆栈深度的限制。在中断服务开始时,CPU会自动关闭全局中断(GIE)以防止新的中断打断当前的中断服务。中断服务结束后,通过`RETFIE`指令,CPU会恢复GIE,重新开启中断。如果在中断服务中手动打开GIE,可能会导致中断的连续响应,形成循环,因此需要谨慎处理。 在中断处理中,保存和恢复现场是非常重要的步骤。这包括保存寄存器状态、堆栈指针等,以确保中断服务完成后,程序能够正确返回到中断发生前的状态。例如,`RET`或`RETFIE`指令在结束中断服务时,会恢复堆栈中的程序计数器(PC),从而回到中断前的位置继续执行。 理解PIC单片机的中断机制对于开发者至关重要,因为这直接影响到实时性和系统的响应效率。虽然与51系列不同,但PIC的中断机制提供了更多的灵活性和控制,通过精心设计的中断服务程序,可以实现复杂的实时控制系统。希望以上的解析能帮助初学者更好地掌握PIC中断的工作原理,避免在实际开发中遇到困扰。
- 粉丝: 11
- 资源: 890
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助