首页 > 编程知识 正文

单片机中断程序的作用,单片机中什么叫中断

时间:2023-05-06 02:14:38 阅读:276150 作者:928

最近用到51单片机,算是古董级的单片机。51单片机非常经典,好比C语言之于编程语言,而且由于价格便宜而应用非常广泛,资料可以说是最多最全的,对于初学者来说,学习成本非常低,想学习单片机的同学可以了解一下。

 

中断,是单片机非常重要的概念,能不能用好中断,是检验学习者单片机掌握程度的一个标志,但是一些地方写的比较抽象,给中断裹上神秘的外衣,好像很独特的样子,其实不然,事物发展都是连续的,没有一蹴而就的概念。下面通过一个按键点亮LED灯实验来了解中断是什么,能干什么。

 

先上代码

 

//中断函数实验#include<reg52.h>#defineuchar unsigned char sbit key_s2 = P3^0;//独立按键s2sbit flag = P3^7;//外部中断信号产生脚void delay(int z){int x,y;for(x = z; x > 0; x--)for(y = 144; y > 0; y--);}//外部中断初始化void int1Init(){ EA = 1; //开总中断EX1 = 1; //外部中断1允许位IT1 = 1; // 外部中断1下降沿触发}//外部中断1服务程序void int1() interrupt 2{ P1 = ~P1;}void main(){int1Init();while(1){if(key_s2 == 0){ delay(20);//按键消抖if(key_s2 == 0){flag = 1;flag = 0;//产生下降沿 while(!key_s2);}} }}

前期准备:

原料:一块51单片机开发板。

接线:将p33和p37用杜邦线连接。

上电下载,按下按键s2,LED全部点亮,再按下s2,LED全部灭,再按s2,又全部点亮,...,这样循环。

 

原理:

中断就是一种特殊的函数,没有什么神秘的地方,外国人开发的,起名叫中断,从词性角度讲,中断给人动词的感觉,我认为不合适,中断概念本应是倾向于名词,洋人起名字,不一定就起到本质上。而且新事物的起名,最好承前启后,要是我,我就给它起名叫电信号函数。为什么是电信号函数?

 

首先说说中断的背景,单片机是一个经常要和外部信号打交道的东西,外面有信号了,单片机就要进行一番动作,这个信号的本质其实就是一个电信号,也就是电压发生变化,早期,工程师们为了让处理器处理这些信号,必须有个东西能够识别这些信号,那就发明了这样的玩意儿:中断。当外部信号来了,也就是电信号来了,处理器就去执行特定的函数,所以我叫它电信号函数。

 

自然要问,这个程序的电信号是啥?

看这里:

 

flag = 1; flag = 0;//产生下降沿

看见下降沿没?

也就是说,如果有了下降沿,意味着单片机就要有所作为了,它要去执行它的特定函数去,也就是电信号函数,在这里,已经定义好:

 

void int1() interrupt 2{ P1 = ~P1;}

给LED管脚电平取反,按一次键,有一次下降沿,单片机有所作为一次,即灯亮,或灭。

但是中断这玩意不是想作为就能作为,还要给设定一下,条件成熟,才有电信号函数发生的可能性,否则,就算电信号来了,电信号函数也不会执行。

这就是前期准备:

 

void int1Init(){ EA = 1; //开总中断EX1 = 1; //外部中断1允许位IT1 = 1; // 外部中断1下降沿触发}

瞧这名字起得多好,int1Init(),就是中断1初始化,这时单片机的小耳朵就竖起来准备监听了。注意了,看见初始化三个字,没别的,就是做前期准备,初始化完,就万事俱备,只欠东风,东风是啥?就是电信号。

 

注意:由于处理器每个时钟周期检测一次中断,因此中断触发条件至少要持续两个时钟周期,比方说,下降沿至少要保持两个时钟周期——一个高,一个低——才能确保被检测到,低电平至少要保持两个时钟周期才能确保被检测到。

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。