⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zd02.asm

📁 51单片机开发入门与典型实例
💻 ASM
字号:
;文件名:ZD02.ASM
;程序功能:多级外部中断控制灯移动
            ORG    00H            ; 主程序起始地址
            JMP     START         ;跳到主程序START
            ORG    03H            ;INT0中断子程序起始地址             
            JMP     EXT0          ; 中断子程序 

            ORG     13H           ;  INT1中断子程序起始地址
            JMP     EXT1    
      
   START:   MOV  IE, #10000101B   ; INT0中断使能
            MOV  IP, #00000100B   ; INT0中断优先
            MOV  TCON, #00000000B ; INT0为电平触发
            MOV   SP, #70H        ;设定堆栈指针             

            MOV    A, #00H        ; A存有P1口欲显值
   LOOP:    MOV    P1,A           ; P1端口灯亮
            LCALL  DELAY          ; 调延时1秒子程序
            CPL     A             ;将A的值反相
            JMP     LOOP               

    EXT0:   PUSH   ACC     ;将累加器的值压入堆栈保存 
            PUSH   PSW     ;将 PSW的值压入堆栈保存     
            SETB   RS0     ;设定工作寄存器组1
            CLR    RS1     ;

            MOV   R3,#03
    LOOP1:  MOV    R0, #08 
                                  ;设置左移位数
            MOV    A ,#0FEH       ;设置左移初值
    LOOP2:  MOV    P1, A          ;输出至P1
            ACALL  DELAY          ;调延时1秒子程序
            RL      A             ;左移一位
            DJNZ   R0, LOOP2      ;判断移动位数       
              
            MOV    R0,#07         ;设置右移位数
    LOOP3:  RR     A              ;右移一位
            MOV    P1, A          ;输出至P1
            LCALL  DELAY          ;调延时1秒子程序 
            DJNZ   R0, LOOP3 
            DJNZ   R3,LOOP1
            POP   PSW           ;从堆栈取回PSW的值
            POP   ACC           ;从堆栈取回值 A的值         
            RETI                ;返回主程序

     EXT1:  PUSH   ACC     ;将累加器的值压入堆栈保存 
            PUSH   PSW     ;将 PSW的值压入堆栈保存     
            SETB   RS1     ;设定工作寄存器组1
            CLR    RS0     ;
            MOV   R3,#03
    LOOP4:  MOV    R0, #06        ;设置左移位数
            MOV    A ,#0FCH       ;设置左移初值
    LOOP5:  MOV    P1, A          ;输出至P1
            ACALL  DELAY          ;调延时1秒子程序
            RL      A             ;左移一位
            DJNZ   R0, LOOP5      ;判断移动位数       
              
            MOV    R0,#06          ;设置右移位数
    LOOP6:  RR     A              ;右移一位
            MOV    P1, A          ;输出至P1
            LCALL  DELAY          ;调延时1秒子程序 
            DJNZ   R0, LOOP6 
            DJNZ   R3,LOOP4
            POP   PSW           ;从堆栈取回PSW的值
            POP   ACC           ;从堆栈取回值 A的值          
            RETI                ;返回主程序
             
   DELAY:   MOV  R5, #20       ; 延时1秒子程序
    DLY1:   MOV   R6, #20      ;
    DLY2:   MOV   R7, #248     ;
            DJNZ  R7, $        ;
            DJNZ  R6, DLY2     ;
            DJNZ  R5, DLY1     ;
            RET                ;                              
            END                ; 程序结束
 



             
   


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -