51单片机中断源概念,基于proteus的51单片机开发实例15-中断源的扩展
51单片机中断源概念,基于proteus的51单片机开发实例15-中断源的扩展图3 74HC27内部结构下图是74HC27的内部结构图。从图中可以分析出它的工作原理:每三个引脚作为输入,根据这三个引脚的电平状态“或非”后的结果决定输出引脚的电平状态。本例使用3路输入或非门芯片74HC27。下图是74HC27实物图。 图2 74hc27实物图
1. 51单片机开发实例15-中断源的扩展1.1. 实验目的本例我们继续学习51单片机的中断。51单片机有两个外部中断引脚P3.2和P3.3。有且只有这两个,设想一下,如果有超过两个外设都需要使用外部中断来触发,该怎么办?
这时就要使用外部芯片来实现中断源的扩展本例使用或非门来扩展外部中断。
图1 中断源的扩展
1.2. 设计思路当实际应用中需要多个外部中断源时,可以采用硬件请求和软件查询相结合的方式来扩展。具体思路是:把多个中断源通过“或非门”接到51单片机的外部中断引脚,同时每一个中断源分别连接到单片机的某一个非外部中断引脚的I/O端口,这样每个中断源都能在同一个外部中断引脚触发中断,然后在外部中断服务程序里面,再查询判断相应的I/O口的状态,根据不同端口的状态来区分是哪个中断源引起的中断。如果同时有多个中断源触发了中断,则根据中断服务程序的查询次序进行处理,所以这个查询次序无形中也决定了多个外部中断的优先级。程序设计时,可以根据实际情况来进行查询次序的设计,最重要的,需要最快处理的,第一个查询,依次是第二个,第三个......
1.3. 基础知识本例使用3路输入或非门芯片74HC27。下图是74HC27实物图。
图2 74hc27实物图
下图是74HC27的内部结构图。从图中可以分析出它的工作原理:每三个引脚作为输入,根据这三个引脚的电平状态“或非”后的结果决定输出引脚的电平状态。
图3 74HC27内部结构
例如我们使用1 2 13这三个脚作为外部中断扩展引脚,其对应的输出脚12连接到单片机的外部中断引脚P3.2。当1 2 13脚都输入低电平时,12脚输出高电平。只要有一个引脚输入高电平,则根据“或非”的结果,输出端12脚的输出电平就会变成低电平。
1.4. 电路设计图1是本实例所用的电路图。图中三个按键SW1 SW2 SW3 分别连接到74HC27的1 2,13脚,作为扩展的3路外部中断源,74HC27的12脚作为3输入或非门的输出脚连接到单片机的一个外部中断引脚。三个按键在未按下时,均连接到地,所以74HC27芯片的1 2 13脚都为低电平,则输出脚12脚输出高电平,只要有一个按键按下,则对应的74HC27的输出脚被拉到高电平,从而使74HC27得12脚输出低电平,触发外部中断。同时三个按键连接到单片机的P1.5 P1.6 P1.7引脚,用于在中断服务程序中判断是那个按键被按下。三个LED连接到P1.0 P1.1 P1.2,用于在中断服务程序中指示那个按键被按下。
1.5. 程序设计本实例的程序代码如下。
#include <AT89x52.h>
//按键端口定义
sbit KEY1 = P1^7;
sbit KEY2 = P1^6;
sbit KEY3 = P1^5;
//LED端口定义
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
//外部中断0服务程序
EX_INT0() interrupt 0 using 1
{
if(KEY1==1)//如果按键1按下,则点亮LED1
{
LED1=1;
LED2=0;
LED3=0;
}
if(KEY2==1)//如果按键2按下,则点亮LED2
{
LED1=0;
LED2=1;
LED3=0;
}
if(KEY3==1)//如果按键3按下,则点亮LED3
{
LED1=0;
LED2=0;
LED3=1;
}
}
//外部中断1服务程序
EX_INT1() interrupt 2 using 2
{
LED1=0;//如果产生外部中断2,则熄灭三个LED
LED2=0;
LED3=0;
}
void main(void)
{
LED1=0;
LED2=0;
LED3=0;
IE = 0x85;//中断配置
TCON = 0x05;//中断配置
while(1)//主程序不执行任何操作,只响应中断
{
}
}
在P3.2引脚对应的外部中断0的中断服务程序中,顺序判断SW1 SW2 SW3这三个按键对应引脚的电平状态,并点亮不同的LED来指示那个按键被按下。
在外部中断1的服务程序中,将三个LED全部熄灭。
1.6. 实例仿真编译程序后,将生成的hex文件载入proteus电路的单片机中,开始仿真,仿真时分别按下不同的按键,观察LED的指示,是否不同的LED点亮指示了相应的按键被按下。
1.7. 总结
通过本实例的学习,我们了解和掌握了如何使用外部芯片来实现单片机外部中断源的扩展。这对于设计功能复杂的单片机系统非常有用。