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

📄 victory2.asm

📁 电子设计大赛的实验报告格式 供大家参考
💻 ASM
📖 第 1 页 / 共 2 页
字号:
ORG     0000H
LJMP    MAIN

ORG     0003H
LJMP    MINE_BOMB

ORG     000BH
LJMP    TIMER

ORG     0013H
LJMP    HUOER

ORG     001BH
LJMP    SPEED

;**************************************************
ORG     0030H
;**************************************************
MINE_BOMB:
        PUSH    A
        PUSH    PSW

        INC     3AH

        MOV     A,40H
        MOV     3BH,A

        MOV     A,41H
        MOV     3CH,A

        CLR    20H.3
        SETB   P3.4
        SETB   P3.5

        POP     PSW
        POP     A
RETI

;**************************************************
TIMER:
        PUSH    A
        PUSH    PSW

        MOV       TL0,#0F0H
        MOV       TH0,#0D8H

        INC       37H
        MOV       A,37H

        CJNE      A,#100,TIMEREND
;is 1second

IS_HUN:
        MOV       37H,#0
        ;            IS C_MINE,STOP AND THAN  XUAN
        JB       20H.0,QI_LAI        ;THIS TIME,THE CAR IS WAITTING IN THE END,
        DEC      39H
        MOV      A,39H
        CJNE     A,#0H,TIMEREND
        SETB     20H.0
        LJMP     TIMEREND

QI_LAI:
        JB       20H.1,WAKE_UP
        DEC      38H
        CPL      P3.4
        MOV      A,38H
        CJNE     A,#0H,WAKE_UP
        SETB     20H.1
        CLR      P3.4
        SETB     TR1
        MOV      5AH,#23

WAKE_UP:
        INC       43H
        MOV       A,43H
        CJNE      A,#30,GOGOGO_DOWN
        MOV       A,42H
        JZ        GOGOGO_DOWN
        LJMP      HOME
GOGOGO_DOWN:
        MOV       A,43H
        CJNE      A,#60,TIMEREND
        MOV       43H,#0

        INC       42H
        MOV       A,42H
        CJNE      A,#60,TIMEREND
        MOV       42H,#0


TIMEREND:
        POP     PSW
        POP     A

RETI

;**************************************************
HUOER:
        PUSH    A
        PUSH    PSW

        MOV     A,3FH
        CLR     C
        ADD     A,#64    ;加上6.3毫米
        CJNE    A,#100,CHECK_CM
CHECK_CM:
        JC      ADD_CM
        SUBB    A,#100    ;大于10个毫米了,要作调整
        MOV     3FH,A
        INC     41H

ADD_CM:                   ;厘米上要加2
        INC     41H
        INC     41H

        MOV     A,41H
        CJNE    A,#100,CHECK_M
CHECK_M:
        JC      HUOER_END
        SUBB    A,#100    ;大于一米了,要调整一下
        MOV     41H,A
        INC     40H

        ;查看是否是两米了,是的话就算到了B区
        MOV     A,40H
        CJNE    A,#2,HUOER_END
        MOV     36H,#0BH

HUOER_END:
        POP     PSW
        POP     A
RETI

;**************************************************
SPEED:
        PUSH    A
        PUSH    PSW

        MOV       TL1,#0B0H
        MOV       TH1,#03CH

        INC       5BH
        MOV       A,5BH

        CJNE      A,5AH,SPEED_NO_EQUAL   ; 5A中放了速度值,比5A大,刚置为停,小则行
        CLR       P3.0                   ; 等于5A了,置为停
        LJMP      SP_END

SPEED_NO_EQUAL:                          ; 不是5A

        JC       IS_GOGOGO               ; 小于5A,则向前走
        CJNE     A,#40,SP_BIG_TOTAL      ; 是不是比总脉冲值大
        SETB     P3.0
        MOV      5BH,#0H
        LJMP     SP_END
IS_GOGOGO:                               ;是行,就置行
        SETB     P3.0
        LJMP     SP_END

SP_BIG_TOTAL:                            ; 大于5A,不是40
        CLR      P3.0
        JC       SP_END                  ;比40小则是停,就不管
        MOV      5AH,#0H
SP_END:

        POP     PSW
        POP     A
RETI

;**************************************************
;**************************************************


MAIN:
        MOV     SP,#5FH
        LCALL   INIT
    ;   LJMP    HOME;\\\\\\\\\

SIX_SECOND:
        JB      20H.0,GO_MINE_ZEON
        MOV     R1,#39H
        LCALL   SETCODEALL
        LCALL   OUT
        LJMP    SIX_SECOND

GO_MINE_ZEON:
        SETB     TR1
        LJMP     MINE_WAY
RET

;**************************************************
;**************************************************

INIT:
     MOV        R1,#36H
     MOV        R2,#34
INIT_LOOP:
     MOV        @R1,#0
     INC        R1
     DJNZ       R2,INIT_LOOP

     MOV        20H,#0H
     SETB       20H.1
     SETB       20H.3


     MOV        39H,#6H      ;倒计时654321
     MOV        38H,#5H      ;倒计时54321
     MOV        5AH,#24      ;用于车速控制

     MOV        36H,#0AH

     MOV        P3,#0CH
     MOV        P2,#0H


INT_ZONE:
     LCALL      SET_INT

RET
;**************************************************
SET_INT:
     MOV       TMOD,#01H
     MOV       TL0,#0F0H
     MOV       TH0,#0D8H

     MOV       TL1,#0B0H
     MOV       TH1,#03CH
     SETB      TR0
     CLR       TR1

     SETB      EA
     SETB      ET0
     SETB      ET1
     SETB      EX0
     SETB      IT0

     SETB      EX1
     SETB      IT1

RET
;**************************************************

SETCODEALL:;6543210
        MOV     R0,#30H
        MOV     R2,#6
SETCODEALL_LOOP:
        MOV     A,@R1
        MOV     DPTR,#TAB
        MOVC    A,@A+DPTR
        MOV     @R0,A
        INC     R0
        DJNZ    R2,SETCODEALL_LOOP
RET

;**************************************************
;**************************************************

MINE_WAY:
        LCALL TRACK

        JB    20H.3,MINE_WAY
        MOV     C,P3.2           ;下面有雷,就是低
        JC    MINE_WAY

        ;下面是关小灯和蜂鸣器
        CLR     P3.4
        CLR     P3.5

        ;看看长度是否超过4米
        MOV     A,40H
        CJNE    A,#4H,PASS_C
        LJMP    C_POINT

PASS_C:
        JNC     C_POINT

        ;下面调用一般雷的处理方法,再返回主程序
        LCALL   NORMAL_MINE
        LJMP    MINE_WAY

        ;下面是到达C点了
C_POINT:
        CLR     20H.1
        LCALL   FIVE_SECOND
        SETB    20H.3
        SETB    TR1
        MOV     5AH,#23
        LJMP    BOLK

RET

;****************************************************

TRACK:
      MOV       A,P0
      ANL       A,#07H
      CJNE      A,#7H,SET_TURN
      LJMP      LIGHT_END
SET_TURN:
      CJNE      A,#3H,LIGHT_NEXT
RIGHT_LIGHT:         ;  看右边的光敏元件
      CLR       P2.7        ;这时就要向右转弯了
      SETB      P2.6
      LCALL     TURN_DELAY
      CLR       P2.6
      RET
LIGHT_NEXT:          ; 左转了
      CJNE      A,#06H,LIGHT_END
      SETB      P2.7
      SETB      P2.6
      LCALL     TURN_DELAY
      CLR       P2.6
      RET

LIGHT_END:
      CLR   P2.6
RET
;****************************************************

TURN_DELAY:
      MOV        5AH,#26
      MOV        C, P0.1
      JC         TURN_DELAY

      MOV        A,36H

      CJNE       A,#0AH,IS_ZONE_B
      MOV        5AH,#24
      LJMP       TURN_DELAY_END

IS_ZONE_B:
      MOV        5AH,#20
TURN_DELAY_END:

RET

;****************************************************

NORMAL_MINE:
      CLR        TR1
      CLR        P2.6

      ;以下是保存雷长度
      MOV       A,3CH
      ADD       A,#53H
      MOV       R0,A

      CLR       C
      MOV       A,41H
      ADD       A,#100
      SUBB      A,3CH
      CJNE      A,#100,NORMAL_MINE_LENGTH
NORMAL_MINE_LENGTH:
      JC        NO_CHANGE
      SUBB      A,#100
NO_CHANGE:
      MOV       @R0,A


      ;以下是计算中点距起点的距离
      MOV       B,#2H
      DIV       AB

      ADD       A,3CH
      CJNE      A,#100,SET_CENTER
SET_CENTER:
      JC        NO_P_WAY
      SUBB      A,#100
      INC       3BH
NO_P_WAY:
      MOV       3CH,A

      ;保存中点距离
      MOV       A,3AH
      DEC       A
      MOV       B,#2H
      MUL       AB

      MOV       R0,48H
      ADD       A,R0

      MOV       R0,A
      MOV       A,3BH
      MOV       @R0,A

      INC       R0
      MOV       A,3CH
      MOV       @R0,A



      CLR        P3.0
      CLR        P3.1
      CLR        P2.6

      CLR        TR1

      ;以下是延时显示程序
      LCALL      DELAY_MINE2
      CLR        P3.1
      SETB       P3.0
      SETB       TR1
      SETB       20H.3

RET

;****************************************************
DELAY_MINE1:

⌨️ 快捷键说明

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