3.5.3 单片机中断系统设计的应用编程

3.5.3 单片机中断系统设计的应用编程

1.应用电路

ISP实验板上中断实验电路连线如图3.23所示。

图3.23 中断信号产生电路

注意:用不同的实验方式,元件标识是有区别的。两个与非门构成消抖电路。图3.23中粗黑线为短接块。用短接块将J5连向时,脉冲源向单片机的外部中断引脚提供中断所需的脉冲,每按两次开关W2,电平变反一次,产生一个跳变沿,作为外部中断的中断请求信号。

2.应用内容

1)设计及要求

设计如下。

(1)按下中断键后,进入中断服务程序,使得段值移一位。

(2)主程序为P1口接6个LED,实现每次亮一个LED的流水灯;外部中断0(INTO)为下降沿触发,INT0中断服务程序是接在P0口的4个LED闪烁3次后返回主程序。

(3)主程序为P1口接6个LED,首先点亮所有LED,然后每次熄灭一个LED,当P1口所有LED全部熄灭时,再点亮所有LED,进入到下一循环。

要求:通过实验,熟练掌握外部中断资源的应用。

2)解析

(1)在设计中断时,要注意的是:哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说,中断服务程序应该做最少量的工作,这样做有很多好处。首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果。这时有充足的时间等待中断是十分重要的。其次它可使中断服务程序的结构简单,不容易出错。

中断程序中放入的内容越多,它们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段。但可把这些都放入主循环中,中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的ISR。

(2)中断函数不能传递参数。

(3)中断函数没有返回值。

(4)中断函数调用其他函数,要保证使用相同的寄存器组,否则出错。

(5)中断函数使用浮点运算要保存浮点寄存器的状态。

3)参考程序

根据设计(1),程序流程图如图3.24所示。

图3.24 程序流程图(1)

参考程序如下。

根据设计(2),程序流程图如图3.25所示。

图3.25 程序流程图(2)

参考程序如下。

根据设计(3),实验电路设计如下。

在实际应用中,可以采用优先级解码芯片(如74LS148),把多个中断源信号作为一个中断。如图3.26所示,在有8个中断源的情况下,经74LS148优先解码后,只占3个I/O引脚就可分辨8个中断源,从而节省I/O资源。

图3.26 中断电路图

参考程序如下。