中断原理
下面用一张图来说明这个问题:
中断系统结构
说明: STC8A8K64S4A12单片机有22个中断源
- 外部中断0(INT0) [0x0003]
- 定时器0中断 [0x000B]
- 外部中断1(INT1) [0x0013]
- 定时器1中断 [0x001B]
- 串口中断 [0x0023]
- A/D转换中断 [0x002B]
- 低电压检测(LVD)中断 [0x0033]
- CCP/PWM/PCA中断 [0x003B]
- 串口2中断 [0x0043]
- SPI中断 [0x004B]
- 外部中断2(~INT2)[0x0053]
- 外部中断3(~INT3)[0x005B]
- 定时器2中断 [0x0063]
- 外部中断4(~INT4)[0x0083]
- 串口3中断 [0x008B]
- 串口4中断 [0x0093]
- 定时器3中断 [0x009B]
- 定时器4中断 [0x00A3]
- 比较器中断 [0x00AB]
- 增强型PWM中断 [0x00B3]
- PWM异常检测中断 [0x00BB]
- IIC总线中断 [0x00C3]
**注:**外部中断2、外部中断3、串口3中断、串口4中断、定时器2中断、定时器3中断、定时器4中断、比较器中断固定为最低优先级,其他中断都有4个可设置的中断优先级。
中断向量表
说明:8051CPU的程序存储空间内专门开辟了一块存储空间用于保存处理不同类型时间的程序代码的起始地址,也成为中断服务程序入口地址。
**注:**各中断的中断入口地址见上面的中断类型后面的方括号里面。
中断寄存器组
中断使能寄存器组
中断使能寄存器(IE)
说明:
- 作用: ①允许STC单片机响应所有中断源②允许每一个中断源产生的中断事件到达CPU
- **SFR地址:**0xA8
- 复位值: 0x00
(说明:各位为1时允许产生中断,为0时禁止产生中断)
中断使能2寄存器(IE2)
- 作用: 用于使能和禁止其他紧急事件
- **SFR地址:**0xAF
- 复位值: x000 0000B
(说明:各位为1时允许产生中断,为0时禁止产生中断)
外部中断与时钟输出控制(INT_CLKO)寄存器
- 说明: 这是STC8新增加的寄存器
- **SFR地址:**0x8F
- 复位值: x000 x000B
(说明:外部中断2、外部中断3、外部中断4只能通过下降沿触发中断,各位为1时允许产生中断,为0时禁止产生中断。)
中断请求寄存器
- 说明: 定时器/计数器控制寄存器(TCON)
- **SFR地址:**0x88
- 复位值: 0x00
代码实现中断功能的实现
汇编语言版本:
1 | /*说明: |
C语言版本:
1 |
|
电路原理图:
实物运行效果如下:
视频略…
附件下载:
Keil51汇编程序压缩包:
- 推荐下载链接:
链接:https://pan.baidu.com/s/12kvd6DJf8SrxmdhG0Srmow
提取码:i6x4 - 备用下载链接:
链接:https://www.aye.ink/files/006.zip
Keil51C语言程序压缩包:
- 推荐下载链接:
链接:https://pan.baidu.com/s/1cxrxQPLjvSkIdpWyLPKHbA
提取码:75gt - 备用下载链接:
链接:https://www.aye.ink/files/007.zip
中断优先级原理和中断嵌套的实现
不同的中断冲突时的执行原则
**说明:**总原则冲突的时候总是执行当前优先级最高的程序,优先级一样变先来后到,同时到来就具有低索引值的中断优先执行。
中断优先级寄存器
中断优先级寄存器IP
- 作用: 用于设置部分中断源的优先级
- **SFR地址:**0xB8
- 复位值: 0000 0000B
中断优先级寄存器IPH
- 作用: 用于设置部分中断源的优先级
- **SFR地址:**0xB7
- 复位值: 0000 0000B
当中断优先级寄存器IP和中断优先级寄存器IPH对应的比特位进行组合时就能实现四级中断优先级
举个例子:
中断优先级寄存器IP2
- 作用: 用于设置部分中断源的优先级
- **SFR地址:**0xB5
- 复位值: x000 0000B
中断优先级寄存器IP2H
- 作用: 用于设置部分中断源的优先级
- **SFR地址:**0xB6
- 复位值: x000 0000B
当中断优先级寄存器IP2和中断优先级寄存器IP2H对应的比特位进行组合时就能实现四级中断优先级
举个例子: