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

📄 电梯终结者.asm

📁 单片机控制电梯程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                   mov dptr,#portc
                   mov a,help6
                   clr acc^0
                   movx @dptr,a
                   mov help6,a
                   mov dptr,#portb
                   mov a,help7
                   clr acc^0
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                       clr downlight
                      mov downmax,#0      ;消除这一层的请求
                      setb down
                      call delay3s
                   out15:   jmp rundown

                      rundown2_2:
                      cjne a,#2,rundown2_3
                      setb tr0
                      jnb f02,out7
                       ;//////////////
                   clr tr0
                   push acc
                   mov dptr,#portc
                   mov a,help6
                   clr acc^1
                   movx @dptr,a
                   mov help6,a
                   mov dptr,#portb
                   mov a,help7
                   clr acc^2
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                      mov downmax,#0         ;消除这一层的请求
                       clr downlight
                      setb down
                      call delay3s
                out7: jmp rundown

                      rundown2_3:
                      cjne a,#3,rundown2_4
                      setb tr0
                      jnb f03,out3
                       ;//////////////
                   clr tr0
                   push acc
                   mov dptr,#portc
                   mov a,help6
                   clr acc^2
                   movx @dptr,a
                   mov help6,a
                   mov dptr,#portb
                   mov a,help7
                   clr acc^4
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                      mov downmax,#0           ;消除这一层的请求
                       clr downlight
                      setb down
                      call delay3s
                    out3:  jmp rundown
      rundown2_4:
                setb tr0
              jnb f04,out2
                  ;//////////////
                   clr tr0
                   push acc
                   mov dptr,#portc
                   mov a,help6
                   clr acc^3
                   movx @dptr,a
                   mov help6,a
                   mov dptr,#portb
                   mov a,help7
                   clr acc^5
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                        mov downmax, #0   ;消除这一层的请求
                         clr downlight
                        setb down
                        call delay3s
                     out2:   jmp rundown



interrupt1:
          ;////////////判断楼层/////////////
          jb p1^0,interrupt1_1
          jb p1^1,interrupt1_2
          jb p1^2,interrupt1_3
          jb p1^3,interrupt1_4
           ;////////给予相应楼层的显示码,并且用help5把这一层数记录下来///////////
          interrupt1_1:
                     push acc
                     setb ai
                     clr bi
                     clr ci
                     clr di
                     MOV HELP5,#1
                     pop acc
                     jmp interrupt1back
          interrupt1_2:
                      MOV HELP5,#2
                     clr ai
                     setb bi
                     clr ci
                     clr di
                     jmp interrupt1back
          interrupt1_3:
                     MOV HELP5,#3
                     setb ai
                     setb bi
                     clr ci
                     clr di
                     jmp interrupt1back
          interrupt1_4:
                     MOV HELP5,#4
                     clr ai
                     clr bi
                     setb ci
                     clr di
                     jmp interrupt1back
          interrupt1back:               ;中断返回
                              reti
interrupt2:            ;延时程序的中断

         cjne r0,#34h,testkey    ;r0是下降数组
         cjne r1,#38h,testkey    ;r1是上升数组
         jmp loop                ;若都记录满了就不记录了,直接对数组进行排序
testkey : mov dptr,#portc        ;把c的第四位给单片机
         MOVX A,@DPTR
         mov r7,a                ;把A的数据给r7
         mov dptr,#porta       ;把porta的数据给指针
         movx a,@dptr          ;再把指针的数据给a
         mov r6,a              ;把A的数据给R6
         CJNE R7,#0,TESTKEY1   ;若r7不是零的话就跳到testkey1
         CJNE R6,#0,TESTKEY2   ;若r6不是零就跳到testkey2
         jmp  loop             ;若都为零就跳到排序程序
    testkey1:
         cjne r7, #8,j01      ;若不是一楼呼叫——跳转
          ; ///////;若是一楼的话就点亮N1的灯   /////////////////
          push acc
         mov dptr,#portc
         mov a,#1
         orl a,help6
         movx @dptr,a
         mov help6,a
         pop acc
         ;//////////////////////
         mov @r0,#1
         jmp loop           ;跳到排序

       j01:cjne r7,#4,j02    ;若不是在二楼跳转
         ; ///////;若是二楼的话就点亮N2的灯   /////////////////
       push acc
       mov dptr,#portc
       mov a,#2
       orl a,help6
       movx @dptr,a
       mov help6,a
       pop acc
       ;/////////////////
       mov a,help5
       subb a,#2
       jc j01_1
       mov @r0,#2     ;若在二楼上面,则把2放到下降数组里
       jmp loop       ;跳到排序

       j01_1:
             mov @r1,#2     ;若在二楼下面,则把它放到上升数组里
             jmp loop
       j02:cjne r7,#2,j03
         ; ///////;若是三楼的话就点亮N3的灯   /////////////////
       push acc
       mov dptr,#portc
       mov a,#4h
       orl a,help6
       movx @dptr,a
       mov help6,a
       pop acc
       ;////////////////////
       mov a,help5
       subb a,#3
       jc j02_1
       mov @r0,#3
       jmp loop        ;跳到排序
       j02_1:
            mov @r1,#3
            jmp loop     ;跳到排序
       j03:
         ; ///////;若是4楼的话就点亮N4的灯   /////////////////
           push acc
           mov dptr,#portc
           mov a,#8h
           movx @dptr,a
           mov help6,a
           pop acc
           ;///////////////////////////////////
            mov @r1, #4
            jmp loop    ;跳到排序
 ;/////////////////外部请求检测程序///////////////////
testkey2:             ;检测外部请求
       cjne r6,#01h,j1
         ; ///////;若是一楼的话就点亮w2的灯   /////////////////
       push acc
       mov dptr,#portb
       mov a,#1h
       orl a,help7
       movx @dptr,a
       mov help7,a
       pop acc
       ;/////////
       mov @r1,#1
       jmp loop     ;跳到排序
    j1:
       cjne r6,#02h,j2
         ; ///////;若是2楼up的话就点亮w2up的灯   /////////////////
       push acc
       mov dptr,#portb
       mov a,#2h
       orl a,help7
       movx @dptr,a
       mov help7,a
       pop acc
       ;//////////////////////////
       mov @r1,#2
       jmp loop    ;跳到排序
       j2:
       cjne r6,#04h,j3
         ; ///////;若是2楼down的话就点亮w2down的灯   /////////////////
       push acc
       mov dptr,#portb
       mov a,#4h
       orl a,help7
       movx @dptr,a
       mov help7,a
       pop acc
       ;////////////////////
       mov @r0,#2
       jmp loop
       j3:
       cjne r6,#08h,j4
         ; ///////;若是3楼up的话就点亮w3up的灯   /////////////////
       push acc
       mov dptr,#portb
       mov a,#8h
       orl a,help7
       movx @dptr,a
       mov help7,a
       pop acc
       ;/////////////////
       mov @r1,#3
      jmp loop
       j4:
       cjne r6,#10h,j5
         ; ///////;若是3楼down的话就点亮w3down的灯   /////////////////
       push acc
       mov dptr,#portb
       mov a,#10h
       orl a,help7
       movx @dptr,a
       mov help7,a
       pop acc
       ;/////////
       mov @r0,#3
       jmp loop
       j5:
         ; ///////;若是4楼的话就点亮w4的灯   /////////////////
       push acc
       mov dptr,#portb
       mov a,#20h
       orl a,help7
       movx @dptr,a
       mov help7,a
       pop acc
       ;///////
       mov @r0,#4
       jmp loop
 loop:   mov r0,#30h
         mov r1,#34h

          loop1:
               mov a,@r1
               inc r1
               clr c
               mov help1,a
               subb a,@r1
               jc loop1_1 ;若是a 比@r1小的话,就跳转
               mov help2,@r1
               mov @r1,help2
               dec r1
               mov @r1,help2
               inc r1
               djnz help3,loop1
               jmp loop1back
               loop1_1:
                    djnz help3,loop1
               loop1back:
                       mov help3,#3
                       mov r1,#34h
                       djnz help4,loop1
                       mov help4,#3
                    bijiao0:        ;去掉重复
                         mov a,34h
                         cjne a,35h,bijiao01
                       mov 34h,#5
               bijiao01:
                        mov a,35h
                       cjne a,36h,bijiao02
                         mov 35h,#5
               bijiao02:
                       mov a,36h
                       cjne a,37h,bijiao03
                          mov 36h,#5
               bijiao03:
                         djnz r5,loop1
                         mov r5,#2
                dingwei0:                  ;定位上行数组的位置
                        mov a,37h
                       cjne a,#5,dingwei01
                       mov r1,#37h
                dingwei01:
                       mov a,36h
                    cjne a,#5,dingwei02
                          mov r1,#36h
                dingwei02:
                       mov a,35h
                        cjne a,#5,dingwei03
                          mov r1,#35h
                dingwei03: mov a,34h
                       cjne a,#5,loop2
                          mov r1,#34h

               loop2:
                 mov a,@r0
               inc r0
               clr c
               mov help1,a
               subb a,@r0
               jnc loop2_1 ;若不是a 比@r1小的话,就跳转
               mov help2,@r0
               mov @r0,help2
               dec r0
               mov @r0,help2
               inc r0
               djnz help3,loop2
                jmp loop2back
               loop2_1:
                    djnz help3,loop2
               loop2back:
                       mov help3,#3
                       mov r0,#30h
                       djnz help4,loop2
                       mov help4,#3
                     bijiao1:            ;去掉重复
                           mov a,30h
                          cjne a,31h,bijiao11
                          mov 30h,#0
                       bijiao11:
                               mov a,31h
                               cjne a,32h,bijiao12
                               mov 31h,#0
                       bijiao12:
                               mov a,32h
                               cjne a,33h,bijiao13
                               mov 32h,#0
                        bijiao13:
                               djnz r5,loop2
                               mov r5,#2
                            dingwei1:      ;定位下降数组的位置
                               mov a,33h
                               cjne a,#0,dingwei10
                               mov r0,#33h
                               dingwei10:
                                          mov a,32h
                                          cjne a,#0,dingwei11
                                          mov r0,#32h
                                dingwei11:
                                           mov a,31h
                                           cjne a,#0,dingwei12
                                           mov r0,#31h
                                dingwei12:mov a,30h
                                          cjne a,#0,dingwei13
                                          mov r0,#30h
                               dingwei13:jmp interrupt2back

                  interrupt2back:
                         mov a,#0f0h ;再次为定时器赋初值
                         mov tl0,a
                         mov a,#0d8h
                         mov th0,a
                         clr tf0 ;清除中断溢出标志
                         reti
delay3s:mov  r2,#30
        dd:mov r4,#200
        dd1:mov r3,#250
        djnz r3, $
        djnz r4,dd1
        djnz r2,dd
        ret
        end


⌨️ 快捷键说明

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