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

📄 三功能合一.asm

📁 具有寻黑带、趋光、避障功能
💻 ASM
字号:
               ORG 0000H
               AJMP MAIN
               ORG 0003H
               AJMP INT0
               ORG 000BH
               AJMP TIM0
               ORG 0013H
               AJMP INT1
               ORG 0023H
               AJMP TIM1

MAIN:          MOV    SP,#60H                          ;设置堆栈初值
               MOV    P2,#00H
               SETB   P2.7                             ;关锋鸣器
               MOV    53H,#20
               MOV    30H,#0                           ;数码管设置初值
               MOV    31H,#0
               MOV    32H,#0
               MOV    33H,#0

               MOV    34H,#00H                        ;数码管位选通码
               MOV    35H,#10H                         
               MOV    36H,#20H
               MOV    37H,#30H


               MOV    38H,#40H                         ;数码管位选通码
               MOV    39H,#50H
               MOV    3AH,#60H
               MOV    3BH,#70H

               MOV    3CH,#0                           ;数码管设置初值
               MOV    3DH,#0
               MOV    3EH,#0
               MOV    3FH,#0



               SETB    P3.2
               SETB    P3.3
               MOV    TMOD,#12H                        ;设定定时器工作模式
               MOV    TH1,#0F8H                         ;定时1装2ms初值
               MOV    TL1,#30H
               MOV    50H,#250                         ;50H,51H软件定时1s初值
               MOV    51H,#2
               MOV    52H,#2                           ;62H软件定时2ms初值
               MOV    53H,#20
               SETB   ET1                              ;开定时1
               SETB   TR1

               SETB   p2.5                             ;按键接口
               SETB   p2.6
               SETB   P3.1
               CLR    00H
               CLR    01H
               CLR    02H
               CLR    03H
               CLR    04H
               CLR    06H
               CLR    12H


DENGDAI:       ACALL   DISP1
               ACALL   DISP2
               ACALL   DISP3
               ACALL   DISP4
               JNB     P3.1,KEY1                     ;键盘扫描
               JNB     P2.5,KEY2
               JNB     P2.6,KEY3
               AJMP    DENGDAI

KEY1:          ACALL   DISP1
               ACALL   DISP2
               ACALL   DISP3
               ACALL   DISP4
               JNB     P3.1,KEY1
               LJMP    BINZHANG

KEY2:          ACALL   DISP1
               ACALL   DISP2
               ACALL   DISP3
               ACALL   DISP4
               JNB     P2.5,KEY2
               LJMP    HEIDAI

KEY3:          ACALL   DISP1
               ACALL   DISP2
               ACALL   DISP3
               ACALL   DISP4
               JNB     P2.6,KEY3
               LJMP    XUNGUANG



;~~~~~~~~~~~~~~~~~~~~~~~各功能子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;###########################################################
;~~~~~~~~~~~~~~~~~~~~~~~避障子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BINZHANG:      MOV    P3,#0FFH
               MOV    TH0,#0F3H                        ;定时0装12uS初值
               MOV    TL0,#0F3H
               SETB   EX0
               CLR    IT0
               SETB   ET0                              ;开定时0
               SETB   TR0

               SETB    EA

               MOV    P1,#17H                          ;启动小车


AA:            ACALL   DISP1
               ACALL   DISP2
               ACALL   DISP3
               ACALL   DISP4
               ACALL FRJC                  ;调用霍尔传感子程序

               JMP    AA




;~~~~~~~~~~定时0中断服务~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TIM0:          CPL P1.6
RETUR:         RETI




;^^^^^^^^^^^^^^^^^^^^^外部中断0服务子程序^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INT0:          CLR     EA
               ;;MOV     P1,#6BH                      ;反转
               SETB    03H                           ;设03H为反转标志位
               MOV     5AH,#200                       ;倒车延时寄存器6BH*40MS
               MOV     5BH,#200                       ;转弯延时寄存器6CH*40MS
RETER:         SETB    EA
               RETI

;****************************************************************
;~~~~~~~~~~~外部中断1服务~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

INT1:          CLR     EA
               NOP
               NOP
               JNB     P2.1,HDZ                      ;扫描左黑带信号
               JNB     P2.2,HDY                      ;扫描右黑带信号
               AJMP    INT1EXIT

 HDZ:          SETB    01H                            ;左黑带检测
               CLR     P1.0
               MOV     59H,#12                         ;转弯延时寄存器
               AJMP    INT1EXIT

 HDY:          SETB    02H                            ;右黑带检测
               CLR     P1.1
               MOV     58H,#12                        ;转弯延时寄存器
               AJMP    INT1EXIT

INT1EXIT:      SETB    EA
REDEXQ:        RETI


;###########################################################################
;~~~~~~~~~~~~~~~~~~~~~~~寻黑带程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HEIDAI:        SETB   EX1
               ;CLR    IT1
               SETB   IT1
               SETB   EA
               MOV    P1,#17H
BB:            ACALL   DISP1
               ACALL   DISP2
               ACALL   DISP3
               ACALL   DISP4
               ACALL FRJC                  ;调用霍尔传感子程序
               JMP   BB


;**************************************************************************
;~~~~~~~~~~~~~~~~~~~~~~~寻光程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XUNGUANG:      SETB   00H
               SETB   EA
               MOV    P1,#17H
CC:            ACALL SIMPLE                ;ADC电压采样
               ACALL BIJAO                 ;ADC采样电压比较
               ACALL PANDUAN               ;寻光行驶方向判断
               ACALL FRJC                  ;调用霍尔传感子程序
               ACALL   DISP1
               ACALL   DISP2
               ACALL   DISP3
               ACALL   DISP4
               AJMP   CC



;~~~~~~~~~~~~~~~~~~~~显示子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ;显示8位数码管分4组显示
DISP1:         MOV   5EH,#2                     ;1显示1、2位
               MOV   R0,#30H
               MOV   R1,#34H

DIS1:          MOV   A,@R0
               ADD   A,@R1
               MOV   P0,A
               ACALL DELAY
               INC   R0
               INC   R1
               DJNZ  5EH,DIS1
               RET

DISP2:         MOV   5EH,#2                       ;2显示3、4位
               MOV   R0,#32H
               MOV   R1,#36H

DIS2:          MOV   A,@R0
               ADD   A,@R1
               MOV   P0,A
               ACALL DELAY
               INC   R0
               INC   R1
               DJNZ  5EH,DIS2
               RET

DISP3:         MOV   5EH,#2                       ;3显示5、6位
               MOV   R0,#38H
               MOV   R1,#3CH

DIS3:          MOV   A,@R0
               ADD   A,@R1
               MOV   P0,A
               ACALL DELAY
               INC   R0
               INC   R1
               DJNZ  5EH,DIS3
CHU3:          RET

DISP4:         MOV   5EH,#2                           ;4显示7、8位
               MOV   R0,#3AH
               MOV   R1,#3EH

DIS4:          MOV   A,@R0
               ADD   A,@R1
               MOV   P0,A
               ACALL DELAY
               INC   R0
               INC   R1
               DJNZ  5EH,DIS4
CHU4:          RET

;~~~~~~~~~~~~~~~~~~~~显示延时子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DELAY:         MOV R5,#11
KK1:           MOV R6,#5
               DJNZ R6,$
               DJNZ R5,KK1
               RET


;$$$$$$$$$$$$$$$$$  霍尔元件计路程子程序  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
FRJC:          JNB    06H,FRCHD
               JNB    P2.4,FRCHD
               INC    33H
               MOV    A,33H
               CJNE   A,#10,FRRR
               MOV    33H,#0
               INC    32H
               MOV    A,32H
               CJNE   A,#10,FRRR
               MOV    32H,#0
               INC    31H
               MOV    A,31H
               CJNE   A,#10,FRRR
               MOV    31H,#0
               INC    30H
               MOV    A,30H
               CJNE   A,#10,FRRR
               MOV    30H,#0

FRRR:          CLR    06H
FRCHD:         RET



;***********定时器1之,1秒计时,250Hz红外线波,倒车延时,车转弯子程序****************
;*******************250Hz红外线波产生***********************************
TIM1:          PUSH ACC
               PUSH PSW
               MOV TH1,#0F8H
               MOV TL1,#40H
               JB    00H,FR
               DJNZ 52H,HING
               CLR  P1.6
               CLR  ET0
               MOV  52H,#2
               AJMP FR
HING:          SETB  P1.6
               SETB  ET0

;$$$$$$$$$$$$$$$$$  霍尔元件计路程标志位  $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
FR:            JB   P2.4,ZD
               SETB  06H

;~~~~~~~~~~~~~~~~~~~~~~ 40MS延时 ~~~~~~~~~~~~~~~~~~~~~~~~


ZD:            DJNZ  53H,HDYC                       ;40MS定时是否到
               MOV   53H,#20                        ;40MS再送初值



;********************  黑带转弯延时  ****************************
               JNB   01H,HDZC                       ;左黑带
               DJNZ  59H,ALLEX
               SETB  P1.0
               CLR   01H
               AJMP  ALLEX

HDZC:          JNB   02H,HDYC                       ;右黑带
               DJNZ  58H,ALLEX
               SETB  P1.1
               CLR   02H
               AJMP  ALLEX


;###############   倒车延时   ########################################
HDYC:          JB    00H,ALLEX
               JNB   03H,REDEX
               MOV   P1,#6BH
               CLR   P2.7
               DJNZ  5AH,ALLEX                      ;红外线倒车延时是否到
               CLR   P1.1                           ;倒车时转弯
               CLR   03H
               SETB  P2.7
               SETB  04H
               NOP
               NOP

REDEX:         JNB   04H,ALLEX                       ;车转弯延时标志位
               DJNZ  5BH,ALLEX                       ;车转弯延时是否到
               MOV   P1,#17H                         ;车转弯后直行
               CLR   04H

ALLEX:         DJNZ 50H,PP1
               DJNZ 51H,PP12                              ;1秒到否??




;#############################1秒计时########################

               INC 3FH
               MOV A,3FH
               CJNE A,#10,PP
               MOV 3FH,#0
               INC 3EH
               MOV A,3EH
               CJNE A,#6,PP
               MOV 3EH,#0
               INC 3DH
               MOV A,3DH
               CJNE A,#10,PP
               MOV  3DH,#0
               INC  3CH
               MOV  A,3CH
               CJNE A,#6,PP
               MOV  3CH,#0
PP:            MOV 51H,#2
PP12:          MOV 50H,#250
PP1:           POP PSW
               POP ACC
               RETI


;**************************************************************************
;~~~~~~~~~~~~~~~~~~~采样电压子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SIMPLE:        MOV   40H,#0
               MOV   41H,#0
               MOV   42H,#0

               MOV   A,#00H
               ;MOV   DPTR,#0000H          ;选IN0通道
               CLR   P2.0
               MOV   DPH,P2
               MOV   DPL,#00H
               MOVX  @DPTR,A              ;启动ADC0809
               JNB   P1.7,$               ;判断ADC是否转换完毕

               ;MOV   DPTR,#0000H
               MOVX  A,@DPTR
               MOV   40H,A                ;转换结果暂存40H单元
               ACALL DELAY                ;考虑ADC转换速度

               MOV   A,#00H
               ;MOV   DPTR,#0001H         ;选IN1通道
               CLR    P2.0
               MOV    DPH,P2
               MOV    DPL,#02H
               MOVX  @DPTR,A             ;启动ADC0809
               JNB   P1.7,$              ;判断ADC是否转换完毕
               ;MOV   DPTR,#0001H
               MOVX  A,@DPTR
               MOV   41H,A               ;转换结果暂存41H单元
               ACALL DELAY               ;考虑ADC转换速度

               MOV   A,#00H
               ;MOV   DPTR,#0002H         ;选IN2通道
               CLR   P2.0
               MOV   DPH,P2
               MOV   DPL,#01H
               MOVX  @DPTR,A             ;启动ADC0809
               JNB   P1.7,$              ;判断ADC是否转换完毕
               ;MOV   DPTR,#0002H
               MOVX  A,@DPTR
               MOV   42H,A                ;转换结果暂存42H单元
               ACALL DELAY                ;考虑ADC转换速度
               ACALL DISP1                ;调用显示子程序
               ACALL DISP2
               ACALL DISP3
               ACALL DISP4
               RET
;~~~~~~~~~~~~~~~~~~~~~电压比较子程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

BIJAO:         CLR   20H                  ;标志位清零
               CLR   21H
               CLR   22H
               MOV   A,40H
               CJNE  A,41H,BJ
BJ:            JNB   CY,IN0            ;比较IN0通道大或IN1通道大
               MOV   A,41H
               CJNE  A,42H,BJ5
BJ5:           JNB   CY,IN1            ;比较IN1通道大或IN2通道大
               SETB  22H
               AJMP  EXIT
IN1:           SETB  21H
               AJMP  EXIT
IN0:           CJNE  A,42H,BJ3
BJ3:           JNB   CY,BJ4            ;比较IN0通道大或IN2通道大
               SETB  22H
               AJMP  EXIT
BJ4:           SETB  20H
EXIT:          RET

;********************************************************************************
PANDUAN:       JB 20H,ZUO
               JB 21H,PEXIT                   ;前进
               JB 22H,YOU
ZUO:           CLR P1.0
               MOV   R3,#100                  ;转弯时间
ZZ:            ACALL DISP1                    ;调用显示子程序
               ACALL DISP2
               ACALL DISP3
               ACALL DISP4
               DJNZ  R3,ZZ

               SETB  P1.0
               AJMP  PEXIT
YOU:           CLR P1.1
               MOV   R3,#100                  ;转弯时间
YY:            ACALL DISP1                    ;调用显示子程序
               ACALL DISP2
               ACALL DISP3
               ACALL DISP4
               DJNZ R3,YY
               SETB  P1.1
PEXIT:         RET


               END
        

⌨️ 快捷键说明

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