干簧管计数器中单片机中断的设计实现
扫描二维码
随时随地手机看文章
在本文的介绍中,要设计一个干簧管计数器,并用数码管来显示。本案例例中,还要接触单片机一个重要的功能“中断”。
干簧管是干式舌簧管的简称,是一种有触点的无源电子开关元件,具有结构简单,体积小便于控制等优点,其外壳一般是一根密封的玻璃营,管中装有两个铁质的弹性簧片电板,还灌有一种叫金属铑的惰性气体。平时,玻璃管中的两个由特殊材料制成的簧片是分开的。
下图是它的结构示意图。
干簧管计数器结构示意图
当有磁性物质靠近玻璃管时,在磁场磁力线的作用下,管内的两个簧片被磁化而互相吸引接触,簧片就会吸合在一起,使结点所接的电路连通。外磁力消失后,两个簧片由于本身的弹性而分开,线路也就断开了。
因此,作为一种利用磁场信号来控制的线路开关器件,干簧管可以作为传感器用,用于计数,限位等,同时还被广泛使用于各种通信设备中。在实际运用中,通常用永久磁铁控制这两根金属片的接通与否,所以又被称为“磁控管”。
下图是干簧管状态读入电路,
干簧管状态读入电路
当磁铁靠近干簧管时,相当于按键按下,单片机P3.2口为OV,逻辑“0”:当磁铁拿走时,相当于按键抬键,P3.2为+5V,逻辑“1”。
我们要做的实验就是记录磁铁靠近干簧管的次数,也就是P3.2口由“1”变成“0”的次数。在写程序之前先介绍单片机中断的概念。
举个例子,如果我们有很多工作要做,偏偏有一个重要的客人要来,而且不知道来的具体时间,我们该怎么办?没错,我们先做工作,客人来了放下工作先接待,等客人走了接着做刚才放下的工作。
单片机的中断系统也是这样,中断请求来临时,单片机从当前运行的程序中跳出,直接运行中断服务程序,运行完中断服务程序后,再回到刚才程序中断的地方接着运行。
在本实验的电路设计中,用P3.2口读取干簧管的状态,单片机的P3.2口有一个重要的功能,它是外部中断0的接入口。经过初始化,当P3.2口的状态从“1”变到“0”时就会触发外部中断0,程序会自动跳到我们写好的中断服务程序,执行完中断服务程序后,再回到刚才主程序中断的地方继续执行主程序。程序如下:
#include
//存储数码管显示码的一维数组
unsignedcharShowCode[]=(Oxc0,Oxf9,Oxa4,OxbO,Ox99,Ox92,Ox82,Oxf8,Ox80,Ox90):
//主程序
voiDMAin(void){unsignedchari….
….
….
P1=ShowCode[num];//在数码管上显示数字num}
}
【注1】:主程序第一个语句初始化了外部中断0,将外部中断0(P3.2)设置为下降沿触发,即触发中断的条件是P3.2口的状态从“1”变到“0”。
第二句使能了外部中断0,只有使能中断,当中断条件发生时,程序才能跳到中断服务程序;否则,即使中断条件发生,程序也不会跳去执行中断服务程序。
【注2】:中断服务程序,外部中断0的中断向量为0。每次磁铁靠近干簧管都会使P3.2的状态从“1”变到“0”,从而触发中断,程序会直接跳到本中断服务程序,num++语句使变量num加1。