×
单片机 > 单片机程序设计 > 详情

实验二、单片机的中断处理

发布时间:2020-09-02 发布时间:
|
一、

      ORG     0000H

      AJMP  MAIN

 

      ORG     0209H

MAIN: MOV    SP,#50H                PC=0209H

       MOV    30H,#1

          MOV    31H,#2

          MOV    32H,#3

       MOV    DPTR,#TABLE            TABLE=040EH

       MOV    A,30H

       LCALL  SQR                      PC=021AH,当前指针为021DH,

          mov    b,#7                   SP=50H

          push   b

          MOV    R1,A                  SP=51H,51H=07H

        MOV    A,31H

          LCALL  SQR                    PC=0225H,当前指针为0228H

          mov    b,#3                   SP=51H

          push   b

         ADD    A,R1                  SP=52H,52H=03H

          MOV    R1,A

        MOV    A,32H

          LCALL  SQR                   PC=0231H,当前指针为0234H

          pop                       SP=52H,B=06H

          ADD    A,R1                  SP=51H,B=03H

          MOV    33H,A

        

    ORG  0309H

        LOOP:SJMP   LOOP

 

    ORG  0409H

SQR:   MOVC  A,@A+DPTR     PC=0409H  第一次调用:SP=52H,51H=1DH,52H=02H

                                           第二次调用:SP=53H,52H=28H,53H=02H

                                           第三次调用:SP=54H,53H=34H,54H=02H

       mov   b,#6                 

          RET

         

TABLE:   DB  00,01,04,09,16,25,36,49,64,81 

        END

 

二、外中断INT0的响应。

    程序如下:

ORG     0000H

        LJMP    MAIN

        ORG     0003H       ;/INT0的入口地址

        LJMP    INT

 

        ORG     0209H

MAIN:   MOV     SP,#30H

        MOV     A,#0FEH

        SETB    EA          ;CPU开中断

        SETB    EX0         ;允许/INT0中断

        SETB    IT0         ;设置INT0的中断触发类型

       

LOOP:   MOV     P1,A

        LCALL   DELAY

        RL               ;右移A中的数据,以实现亮点流动

        LJMP    LOOP

 

ORG     0309H

INT:    PUSH    ACC         ;保存现场

        MOV     A,#00H

        MOV     R3,#08H     ;闪烁8次

LOOP1:  MOV     P1,A

        CPL              ;将A中的内容取反,以实现亮灭

        LCALL   DELAY

        DJNZ    R3,LOOP1

        POP     ACC         ;恢复现场

        RETI

       

        ORG     0409H

DELAY:  MOV     R0,# 100

D1:     MOV     R1,#0FFH

D2:     MOV     R2,#0FFH

D3:     DJNZ    R2,D3

        DJNZ    R1,D2

        DJNZ    R0,D1

        RET

        END

分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下单脉冲键时,LED状态改为同时闪烁。闪烁8次再恢复原来的亮点流动。

2、同级别的外中断INT0和INT1的响应。

        程序如下:

ORG     0000H

        LJMP    MAIN

        ORG     0003H       ;/INT0的入口地址

        LJMP    T0INT

        ORG     0013H       ;/INT1的入口地址

        LJMP    T1INT

 

        ORG     0209H

MAIN:   MOV     SP,#30H

        MOV     A,#0FEH

        SETB    EA          ;CPU开中断

        SETB    EX0         ;允许/INT0中断

        SETB    IT0         ;设置INT0的中断触发类型

        SETB    EX1         ;允许/INT1中断

        SETB    IT1         ;设置INT1的中断触发类型       

        ;SETB   PX1         ;设置/INT1为高优先级(将在步骤三中用到)

 

LOOP:   MOV     P1,A

        LCALL   DELAY

        RL               ;右移A中的数据,以实现亮点流动

        LJMP    LOOP

 

ORG     0309H

T0INT:  PUSH    ACC         ;保存现场

        MOV     A,#00H

        MOV     R3,#08H     ;闪烁8次

LOOP1:  MOV     P1,A

        CPL              ;将A中的内容取反,以实现亮灭

        LCALL   DELAY

        DJNZ    R3,LOOP1

        POP     ACC         ;恢复现场

        RETI

 

ORG     0409H

T1INT:  PUSH    ACC         ;保存现场

        MOV     A,#55H      ;同时亮灭4个

        MOV     R4,#08H     ;闪烁8次

LOOP2:  MOV     P1,A

        CPL             

        LCALL   DELAY

        DJNZ    R4,LOOP2   

        POP     ACC         ;恢复现场

        RETI   

       

        ORG     0509H

DELAY:  MOV     R0,# 100

D1:     MOV     R1,#0FFH

D2:     MOV     R2,#0FFH

D3:     DJNZ    R2,D3

        DJNZ    R1,D2

        DJNZ    R0,D1

        RET

        END

分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下INT0的单脉冲键时,LED状态改为同时闪烁,闪烁8次再恢复原来的亮点流动;当按下INT1的单脉冲键时,LED状态改为同时亮灭4个,亮灭8次再恢复原来的亮点流动。当同时按下INT0和INT1的当脉冲键时,单片机先响应外中断INT0,然后再响应外中断INT1。

3、不同级别的外中断INT0和INT1的响应。

在步骤二的主程序中加多一条指令:SETB   PX1     ;设置/INT1为高优先级

分析:在单脉冲键按下之前,LED处于一个亮点流动的状态。采用中断方式,当按下INT0的单脉冲键时,LED状态改为同时闪烁,闪烁8次再恢复原来的亮点流动;如果此时按下INT1的单脉冲键时,由于INT1的优先级比INT0的优先级高,所以CPU将响应高级中断请求,即LED状态改为同时亮灭4个,亮灭8次后,再返回低级中断服务程序。当同时按下INT0和INT1的单脉冲键时,单片机先响应优先级高的外中断INT1,然后再响应优先级底的外中断INT0,最后才回到主程序。

如果将T1INT和T0INT一样使用R3来作为倒数器,在软件中调试时会出错。当从高级中断返回低级中断时,R3的值会变为FF,而不是0—8。所以在程序中使用R3和R4两个寄存器。

    而在实际硬件操作中,很难同时触发两种中断,不易进行观察。

关键字:单片机  中断处理 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法