您的位置: 网站首页 > 电子与嵌入式 > 单片机原理与应用 > 第6章 中断系统 > 【6.3 中断程序应用举例】

6.3 中断程序应用举例

 

6.3  中断程序应用举例

【例6-1 利用定时器作外部中断源。

解:MCS-51单片机有两个定时器/计数器,当它们选择计数工作方式时,T0T1引脚上的负跳变将使T0T1计数器加“1”计数,故若把定时器/计数器设置成计数工作方式,计数初始设定为满量程,一旦外部从计数引脚输入一个负跳变信号,计数器T0T1加“1”产生溢出中断,这样便可把外部计数输入端T0P3.4)或T1P3.5)扩充作为外部中断源输入。

例如,将T1设置为工作方式2(自动恢复常数)及外部计数方式,计数器TH1TL1初值设置为0FFH。当计数输入端T1P3.5)发生一次负跳变,计数器加“1”并产生溢出标志,向CPU申请中断,中断处理程序使累加器A内容加“1”,送P1口输出,然后返回主程序。编程如下:

ORG     0000H               ;用户程序首址

AJMP        MAIN         ;转主程序

ORG     00lBH

AJMP        INTS         ;转中断服务程序

MAIN:   MOV         SP,#60H          ;堆栈指针赋初值

MOV         TMOD,#60H       ;T1方式2,计数

MOV         TL1,#0FFH        ;送常数

MOV   TH1,#0FFH

SETB    TR1                   ;启动Tl计数

SETB    ET1                   ;允许T1中断

SETB    EA                ;CPU开中断

LOOP:   SJMP    LOOP             ;等待

INTS:   INC         A                ;T1中断处理程序

         MOV         P1,A

RETI                    ;中断返回

【例6-2 6-5为多个故障显示电路。当系统无故障时,4个故障源输入端X1X4全为低电平,显示灯全灭;当某部分出现故障,其对应的输入由低电平变为高电平,从而引起MCS-51单片机中断,中断服务程序的任务是判定故障源,并用对应的发光二极管LED1LED4进行显示。

6-5  利用中断对多个故障进行显示

解:编程如下。

ORG         0000H

AJMP    MAIN

ORG         0003H

AJMP    SERVE

MAIN:   ORL         P1,#0FFH    ;灯全灭,准备读入

SETB    IT0         ;选择边沿方式

SETB    EX0         ;允许INT0中断

SETB    EA          ;CPU开中断

AJMP    $           ;等待中断

SERVE:  JNB         P1.3,L1     ;X1有故障

CLR         P1.4        ;LED1

L1:     JNB     P1.2,L2     ;X2有故障

CLR         P1.5        ;LED2

L2:     JNB     P1.1,L3     ;X3有故障

CLR         P1.6        ;LED3

L3:     JNB     P1.0,L4     ;X4有故障

CLR         P1.7        ;LED4

L4:     RETI

下面给出一个应用定时器中断的实例。要求编制一段程序,使P1.0端口线上输出周期为2 ms的方波脉冲。设单片机晶振频率为6 MHz

方法:利用定时器T01ms定时,达到定时值后引起中断。在中断服务程序中,使P1.0的状态取一次反,并再次定时1ms

机器周期显然为2ms,所以定时1ms所需的机器周期个数为500,亦即01F4H。设T0为工作方式116位方式),则定时初值是01F4H,求补等于0FE0CH

程序如下:

ORG     0000H

AJMP    START

ORG     000BH

AJMP    IST0            ;转入T0中断服务程序入口地址IST0

MOV         TMOD,#01H       ;T0为定时器状态,工作方式1

MOV         TL0,#0CH        ;T0的低位定时初值

MOV         TH0,#0FEH       ;T0的高位定时初值

MOV         TCON,#10H       ;打开T0

SETB    ET0             ;允许T0中断

SETB    EA              ;允许中断

AJMP    $               ;动态暂停

IST0  MOV         TL0,#0CH        ;重置定时器初值

MOV     TH0,#0FEH       ;重置定时器初值

CPL         P1.0            ;P1.0取反

RETI                    ;中断返回

6.4     

1)编写出外部中断1为跳沿触发的中断初始化程序。

2)中断服务子程序返回指令RETI和普通子程序返回指令RET有什么区别?

3)某系统有3个外部中断源123,当某一中断源变为低电平时,便要求CPU进行处理,它们的优先处理次序由高到低依次为321,中断处理程序的入口地址分别为1000H1100H1200H。试编写主程序及中断服务程序(转至相应的中断处理程序的入口即可)。