RYMCU

NO10.中断-NEBULA-VSCODE

devcui 1 年前
# nebula-vscode

所属作品集

1.什么是中断?

  • 中断: 停止当前工作,执行紧急时间,执行完毕回到先前工作
  • 中断系统: 实现中断功能的部件

单片机提供 8 个中断请求源

  • 外部中断 0 INT0
  • 外部中断 1 INT1
  • 外部中断 2 INT2
  • 外部中断 3 INT3
  • 定时器 0 中断 Timer0
  • 定时器 1 中断 Timer1
  • 定时器 2 中断 Timer2
  • 串口中断 UART

2.什么是中断优先级?

同时出现 A 中断,B 中断,先执行 A 还是 B 的问题

  • 控制方法 1: 设置中断优先级
  • 控制方法 2: 中断嵌套( 做 A 来了 B,先做 B 在做 A,又来了 C,先做 C 在做 B 在做 A)

设置中断优先级如下图所示

image.png

我们通过 对 IPH,IP 设置 01 来决定 第一优先,第二优先,第三优先,第四优先,相同优先级按第三列优先级优先。

3.如何设置中断

image.png

image.png

  • 结合图一分析
  • 图一 INT0 的 IPH 为 PX0H 和 PX0 设置第一优先级 就将 PX0H=1,PX0=1
  • 图一 INT0 的 中断请求标志位位 IE0,中断允许控制位为 EX0 和 EA
  • 结合上述看图二
  • 设置第一优先级找到 PX0H 和 PX0,分别为 0xB7^0,0XB8^0 设置值即可
  • 允许 INT0 中断的 EX0 和 EA 位于 0xA8^0,0xA8^8 如想控制 INT0 中断,设置值即可

图一的每一个标识在图二中都能找到寄存地址,设值即可。

4.中断在电路中

image.png

如上为完整电路图,下面分组分析

image.png

  • 1.第一组为中断类型
  • 2.第二组为 中断请求标志位,我们看到 TIMER 类型的相同,INT 类型相同,UART 单独分为一组,INT 对应标志位为 IE0-3,Timer 为 TF1-2,UART 为 RI 和 TI。
  • 3.第三组为中断允许控制位,只有 EA 和 EX/ET/ES 合路,中断才会被接通
  • 4.第四组为优先级,在预设优先级基础上,每组中断三种优先级设置

5.中断函数

中断后触发的函数

image.png

5.如何中断

  • 1.开启中断
  • 2.设置寄存器
  • 3.实现中断函数

6.中断案例

image.png

  • EA 开关打开
  • EX0 开关打开,至此 int0 中断打开
  • IT0 设置中断模式为下降沿触发模式

IT0 功能见下表

image.png

  • IT0 = 0: P32 低电平触发中断
  • IT0 = 1: P32 下降沿触发中断
  • 下降沿:高电平转至低电平 1->0
  • 上升沿: 低电平转至高电平 0->1

将程序录入板子,随意找个金属导电体接触 P32 小孔,看 LED 变化。
为什么当接触 P32 小孔时会触发中断呢?
因为你是导体,你接地,自然就变为 0,也就是低电平了。

所属作品集

后发布评论