AT89S51为用户提供两个外部中断请求输入端INT0(的反)和INT1(的反),实际的应用系统中,两个外部中断请求源往往不够用,需对外部中断源进行扩充。下面介绍一种扩充外部中断源的方法。
如下图所示,若系统中有5个外部中断请求源IR0~IR4,它们均为高电平请求有效,这时可按中断请求的轻重缓急进行排队,把其中最高级别的中断请求源IR0直接接到AT89S51的一个外部中断请求源IR0输入端INT0,其余的4个中断请求源IR1~IR4按下图所示的方法通过各自的OC门(集电极开路门)连到AT89S51的另一个外中断源输入端INT1,同时还连到P1口的P1.0~P1.3脚,供AT89S51查询。各外部中断请求源的中断请求由外部设备的硬件电路产生。采用如下图所示的电路,除了IR0的中断优先权级别最高外,其余4个外部中断源的中断优先权取决于查询顺序,这里假设查询顺序为P1.0~P1.3,因此,中断优先权由高到低的顺序依次为IR1,…,IR4。中断优先权的高、低取决于查询顺序。
假设上图的4个外部设备中有一个外部设备提出为高电平有效的中断请求信号,则中断请求通过4个集电极开路OC门的输出公共点,即INT1脚的电平就会变低。那么究竟是哪个外部设备提出的中断请求,还要通过程序查询P1.0~P1.3引脚上的逻辑电平来确定。本例假设某一时刻只能有一个外部设备提出中断请求,并设IR1~IR4这4个中断请求源的高电平可由相应的中断服务子程序清0,则处理INT1的中断服务子程序如下:
查询法扩展外部中断源比较简单,但是扩展的外部中断源个数较多时,查询时间稍长。