STC系列单片机的中断系统

目录

一、中断系统的定义

二、STC15系列单片机的中断请求源及结构图

三、中断查询表以及触发方式

四、在keil c中如何声明中断函数

五、外部中断

六、基于STC15芯片实战中断系统的使用

(1)外部中断2/外部中断3来检测门的开关状态

(2)外部中断1来检测电源的电压情况


一、中断系统的定义

        

二、STC15系列单片机的中断请求源及结构图

STC系列单片机的中断系统_第1张图片

我们这里所使用的是STC15F100W系列单片机,我们来详细看看他的介绍

STC系列单片机的中断系统_第2张图片

        下面是中断的结构图,我们可以通过查询结构图来确定我们在使用一个中断的时候,需要配置哪些寄存器(也可以直接在烧录软件上使用样例程序来配置寄存器)

STC系列单片机的中断系统_第3张图片

STC系列单片机的中断系统_第4张图片

        值得注意的是外部中断0和外部中断1都是有两种触发模式的:上升沿触发和下降沿触发,而其余的外部中断2 3 4都只有下降沿触发这一种模式

STC系列单片机的中断系统_第5张图片

STC系列单片机的中断系统_第6张图片

三、中断查询表以及触发方式

STC系列单片机的中断系统_第7张图片

STC系列单片机的中断系统_第8张图片

四、在keil c中如何声明中断函数

        如果使用c语言来编程的话,中断查询的次序号就是中断号,中断号是写在普通函数后面的一个标志,有了这个标志后,就表示在接收到该中断请求的时候,会跳转到该中断服务函数中,一旦中断号写错了或者是没有写,就无法触发中断服务函数了

STC系列单片机的中断系统_第9张图片

五、外部中断

STC系列单片机的中断系统_第10张图片

        可以看到,外部中断服务函数虽然没有写入主函数main中,但是由于系统每一个时钟都会对外部中断引脚采样1次,所以一旦外部中断引脚发生了电平的变化,系统就会直接跳转到对应的中断服务函数中,从而完成相应的功能。

        中断的出现,让单片机可以自由判断外部环境的变化从而做出反应,而不用在主函数中一直循环判断函数而导致程序看起来卡死了,所以我们说中断的出现极大程度上的提高了单片机的工作效率。

六、基于STC15芯片实战中断系统的使用

STC系列单片机的中断系统_第11张图片

        这是一款门磁探测器的电路图,可以看到他有外部中断01234这几个外部中断,下面我们就通过其中的几个来说明外部中断的使用方法

(1)外部中断2/外部中断3来检测门的开关状态

STC系列单片机的中断系统_第12张图片

通过分析该电路图可以知道:

静态时:

干簧管远离磁铁(开门): GUAN : 高电平       KAI:   低电平

干簧管靠近磁铁(关门): GUAN : 低电平       KAI:   高电平

动态时:

关门动作:

只分析GUAN引脚。干簧管远离--> 干簧管靠近    GUAN: 由高电平变成低电平

开门动作:

只分析KAI引脚。-干簧管靠近-> 干簧管远离    KAI: 由高电平变成低电平

        因为GUAN和KAI引脚连接的是外部中断2和外部中断3,所以他们都只有下降沿触发这一种模式,即我们在关门动作的时候需要判断的是GUAN这个引脚的电平变化;在开门动作的时候需要判断的是KAI这个引脚的电平变化。

        

我们可以直接使用STC-ISP软件中的样例程序来配置我们的外部中断所需要的寄存器,并且套用中断服务函数

于是我们就拼凑出来这样一个代码

STC系列单片机的中断系统_第13张图片

STC系列单片机的中断系统_第14张图片

同时,为了测量的更加准确,我们先让GUAN和KAI这两个引脚都置为高电平

STC系列单片机的中断系统_第15张图片

由此,我们就利用了外部中断2和外部中断3来判断门当时的状态,从而利用中断服务函数来实现我们需要的功能

(2)外部中断1来检测电源的电压情况

        首先我们来看看电源电压检测的电路图(达林顿开关电路)

STC系列单片机的中断系统_第16张图片

经过分析可以知道:

静态分析:

电池未低压(正常情况):Volt_LOW 高电平

因为电池的电压还比较高,所以A点的电压也较高,由于三极管的特性在A端有电流的情况下,三极管导通,使得Q3接地,所以Q3和Q2之间没有电流,所以Q2没有导通,于是VoLT_LOW就是VCC的电压,即高电平了

电池低压:Volt_LOW 低电平

动态分析:

未低压--->低压:由高电平变成低电平(即产生了一个下降沿)

STC系列单片机的中断系统_第17张图片

我们又知道VoLT_LOW连接到了INT1这个外部中断,所以我们只需要打开外部中断1,并且让系统自动检测外部中断1的情况即可完成对电压的检测了

首先从STC-ISP软件中抄一份对INT1的寄存器的配置代码,这样外部中断1就已经开启了,我们再配合对应的中断服务函数就好了

STC系列单片机的中断系统_第18张图片

并且在主函数中检测标志位的变化情况来做出不同的反应,(记得加上防抖哟)

STC系列单片机的中断系统_第19张图片

笔者简单的介绍了一下外部中断,希望大家有所帮助

你可能感兴趣的:(单片机基础,单片机,嵌入式硬件)