单片机中断源系统的设计

在at89s52单片机中,只有两个外部中断请求输入端int0和int1。而实际应用系统中往往会出现两个以上的外部中断源,因此必须对外中断源进行扩展。其方法主要有:用定时器/计数器t0、t1扩展;采用中断和查询相结合的方法扩展;用串行口的中断扩展;用优先权编码器扩展等方法。这里重点介绍前两种方法。
一、用定时器/计数器作为中断源
at89s52单片机的两个定时器/计数器t0、t1可工作在计数方式,计数初值一般设定为满量程(即定时器的最大技术值),则它们的计数输入端p3.4或p3.5引脚上发生负跳变时,t0或t1计数器就加l,产生溢出中断。利用此特性,可以把p3.4、p3.5作为外部中断请求输入线,而计数器的溢出中断作为外部中断请求标志。
设t0为方式2(自动装入常数)外部计数方式,时间常数为0ffh,允许中断,cpu开放中断。其初始化程序为:
org 0000h ;跳到初始化程序
mov tmod, #06h ; t0为方式2,计数器方式工作
mov tl0, #0ffh ; 计数初值为满量程
mov th0, #0ffh; 计数初值为满量程
setb tr0; 置tr0为1,启动t0
mov ie, #82h; 置中断允许,ie中的ea位为1,et0位为1
当接在p3.4引脚上的外部中断请求输入线发生负跳变时,tl0加1溢出,tf0被置1,向cpu发出中断请求。同时th0的内容自动送入tl0,使tl0恢复初始值0ffh。这样,p3.4引脚上的每次负跳变都将tf0置位1,向cpu发出中断请求,cpu响应中断请求时,程序计数器pc转到000bh执行外部中断服务程序,此时p3.4相当于边沿触发的外中断源输入线。同理,也可以把p3.5引脚作类似的处理。
二、采用中断与查询相结合的方法
中断与查询相结合的方法是把系统中多个外部中断源按它们的重要程度进行排序,把其中最高级别的中断源接到mcs-51的一个外部中断源输入端(例如接到脚),其余的中断源用线“或”的方法连接到另一个外部中断输入端(),并同时接到一个i/o口,如图4-5中所示接到p1口。中断请求由硬件电路产生,而中断源的识别由程序查询来处理,查询顺序由中断源的优先级决定。图为五个外部中断源的连接电路,其中设备1~4经oc门与连接,并连接到p1.0~p1.3,均采用电平触发方式。设备0为最高级中断源,单独作为外部中断0的输入信号。这种办法扩展比较简单,但是当外部中断扩展的数量较多时,查询的时间比较长,导致程序的执行效率较低。
图 多个外部中断源系统设计
外部中断1的中断服务程序如下:
org 1000h
ljmp intr
intr: pushpsw; 保护现场
pusha
jnbp1.0, ir1; p1.0引脚为0,转至设备1中断服务程序
jnbp1.1, ir2; p1.1引脚为0,转至设备2中断服务程序
jnbp1.2, ir3; p1.2引脚为0,转至设备3中断服务程序
jnbp1.3, ir4; p1.3引脚为0,转至设备4中断服务程序
intr1:popa; 恢复现场
poppsw
reti; 中断返回
ir1:……; 设备1中断服务程序入口
ajmpintr1; 跳转到intr1所指示的指令
ir2:……; 设备2中断服务程序入口
ajmpintr1; 跳转到intr1
ir3:……; 设备3中断服务程序入口
ajmpintr1; 跳转到intr1
ir4:……; 设备4中断服务程序入口
ajmpintr1; 跳转到intr1