单片机扩展外部中断源采用硬件请求和软件查询的方法是:把各个中断源通过硬件或非门引入到单片机外部中断源输入端INT0或INT1,同时再把外部中断源送到单片机的I/O端口,这样当外部中断时,通过“或非”门引起单片机中断,在中断服务程序中再通过软件查询,进而转相应的中断服务程序。
查询法扩展外部中断源需要硬件和软件的配合设计,硬件需要有或非门74LS25的参与,软件需要有端口的查询程序设计。
单片机基于74LS25扩展8个外部中断的电路图如下。较为简单。扩展时占用单片机的外部中断0输入线,即扩展的8个外部中断将触发INT0中断服务程序。
程序结构简单
程序
*******************************************************************************
程序功能为外部8个高电平有效的中断触发源共用外部中断0作为中断触发端口,通过P2口查询中断号,进入相应的中断服务程序,根据中断查询结果对有效的中断请求进行处理,优先顺序为P2.0~P2.7联接的相应中断源。
*******************************************************************************
#include <reg51.h>
#include <absacc.h>
#include <stdio.h>
#include <math.h>
//主程序,初始化及中断方式设定
void main (void)
{
P2=0x00; //P2口拉低,防止51单片机上电复位端口随即扰动触发中断
EA=1; //开中断总开关
EX0=1; //开外部中断0
while(1) //等待外部中断0
{;}
}
void zhongduan (void) interrupt 0 using 3 //中断函数
{
EX0=0;//关中断
if(P2_0=1) { *****} //中断0查询
if(P2_1=1) { *****} //中断1查询
if(P2_2=1) { *****} //中断2查询
if(P2_3=1) { *****} //中断3查询
if(P2_4=1) { *****} //中断4查询
if(P2_5=1) { *****} //中断5查询
if(P2_6=1) { *****} //中断6查询
if(P2_7=1) { *****} //中断7查询
EX0=1;开中断
} |