51单片机中断函数的使用方法(基于proteus的51单片机开发实例15-中断源的扩展)

1. 51单片机开发实例15-中断源的扩展1.1. 实验目的

本例我们继续学习51单片机的中断。51单片机有两个外部中断引脚P3.2和P3.3。有且只有这两个,设想一下,如果有超过两个外设都需要使用外部中断来触发,该怎么办?

这时就要使用外部芯片来实现中断源的扩展本例使用或非门来扩展外部中断。

51单片机中断函数的使用方法(基于proteus的51单片机开发实例15-中断源的扩展)(1)

图1 中断源的扩展

1.2. 设计思路

当实际应用中需要多个外部中断源时,可以采用硬件请求和软件查询相结合的方式来扩展。具体思路是:把多个中断源通过“或非门”接到51单片机的外部中断引脚,同时每一个中断源分别连接到单片机的某一个非外部中断引脚的I/O端口,这样每个中断源都能在同一个外部中断引脚触发中断,然后在外部中断服务程序里面,再查询判断相应的I/O口的状态,根据不同端口的状态来区分是哪个中断源引起的中断。如果同时有多个中断源触发了中断,则根据中断服务程序的查询次序进行处理,所以这个查询次序无形中也决定了多个外部中断的优先级。程序设计时,可以根据实际情况来进行查询次序的设计,最重要的,需要最快处理的,第一个查询,依次是第二个,第三个......

1.3. 基础知识

本例使用3路输入或非门芯片74HC27。下图是74HC27实物图。

51单片机中断函数的使用方法(基于proteus的51单片机开发实例15-中断源的扩展)(2)

图2 74hc27实物图

下图是74HC27的内部结构图。从图中可以分析出它的工作原理:每三个引脚作为输入,根据这三个引脚的电平状态“或非”后的结果决定输出引脚的电平状态。

51单片机中断函数的使用方法(基于proteus的51单片机开发实例15-中断源的扩展)(3)

图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. 总结

通过本实例的学习,我们了解和掌握了如何使用外部芯片来实现单片机外部中断源的扩展。这对于设计功能复杂的单片机系统非常有用。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页