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

📄 diantichengxu.asm

📁 一个四层的电梯程序 很好很强大 呵呵
💻 ASM
字号:
;///////////定义一些常用的符号常量,会便于修改咱们的程序////////////////////////
porta equ 0ff7ch
portb equ 0ff7dh
portc equ 0ff7eh
f01 equ p1^0
f02 equ p1^1
f03 equ p1^2
f04 equ p1^3
bi  equ p1^4
ci  equ p1^5
di equ p1^6
ai equ p1^7
upmin equ 34h
downmax equ 30h
downlight equ p3^5
uplight equ p3^4
up equ p3^1
down equ p3^0
help1 equ 41h
help2 equ 42h
help3 equ 38h
help4 equ 39h
help5 equ 40h
 ;//////////////////设置开始位置及其中断程序//////////////////////
org 0000h
jmp start
org 0003h
 jmp interrupt1  ;将
org 000bh
jmp interrupt2

;/////////////////////程序初始化,设定中断方式以及8255的模式////////////////////////////////////////
start:
      ;///////////////////
      mov r5,#2
      mov r0,#30h
      mov r1,#34h
      ;///////////////////
      
      setb ea         ;允许中断
      setb  ex0       ;允许外部中断
       clr ie1        ;清除中断标志位
       setb it1       ; 下降沿有效
       setb et0       ;允许计时器0中断
       clr tf0        ;清除中断标志位
       mov a,#01h
       mov tmod,a
       mov a,#0f0h
       mov tl0,a
       mov a,#0d8h
       mov th0,a
       mov a,#0fh
       mov p1,a
       mov dptr, #0ff7fh
       mov a,#82h
       movx @dptr,a    ;初始化8255
        setb up
         clr down
        start_1_1:  jnb f01,start_1_1       ;判断到没到一层 ,不到就一直下降
                    setb down
;///////////////////////////以下为主函数///////////////////////////////////////////
main:
     setb tr0     ;定时器0 开始运行
  ;////////////////////////////////////上行 子程序/////////////////////////////////
  runup: mov a,upmin             
           cjne a,#5,runup2      ;有上行请求就跳转
    runup1:                       
           mov a,downmax
           cjne a,#0,out4    ;若也没有下行请求,就转到下行子程序
           setb down
           clr up            ;向上运行
           clr tr0              ;临时让计时器不工作
           jmp runup1_1
           out4:jmp rundown
           runup1_1:            
                 cjne a,#1,runup1_2    ; 
                   setb tr0      ;让计时器从新工作
                   jnb f01,runup
                   mov downmax,#0
                   setb up
                   call delay3s
                   jmp runup
           
           runup1_2:     
                    cjne a,#2,runup1_3     ;
                    setb tr0    
                    jnb f02,runup
                    mov downmax,#0
                    setb up
                    call delay3s
                    jmp runup
           
              runup1_3:          
              cjne a,#3,runup1_4      ;
                   setb tr0
                    jnb f03,runup
                    mov downmax,#0
                    setb up
                    call delay3s
                    jmp runup  
          runup1_4:              
                   setb tr0
                    jnb f04,runup
                    mov downmax,#0
                     setb up
                     call delay3s
                     jmp runup
         runup2:
               setb down
                clr up
                clr tr0
            runup2_1:
              cjne a,#1,runup2_2   ;
                    setb tr0
                    jnb f01,runup
                    mov upmin,#5
                    setb up
                    call delay3s
                    jmp runup
              
            runup2_2:
                 cjne a,#2,runup2_3     ;
                     setb tr0
                     jnb f02,runup
                     mov upmin,#5
                     setb up
                     call delay3s
                     jmp runup
            runup2_3:
                    cjne a,#3,runup2_4     ;
                     setb tr0
                      jnb f03,out
                     mov upmin,#5
                     setb up
                     call delay3s

                 out:    jmp runup
            runup2_4:
                     setb tr0
                     jnb f04,out1
                     mov upmin,#5
                     setb up
                     call delay3s
                out1:     jmp runup
 ;///////////////////////下行子程序/////////////////////////////////////       
         rundown:
                  mov a,downmax
                  cjne a,#0,rundown2
             rundown1:
                      mov a,upmin
                      cjne a,#5,out5
                      setb up
                      clr down
                      clr tr0
                      jmp rundown1_1
                  out5:jmp runup
                     rundown1_1:
                      cjne a,#1,rundown1_2
                      setb tr0
                      jnb f01,rundown
                      mov upmin,#5
                      setb down
                      call delay3s
                      jmp rundown
                      
                      rundown1_2:
                      cjne a,#2,rundown1_3
                      setb tr0
                      jnb f02,rundown
                      mov upmin,#5
                      setb down
                      call delay3s
                      jmp rundown
                      
                      rundown1_3:
                      cjne a,#3,rundown1_4
                      setb tr0
                      jnb f03,rundown
                      mov upmin,#5
                      setb down
                      call delay3s
                      jmp rundown
                      rundown1_4:
                        setb tr0
                        jnb f04,rundown
                        mov upmin, #5
                        setb down
                        call delay3s
                        jmp rundown
              rundown2:
                       setb up
                      clr down
                      clr tr0
                      rundown2_1:
                      cjne a,#1,rundown2_2
                      setb tr0
                      jnb f01,rundown
                      mov downmax,#0
                      setb down
                      call delay3s
                      jmp rundown
                      
                      rundown2_2:
                      cjne a,#2,rundown2_3
                      setb tr0
                      jnb f02,rundown
                      mov downmax,#0
                      setb down
                      call delay3s
                      jmp rundown
                      
                      rundown2_3:
                      cjne a,#3,rundown2_4
                      setb tr0
                      jnb f03,out3
                      mov downmax,#0
                      setb down
                      call delay3s
                    out3:  jmp rundown
                      rundown2_4:
                        setb tr0
                        jnb f04,out2
                        mov downmax, #0
                        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
          interrupt1_1:setb ai
                     clr bi
                     clr ci
                     clr di
                     MOV HELP5,#1
                     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
         mov dptr,#porta       ;把a的数据给指针
         movx a,@dptr
         mov r6,a
         CJNE R7,#0,TESTKEY1
         CJNE R6,#0,TESTKEY2
         jmp  loop
    testkey1:
         cjne r7, #8,j01      ;若不是一楼呼叫——跳转
         mov @r0,#1
         jmp loop

       j01:cjne r7,#4,j02    ;若不是在二楼跳转
       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
       mov a,help5
       subb a,#3
       jc j02_1
       mov @r0,#3
       jmp loop
       j02_1:
            mov @r1,#3
            jmp loop
       j03:
            mov @r1, #4
            jmp loop
testkey2:
       cjne r6,#01h,j1
       mov @r1,#1
       jmp loop
       j1:cjne r6,#02h,j2
       mov @r1,#2
       jmp loop
       j2:cjne r6,#04h,j3
       mov @r0,#2
       jmp loop
       j3:cjne r6,#08h,j4
           mov @r1,#3
           jmp loop
       j4: cjne r6,#10h,j5
          mov @r0,#3
          jmp loop
       j5:
          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  r5,#30
        dd:mov r4,#200
        dd1:mov r3,#250
        djnz r3, $
        djnz r4,dd1
        djnz r5,dd
        ret
       
        
      
    end


⌨️ 快捷键说明

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