蓝桥杯——单片机学习(7——外部中断)

这篇博客介绍了单片机外部中断的工作原理,包括INT0和INT1端口的功能,以及如何设置上升沿和下降沿触发。文章强调了TCON寄存器中的IT0位和EX0、EA位的作用,并提供了初始化中断的代码示例。还提到管脚复用概念,以IAP15F2K61S2为例,说明INT0与P3.2的复用关系,以及如何通过按键触发中断。最后,给出了外部中断0处理函数的编写方法,并提醒注意中断号的使用。
摘要由CSDN通过智能技术生成

原理

想必大家肯定都看过很多类似的博客了,中断的概念应该都有一定了解了,那我这里也就不多赘述了。(好吧,是我太懒了。)
那么,就直接根据原理图讲外部中断吧——
来源:我自己:)
首先,先认一下外部中断的端口——
上图中有四个端口:INT0、Timer0、INT1、Timer1
其中 INT0 为外部中断0,INT1 为外部中断1;
Timer0 为定时器0、Timer1 为定时器1。

先看外部中断0 INT0 ——
来源:我自己:)
首先,开关 TCON.0(寄存器TCON的第0位,IT0) 有上、下两个接口,上面的是“ 上升沿和下降沿均可触发”,下面的是“只能下降沿触发”。即,当IT0为高电平时,只能下降沿触发,IT0为低电平时,上升沿和下降沿均可。

来源:我自己:)
上升沿,就是电压从低电平到高电平的过程。
来源:我自己:)
下降沿,就是从高电平到低电平的过程。

上升沿或下降沿一般都是通过按键来触发,后面会讲到,这里就先不深入讲解。

来源:我自己:)
接着,就是一个开关 EX0 和开关 EA,都让他们为高电平即为导通了。
(EX0 为 外部中断0允许位,使其为高电平,代表允许外部中断0进行中断;
EA 为总中断允许位,使其为高电平,代表允许存在中断。)

所以初始化的代码即为 ——

void INT0_Init(void){ //这个函数名其实可以随便写啦,只是这样更好看
 IT0 = 0; //上升沿或下降沿均可触发   或IT0 = 1;//只能下降沿触发
 EX0 = 1;  //允许外部中断0中断
 EA = 1;   //允许中断存在
}

接下来介绍一下“管脚复用”——
由于单片机的管脚较少,所以有些地方的管脚会有很多功能。
来源:我自己:)
比如这个“IAP15F2K61S2”的原理图,INT0 与 P3.2是管脚复用,而 P3.2 我们之前学到是按键里会用到的。
所以,当我们写外部中断0时,触发这个外部中断的条件就是用按键触发,一般都是用独立按键(毕竟矩阵按键还要判断啥的也麻烦。),所以对应的,触发外部中断0的就是按键 S5.而一般按下按键都是下降沿,所以一般 TCON 都写为高电平。

外部中断 1、2、3、4 的都一样的原理,就不再赘述了。

最后,这个中断的运行代码是要加上一个中断号的,例——

void INT0_handle(void) interrupt 0{
  
}

interrupt 0 就代表外部中断0.
中断号表如下——
来源:我自己:)

代码

假设,写一个外部中断 0 让 LED 灯左移的代码。

//外部中断0初始化
void INT0_Init(void){
  IT0 = 1;   //只允许下降沿触发
  EX0 = 1;    //中断外部中断0中断
  EA = 1;     //允许存在中断
}

//触发后的运行程序
void INT0_handle(void) interrupt 0{
  led = _cror_(led,1);
}

代码可参考我之前发的一篇流水灯的博客:@Moqim—— 学习自检 —— 流水灯

注意:IT0 只是寄存器 TCON 中的一位,TCON 是可位寻址的,所以,初始化外部中断时,尽可能写 IT0/IT1,不要写 TCON。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moqim Flourite.

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值