您现在的位置是:首页 >技术教程 >51单片机的中断系统网站首页技术教程

51单片机的中断系统

柚子PANKO 2025-04-16 00:01:03
简介51单片机的中断系统

 一、中断系统概述
中断是指当某个事件(外部或内部触发)发生时,CPU暂停当前任务,转去处理该事件,处理完成后返回原任务继续执行。51单片机的中断系统支持5个中断源,分为2个优先级。

二、中断源

用来打断主程序的事件称为中断源
51单片机共有5个中断源,按优先级从高到低依次为:
1. 外部中断0(INT0):由P3.2引脚触发。
2. 定时器/计数器0中断(TF0):定时器0溢出或计数完成时触发。
3. 外部中断1(INT1):由P3.3引脚触发。
4. 定时器/计数器1中断(TF1):定时器1溢出或计数完成时触发。
5. 串口中断(RI/TI):串口接收完成(RI)或发送完成(TI)时触发。

 

三、中断相关寄存器
51单片机通过以下寄存器控制中断:

 1. 中断允许寄存器(IE)
   - 控制中断的开启与关闭。
   - 地址:`0xA8`,支持位寻址。
   - 各位定义:
     
     EA  : 全局中断使能(1=开启,0=关闭)
     ET2 : 定时器2中断使能(仅某些型号支持)
     ES  : 串口中断使能
     ET1 : 定时器1中断使能
     EX1 : 外部中断1使能
     ET0 : 定时器0中断使能
     EX0 : 外部中断0使能
     

 2. 中断优先级寄存器(IP)
   - 设置中断优先级(高或低)。
   - 地址:`0xB8`,支持位寻址。
   - 各位定义:
     
     PT2 : 定时器2优先级(高=1)
     PS  : 串口中断优先级
     PT1 : 定时器1优先级
     PX1 : 外部中断1优先级
     PT0 : 定时器0优先级
     PX0 : 外部中断0优先级
     

3. 定时器控制寄存器(TCON)
   - 控制外部中断触发方式。
   - 地址:`0x88`,支持位寻址。
   - 关键位:
     
     IT0 : 外部中断0触发方式(0=低电平,1=下降沿)
     IT1 : 外部中断1触发方式(同上)
     IE0/IE1 : 外部中断0/1标志位(硬件自动置1,需软件清零)
     

 4. 串口控制寄存器(SCON)
   - 控制串口中断标志。
   - 地址:`0x98`,支持位寻址。
   - 关键位:
     
     RI  : 接收完成标志(需软件清零)
     TI  : 发送完成标志(需软件清零)
     

 

四、中断优先级
- 51单片机支持两级优先级:高优先级和低优先级。
- 优先级规则:
  1. 高优先级中断可打断低优先级中断。
  2. 同优先级中断按自然优先级顺序执行(INT0 > TF0 > INT1 > TF1 > RI/TI)。
  3. 正在执行的中断不能被同优先级中断打断。

 

五、中断处理流程
1. 中断触发:事件发生,硬件置位中断标志(如TCON中的IE0)。
2. 中断响应:CPU检测到中断请求,若中断已开启(EA=1且对应中断使能位=1),则执行中断服务程序(ISR)。
3. 中断服务程序:
   - 跳转到对应的中断向量地址(如INT0为`0x0003`)。
   - 执行用户编写的ISR代码。
   - 退出前需清除中断标志(如RI/TI需软件清零)。
4. 中断返回:执行`RETI`指令,恢复原程序执行。

 

六、中断向量地址
每个中断源有固定的入口地址:
- INT0  : `0x0003`
- TF0   : `0x000B`
- INT1  : `0x0013`
- TF1   : `0x001B`
- RI/TI : `0x0023`

在C语言中,可通过`interrupt`关键字指定中断号:
c
void ISR_Name() interrupt 0 {  // 0对应INT0
    // 中断处理代码
}
 

 

七、中断配置步骤
以外部中断0(INT0)为例:
1. 设置触发方式:`IT0 = 1`(下降沿触发)。
2. 开启中断:
   c
   EA = 1;   // 开启全局中断
   EX0 = 1;  // 开启外部中断0
   
3. 编写中断服务函数:
   c
   void INT0_ISR() interrupt 0 {
       // 处理中断
       // 无需手动清除IE0(硬件自动完成)
   }
   

 

八、常见问题
1. 中断不触发:检查EA是否开启,中断标志是否清除。
2. 中断冲突:合理设置优先级,避免高优先级中断长时间占用CPU。
3. 中断标志未清除:如串口中断需手动清除RI/TI。

 

九、注意事项
- 中断服务函数尽量简短,避免使用延时函数。
- 多个中断共享变量时,需使用`volatile`关键字防止编译器优化。
- 优先级设置需根据实际需求合理分配。

通过灵活配置中断系统,51单片机可以实现高效的实时控制,适用于按键检测、定时任务、通信等场景。

 

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。