在聊到外部中断之前我们首先要理解中断的概念:
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。比如当你正在用手洗衣服,然后有人敲门,这时候你停下来洗衣服去开门,然后回来继续洗衣服。这里的有人敲门你去开门,就是处理中断。
简单来说中断就是当达到某种条件,单片机暂停当前正在做的事情,而去处理中断程序。
本次我们来简单谈一下,c8051的外部中断,下面我们看一下在数据手册中的外部中断说明
此次实验我们用到的是外部中断INT0,可以看出外部中断0可以配置为低电平触发,和下降沿触发。
还有就是中断中断标志位IE0,IE1,当中断没有发生的时候,中断标志位为0。当中断发生的时候,中断标志位由硬件置1,c8051的中断标志在进入中断的时候会自动清除,这里我们不需要管。
下面我们来看一下c8051f020中断系统结构图
下面我们来看一下外部中断0的配置过程
1.开启交叉开关(可以看出为XBR2寄存器的第六位:XBR2=0x40;)
2.连接外部中断0(可以看出为XBR1寄存器的第二位:XBR1=0x04;)
3.配置触发方式(可以看出为TCON的第0位和第1位为我们重点关注的:IT0=0;设置为低电平触发)
4.配置中断标志( 我们可以配置IE0=0;也可以不配置,这是IE0为中断标志,IE0=0时不发生中断,当发生中断时候此时会由硬件置1,然后转到中断服务函数以后,用硬件置0)
5.开启外部中断EX0=0
6.开启总中断 EA=1
5.可以配置优先级也可以不配置因为就一个
在这时候我们会有一个疑惑IE0中写道CPU会转向中断服务程序,那么中断服务程序是什么呢?
中断向量可用来存放中断服务程序的入口地址或跳转到中断服务程序的入口地址,意思就是我们写好中断服务函数,就等着中断发生就直接跳转到我们的中断服务函数中,中断服务函数的写法有一些讲究:
void 函数名 () interrupt x
函数名:为自己随意起的,但是注意字母数字下划线。
x:为中断服务号(优先级号)在课本28页
下面看一下我写的实现杜邦线插上LED灯亮,拔掉LED灯灭的程序。
这次实验要求同学们插上一下杜邦线点亮一个灯,按顺序点亮每个灯。(类似流水灯效果)