MCS-51单片机仅有两个外部中断请求输入端INT0和INT1,在实际应用中,若外部中断源超过两个,则需扩充外部中断源。本节介绍3种简单可行的方法。
1.借用定时器溢出中断扩展外部中断源
MCS-51单片机有两个定时器/计数器(关于定时器/计数器的工作原理将在下一节介绍),具有两个内中断标志和外计数引脚,如在某些应用中不被使用,则它们的中断可作为外部中断请求使用。借用定时器溢出中断扩展外部中断源的方法如下:
1)将被借用定时器设置成计数器工作方式。
2)将被借用定时器计数初值设为满量程,即装载初值FFFFH。
3)将被借用定时器的计数输入端T0(P3.4)或T1(P3.5)作为外部中断请求输入端,溢出中断标志作为外部中断请求标志。
4)在被借用定时器中断入口地址000BH(或001BH)处存放一条3字节长转移指令,以便CPU在响应该定时器溢出中断时可以转移到相应外部中断源的中断服务程序。
则当被借用定时器的计数输入端T0(P3.4)或T1(P3.5)引脚上发生负跳变时,计数器加1便产生溢出中断,同时置位中断标志位向CPU发出中断请求,也就是扩展的外部中断源向CPU发出中断请求。
【例5-3】 定时器/计数器T0设置为方式2(自动恢复常数方式)外部计数工作模式,计数器TH0 TL0初始值均为0FFH,并允许T0中断,CPU开放中断。
解 初始化程序如下:
当连接在T0(P3.4)引脚的外部中断请求输入端发生负跳变时,TL0加1溢出,TF0置1,向CPU发出中断申请,同时,TH0的内容自动送至TL0使TL0恢复初值。这样,T0引脚每输入一个负跳变,TF0都会置1,向CPU请求中断,此时,T0引脚相当于边沿触发的外部中断源输入端。
同样,也可将定时器T1扩展为外部中断源。
2.采用中断与查询相结合扩展外部中断源
(1)硬件电路
借用定时器溢出中断扩展外部中断源,最多能够扩展两个外部中断源,如果MCS-51需要扩展的外部中断源较多时,借用定时器溢出中断扩展外部中断源已经不能满足实际外部设备的需要,这时可以采用中断与查询相结合方法扩展外部中断源。中断与查询相结合扩展外部中断源方法如下:
利用两根外部中断输入引脚INT0和每一中断输入引脚可以连接多个外部中断源,同时,利用并行输入端口引脚作为多个中断源的识别端,其电路原理图如图5-6所示。
由图可知,4个外部扩展中断源通过或非门后再与引脚相连,4个外部扩展中断源EI1~EI4中有一个或几个出现高电平则输出为0,使(P3.3)引脚为低电平,从而发出中断请求,因此,这些扩充的外部中断源都是电平触发方式(高电平有效)。
图5-6 采用中断与查询相结合扩展外部中断源电路原理图(www.daowen.com)
(2)程序设计
利用这种方法MCS-51可以把外部中断源个数扩展到5个,这5个中断源中断请求输入端分别是EI1、EI2、EI3、EI4。其中的中断入口地址是0003 H;EI1~EI4的中断入口地址是0013H,但必须在0013 H单元放一段查询程序,该查询程序应能查询EI1~EI4线上的状态和根据查询结果转向各自中断服务程序。EI1~EI4的优先级顺序由软件查询顺序决定,即最先查询的优先级最高,最后查询的优先级最低。
中断服务程序如下:
3.采用8259扩展外部中断源
为了克服查询法扩展外部中断源所需查询时间长的缺点,人们通常采用8259中断控制器来扩展外部中断源。现结合实例分析如下。
(1)MCS-51与8259的接口电路
8925是专门的可编程中断控制器,它和MCS-51系列芯片的特征不完全兼容,使用时必须加以调整。图5-7示出了8259和8051的接口电路。
图5-7 采用8259扩展外部中断源电路图
8259和8051的相互连接时要注意以下两点:
1)8259需要8051向引脚连续发送3个中断应答信号,来控制8259给8051发送一条3字节CALL Address16指令。但是,8051不会自动向引脚发送中断应答信号。为此,在中断服务程序中必须连续安排三条MOVX A,@R0指令,以便利用MOVX指令时序中信号和8259的INT信号相结合(在此期间INT一直有效),从而得到所需信号。8259的INT引脚经反相器后与8051的引脚连接来向8051发出中断请求。
2)8051不能直接使用8259送来的CALL Address16指令,因为两者的机器码并不兼容。但是,CALL Address16中所包含的16位中断矢量Address16还是可以利用的。为此,8051把收到的CALL Address16指令的第一个字节操作码CDH丢弃不用,而把收到的第二和第三字节(中断矢量Address16)送入DPTR,然后按它转入中断服务程序的入口去执行程序。
(2)8051和8259的接口程序
8051和8259接口程序是8259及其被扩展的外部中断源赖以工作的基础。该程序由两部分组成:初始化程序和被扩展外部中断源的中断服务程序。
设8259工作于全嵌套中断模式,故只需为它送ICW1和ICW2这两个初始化命令字。中断矢量间址4字节。8259 IR0上的服务程序起始地址为2100 H。现结合图5-7编写CPU响应IR0上中断请求时的主程序和中断服务程序。
1)主程序。由图5-7可知,8259端口地址为FFH和FEH。主程序开头应放初始化程序。初始化程序包括对8259的初始化和对8051本身中断系统的初始化,相应程序如下:
2)中断服务程序:
应当指出:8259的8个中断可以有8个中断服务程序段(例如INT IR0)。这8个程序段均不以RETI结尾,而是以LJMP CONT结尾,以便统一进行中断结束处理并实现中断返回。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。