原理
想必大家肯定都看过很多类似的博客了,中断的概念应该都有一定了解了,那我这里也就不多赘述了。(好吧,是我太懒了。) 那么,就直接根据原理图讲外部中断吧—— 首先,先认一下外部中断的端口—— 上图中有四个端口:INT0、Timer0、INT1、Timer1; 其中 INT0 为外部中断0,INT1 为外部中断1; Timer0 为定时器0、Timer1 为定时器1。
先看外部中断0 INT0 —— 首先,开关 TCON 有上、下两个接口,上面的是“上升沿和下降沿均可触发”,下面的是“只能下降沿触发”。即,当TCON为高电平时,只能下降沿触发,TCON为低电平时,上升沿和下降沿均可。
上升沿,就是电压从低电平到高电平的过程。 下降沿,就是从高电平到低电平的过程。
上升沿或下降沿一般都是通过按键来触发,后面会讲到,这里就先不深入讲解。
接着,就是一个开关 EX0 和开关 EA,都让他们为高电平即为导通了。 (EX0 为 外部中断0允许位,使其为高电平,代表允许外部中断0进行中断; EA 为总中断允许位,使其为高电平,代表允许存在中断。)
所以初始化的代码即为——
void INT0_Init(void){
TCON = 0;
EX0 = 1;
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灯右移的代码。
void INT0_Init(void){
TCON = 1;
EX0 = 1;
EA = 1;
}
void INT0_handle(void) interrupt 0{
led = _cror_(led,1);
}
代码可参考我之前发的一篇流水灯的博客:@Moqim——学习自检——流水灯。
(试一下UC标题,看看有多少点击吧hhhh。)
|