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

📄 电梯终结者.asm

📁 单片机控制电梯程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;///////////定义一些常用的符号常量,会便于修改咱们的程序////////////////////////
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
help6 equ 41h
help7 equ 42h
 ;//////////////////设置开始位置及其中断程序//////////////////////
org 0000h
jmp start
org 0003h
 jmp interrupt1  ;外部中断
org 000bh
jmp interrupt2   ;定时器中断

;/////////////////////程序初始化,设定中断方式以及8255的模式////////////////////////////////////////
start:
      ;///////////定时器用到的寄存器赋初值///////
      mov r5,#2
      mov r0,#30h
      mov r1,#34h
      ;//////////对与显示灯有关的两个地址设置初值/////////
      mov a,#0
      mov help6,a
      mov help7,a
      ;//////////设定中断////////////////
      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
        ;///////设定P1口
       mov a,#0fh
       mov p1,a
       ;//////////设定8255/////////////
       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,out9   ;有上行请求就跳转
             jmp runup1     ;无上行请求就到RUNUP1,使电梯到达下降呼叫的最高处
             out9:jmp runup2
     runup1:            ;///相应下行呼叫的上行程序
           mov a,downmax
           cjne a,#0,out4    ;若也没有下行请求,就转到下行子程序
           setb down
           clr up            ;向上运行
            setb uplight
           clr tr0              ;临时让计时器不工作
           jmp runup1_1
           out4:jmp rundown
           runup1_1:
                 cjne a,#1,runup1_2    ;
                   setb tr0      ;让计时器从新工作
                   jnb f01,runup
                   ;//////////////
                   clr tr0
                   push acc
                   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
                   ;//////////////
                   mov downmax,#0    ;消除这一层的请求
                   clr uplight
                   setb up
                   call delay3s
                   jmp rundown

           runup1_2:
                    cjne a,#2,runup1_3     ;
                    setb tr0
                    jnb f02,runup
                     ;//////////////
                   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^1
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                    mov downmax,#0      ;消除这一层的请求
                    clr uplight
                    setb up
                    call delay3s
                    jmp rundown

              runup1_3:
              cjne a,#3,runup1_4      ;
                   setb tr0
                    jnb f03,out10
                     ;//////////////
                   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^3
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                    mov downmax,#0       ;消除这一层的请求
                    clr uplight
                    setb up
                    call delay3s
                    jmp rundown
               out10:     jmp runup
          runup1_4:
                   setb tr0
                    jnb f04,out8
                    ;//////////////
                   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 uplight
                     setb up
                     call delay3s
                     jmp rundown
             out8:        jmp runup
         runup2:
               setb uplight
               setb down
                clr up
                clr tr0
            runup2_1:
              cjne a,#1,runup2_2   ;
                    setb tr0
                    jnb f01,out11
                     ;//////////////
                   clr tr0
                   push acc
                   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
                   ;//////////////
                    mov upmin,#5       ;消除这一层的请求
                    clr uplight
                    setb up
                    call delay3s
                out11:    jmp runup

            runup2_2:
                 cjne a,#2,runup2_3     ;
                     setb tr0
                     jnb f02,out6
                      ;//////////////
                   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^1
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                     mov upmin,#5              ;消除这一层的请求
                     clr uplight
                     setb up
                     call delay3s
               out6: jmp runup
            runup2_3:
                    cjne a,#3,runup2_4     ;
                     setb tr0
                      jnb f03,out
                       ;//////////////
                   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^3
                   mov help7,a
                   pop acc
                   setb tr0
                   ;//////////////
                     mov upmin,#5          ;消除这一层的请求
                     clr uplight
                     setb up
                     call delay3s

                 out:    jmp runup
            runup2_4:
                     setb tr0
                     jnb f04,out1
                     ;//////////////
                   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 upmin,#5             ;消除这一层的请求
                     clr uplight
                     setb up
                     call delay3s
                out1:     jmp runup
 ;///////////////////////下行子程序/////////////////////////////////////
         rundown:
                  mov a,downmax
                  cjne a,#0,out13
                   jmp rundown1
                   out13:jmp rundown2
             rundown1:
                      mov a,upmin
                      cjne a,#5,out5
                      setb downlight
                      setb up
                      clr down
                      clr tr0
                      jmp rundown1_1
                  out5:jmp runup
         rundown1_1:
                   cjne a,#1,rundown1_2
                   setb tr0
                   jnb f01,rundown
                  ;//////////////
                   clr tr0
                   push acc
                   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
                   ;//////////////
                      mov upmin,#5       ;消除这一层的请求
                      clr downlight
                      setb down
                      call delay3s
                      jmp runup

                      rundown1_2:
                      cjne a,#2,rundown1_3
                      setb tr0
                      jnb f02,rundown
                       ;//////////////
                   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
                   ;//////////////
                       clr downlight
                      mov upmin,#5             ;消除这一层的请求
                      setb down
                      call delay3s
                      jmp runup

                      rundown1_3:
                      cjne a,#3,rundown1_4
                      setb tr0
                      jnb f03,out14
                       ;//////////////
                   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
                   ;//////////////
                       clr downlight
                      mov upmin,#5           ;消除这一层的请求
                      setb down
                      call delay3s
                      jmp runup
               out14:       jmp rundown
       rundown1_4:
                        setb tr0
                        jnb f04,out12
                         ;//////////////
                   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 upmin, #5        ;消除这一层的请求
                         clr downlight
                        setb down
                        call delay3s
                        jmp runup
                  out12:      jmp rundown
              rundown2:
                       setb downlight
                       setb up
                      clr down
                      clr tr0
                      rundown2_1:
                      cjne a,#1,rundown2_2
                      setb tr0
                      jnb f01,out15
                       ;//////////////
                   clr tr0
                   push acc

⌨️ 快捷键说明

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