目录
一、中断系统的定义
二、STC15系列单片机的中断请求源及结构图
三、中断查询表以及触发方式
四、在keil c中如何声明中断函数
五、外部中断
六、基于STC15芯片实战中断系统的使用
(1)外部中断2/外部中断3来检测门的开关状态
(2)外部中断1来检测电源的电压情况
一、中断系统的定义
二、STC15系列单片机的中断请求源及结构图
我们这里所使用的是STC15F100W系列单片机,我们来详细看看他的介绍
下面是中断的结构图,我们可以通过查询结构图来确定我们在使用一个中断的时候,需要配置哪些寄存器(也可以直接在烧录软件上使用样例程序来配置寄存器)
值得注意的是外部中断0和外部中断1都是有两种触发模式的:上升沿触发和下降沿触发,而其余的外部中断2 3 4都只有下降沿触发这一种模式
三、中断查询表以及触发方式
四、在keil c中如何声明中断函数
如果使用c语言来编程的话,中断查询的次序号就是中断号,中断号是写在普通函数后面的一个标志,有了这个标志后,就表示在接收到该中断请求的时候,会跳转到该中断服务函数中,一旦中断号写错了或者是没有写,就无法触发中断服务函数了
五、外部中断
可以看到,外部中断服务函数虽然没有写入主函数main中,但是由于系统每一个时钟都会对外部中断引脚采样1次,所以一旦外部中断引脚发生了电平的变化,系统就会直接跳转到对应的中断服务函数中,从而完成相应的功能。
中断的出现,让单片机可以自由判断外部环境的变化从而做出反应,而不用在主函数中一直循环判断函数而导致程序看起来卡死了,所以我们说中断的出现极大程度上的提高了单片机的工作效率。
六、基于STC15芯片实战中断系统的使用
这是一款门磁探测器的电路图,可以看到他有外部中断01234这几个外部中断,下面我们就通过其中的几个来说明外部中断的使用方法
(1)外部中断2/外部中断3来检测门的开关状态
通过分析该电路图可以知道:
静态时:
干簧管远离磁铁(开门): GUAN : 高电平 KAI: 低电平
干簧管靠近磁铁(关门): GUAN : 低电平 KAI: 高电平
动态时:
关门动作:
只分析GUAN引脚。干簧管远离--> 干簧管靠近 GUAN: 由高电平变成低电平
开门动作:
只分析KAI引脚。-干簧管靠近-> 干簧管远离 KAI: 由高电平变成低电平
因为GUAN和KAI引脚连接的是外部中断2和外部中断3,所以他们都只有下降沿触发这一种模式,即我们在关门动作的时候需要判断的是GUAN这个引脚的电平变化;在开门动作的时候需要判断的是KAI这个引脚的电平变化。
我们可以直接使用STC-ISP软件中的样例程序来配置我们的外部中断所需要的寄存器,并且套用中断服务函数
于是我们就拼凑出来这样一个代码
同时,为了测量的更加准确,我们先让GUAN和KAI这两个引脚都置为高电平
由此,我们就利用了外部中断2和外部中断3来判断门当时的状态,从而利用中断服务函数来实现我们需要的功能
(2)外部中断1来检测电源的电压情况
首先我们来看看电源电压检测的电路图(达林顿开关电路)
经过分析可以知道:
静态分析:
电池未低压(正常情况):Volt_LOW 高电平
因为电池的电压还比较高,所以A点的电压也较高,由于三极管的特性在A端有电流的情况下,三极管导通,使得Q3接地,所以Q3和Q2之间没有电流,所以Q2没有导通,于是VoLT_LOW就是VCC的电压,即高电平了
电池低压:Volt_LOW 低电平
动态分析:
未低压--->低压:由高电平变成低电平(即产生了一个下降沿)
我们又知道VoLT_LOW连接到了INT1这个外部中断,所以我们只需要打开外部中断1,并且让系统自动检测外部中断1的情况即可完成对电压的检测了
首先从STC-ISP软件中抄一份对INT1的寄存器的配置代码,这样外部中断1就已经开启了,我们再配合对应的中断服务函数就好了
并且在主函数中检测标志位的变化情况来做出不同的反应,(记得加上防抖哟)
笔者简单的介绍了一下外部中断,希望大家有所帮助