通过单片机中断小程序来理解什么是中断

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

 

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

 

先上代码

 

//中断函数实验

#include<reg52.h>

#define	uchar unsigned char 

sbit key_s2 = P3^0;//独立按键s2
sbit 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初始化,这时单片机的小耳朵就竖起来准备监听了。注意了,看见初始化三个字,没别的,就是做前期准备,初始化完,就万事俱备,只欠东风,东风是啥?就是电信号。

 

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

 

 

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值