编程技术分享平台

网站首页 > 技术教程 正文

1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下

xnh888 2024-11-03 15:47:05 技术教程 40 ℃ 0 评论

1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下

1.1. 实验目的

本实例将实现两路外部中断的检测和识别,让我们能够更好地理解51单片机的外部中断以及中断优先级的概念。在上一实例中,我们利用下降沿触发外部中断,在本实例中,使用低电平触发外部中断。通发光二极管分别指示那一路外部中断被触发。



1.2. 设计思路

本实例通过判断连接在单片机的两个外部中断引脚P3.2和P3.3上的按键那个被按下,然后控制相应的连接在单片机P1.0和P1.4引脚上的发光二极管闪烁来指示电路及程序的运行情况。

1.3. 基础知识

单片机与外部设备之间的数据交换有两种方式:查询方式和中断方式。

查询方式也称为条件判断,通过查询外设的状态(一般是判断端口的电平状态),如果外设状态满足要求,则单片机会控制执行相应的流程。查询方式的优点是通用性强、直观性好,缺点是需要单片机有一个等待查询的过程。CPU在查询期间不能进行其它操作,从而导致单片机的工作效率低下。(为什么查询器件不能进行其它操作呢?因为有时候外设的状态变化是很快的,很多都是毫秒级或者微秒级、甚至更短的时间,如果在这么短的时间内单片机刚好去处理别的事情了,那么就错过了这个变化)。

中断方式则可以有效地提高单片机的工作效率,非常适合实时控制,因而在单片机系统中,中断用途非常广泛,基本上每个单片机系统都会用到中断。

查询方式是单片机主动检测外设状态,而中断则是外设主动向单片机发出请求处理的信号。CPU在收到中断信号之前,一直在执行其它程序,只有在收到外设触发的中断信号后,才中断正在执行的程序,暂时去执行外设的请求,执行完后,立即又返回主程序继续执行刚才中断的程序。中断方式完全消除了CPU在查询方式中需要一直等待的现象,极大地提高了CPU的工作效率。

下图是中断处理的流程。


下图是51单片机的中断系统结构,从图中可以看出,两个外部中断源分别从P3.2和P3.3引脚输入。外部中断请求信号有两种方式:电平触发方式、负边沿触发方式。如果是电平触发方式,则只要在引脚上检测到低电平就会产生有效的中断请求。如果是负边沿触发方式,则需要在引脚上检测到从1到0(高电平到低电平的跳变)才会产生中断申请。



单片机在复位后,IE寄存器中各位的状态都是0,所以CPU是处于总中断关闭的状态。

1.4. 电路设计

本实例的电路图如图1所示。电路中两个按键分别接单片机的两个外部中断引脚P3.2和P3.3。单片机P1.0和P1.4通过灌电流的方式连接两个发光二极管。

1.5. 程序设计

本实例的程序代码如下。程序中有两个中断服务程序,注意中断服务程序的书写方法。

#include<AT89x52.h>

//宏定义
#define ON0
#define OFF 1//LED开、闭定义

//端口定义
sbit LED1=P1^3;
sbit LED2=P1^7; //LED驱动引脚定义


int main(void)
{
	IT0=0; //设置外部中断0触发方式为低电平
	IT1=0; //设置外部中断1触发方式为低电平
	EX0=1; //使能外部中断0
	EX1=1; //使能外部中断1
	EA=1;//使能总中断
	LED1=OFF;
	LED2=OFF;
	while(1)
	{
	}
}

//
EX_INT0() interrupt 0 using 1 //外部中断0服务函数
{
	LED1=~LED1; //进入中断之后LED1翻转
}

//
EX_INT1() interrupt 2 using 2//外部中断1服务函数
{
	LED2=~LED2; //进入中断之后LED2翻转
}

1.6. 实例仿真

将程序编译后生成hex文件,然后本例的proteus电路中,将程序装入单片机中。运行仿真,如下面视频所示。

1.7. 总结

通过本实例,我们学习了单片机中多中断服务函数的编写方法。更加熟悉了51单片机的外部中断。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表