📄 迷宫车源程序.lst
字号:
页 1
06-01-07
23:23:08
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;-----------------------迷宫车-------------------------
;电机驱动端口:P1
;电机驱动代码:
;0x01,0x00,0x21,0x11,右电机急停,停止,正转,反转
;0x04,0x00,0x06,0x0c 左电机急停,停止,正转,反转
;红外发射:P3.4
;红外接收:P2.7空,P2.6右底,P2.5左底,P2.4左后,
; P2.3右后,P2.2左前,P2.1前,P2.0右前
;蜂鸣器:P3.7
;----------------------------------------------------
SEND BIT P3.4 ;红外发射端口
BUZZER BIT P3.7 ;蜂鸣器接口
RCV DATA 2AH ;红外接收寄存器
RCVP DATA 2BH ;接收上升沿
RCVF DATA 2CH ;接收下降沿
TMH DATA 30H ;计时器
TML DATA 31H
TMR BIT 20H.0 ;计时器启动标志位
OUT DATA 33H ;电机驱动输出寄存器
RCVBUF EQU 38H ;红外接收缓冲区首地址
RBUFSIZE EQU 5 ;红外接收缓冲区大小
RCVCOUNT DATA 3FH
ORG 0000H
0000 0150 AJMP START
ORG 000BH
000B 01BB AJMP TIME0_INT
ORG 001BH
001B B2B4 CPL SEND
001D 32 RETI
ORG 0050H
START: ;MOV C,P2.5
; MOV BUZZER,C
; SJMP START
0050 785F MOV R0,#5FH
0052 7600 MOV @R0,#0
0054 D8FC DJNZ R0,$-2
0056 75815F MOV SP,#5FH
0059 753F0A MOV RCVCOUNT,#10
005C 752AFF MOV RCV,#0FFH
005F 758921 MOV TMOD,#21H
0062 758A30 MOV TL0,#LOW(65536-2000)
0065 758CF8 MOV TH0,#HIGH(65536-2000)
0068 758DF3 MOV TH1,#256-13
006B D2A9 SETB ET0
006D D2AF SETB EA
006F D28C SETB TR0
0071 D28E SETB TR1
0073 753005 MOV TMH,#05H
E:\技术部\陈映宇\MCS_51\作品程序\过迷宫小车程序\迷宫车源程序.ASM
页 2
06-01-07
23:23:08
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0076 753100 MOV TML,#00H
0079 D200 SETB TMR
007B 2000FD JB TMR,$
007E 753311 MOV OUT,#11H
;P2.7空,P2.6左底,P2.5右底,P2.4左后
;P2.3右后,P2.2左前,P2.1前,P2.0右前
LOOP:
; JNB RCVP.4,LOOP1
0081 315D ACALL LEFT ;若左边有通道,向左转90度
0083 80FC SJMP LOOP
0085 A251 LOOP1: MOV C,RCV.1
0087 B3 CPL C
0088 8253 ANL C,RCV.3
008A 5002 JNC LOOP2
008C 3179 ACALL RIGHT
008E A251 LOOP2: MOV C,RCV.1
0090 7253 ORL C,RCV.3
0092 4002 JC LOOP3
0094 318F ACALL BACK
0096 205002 LOOP3: JB RCV.0,LOOP4
0099 31A5 ACALL ZUOPIAN
009B 205202 LOOP4: JB RCV.2,LOOP5
009E 31D3 ACALL YOUPIAN
00A0 30A5DE LOOP5: JNB P2.5,LOOP
00A3 7D01 MOV R5,#1
00A5 5158 ACALL DELAY
00A7 30A5D7 JNB P2.5,LOOP
00AA 753300 MOV OUT,#00H
00AD D2B4 SETB SEND
00AF C2B7 CLR BUZZER
00B1 7D64 MOV R5,#100
00B3 5158 ACALL DELAY
00B5 D2B7 SETB BUZZER
00B7 C2AF CLR EA
00B9 80FE SJMP $
; AJMP LOOP
;--------------T0中断----------------
TIME0_INT:
00BB 438A30 ORL TL0,#LOW(65536-2000)
00BE 758CF8 MOV TH0,#HIGH(65536-2000)
00C1 C0E0 PUSH ACC
00C3 C0D0 PUSH PSW
00C5 D2D3 SETB RS0
00C7 C2D4 CLR RS1
00C9 B2AB CPL ET1
00CB 20AB08 JB ET1,T0N2
00CE D2B4 SETB SEND
00D0 11FB ACALL RECEIVE
E:\技术部\陈映宇\MCS_51\作品程序\过迷宫小车程序\迷宫车源程序.ASM
页 3
06-01-07
23:23:08
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;--------------------
00D2 A254 MOV C,RCV.4
; ANL C,RCV.1
; ANL C,RCV.2
; ANL C,RCV.0
; ANL C,RCV.3
00D4 92B7 MOV BUZZER,C
00D6 11DF T0N2: ACALL TIMER
00D8 3133 ACALL OUTPUT
00DA D0D0 POP PSW
00DC D0E0 POP ACC
00DE 32 RETI
;-------------双字节BCD码倒计时器---------------
;计时精度:2ms
00DF 200001 TIMER: JB TMR,TIMER0
00E2 22 RET
00E3 E531 TIMER0: MOV A,TML
00E5 4530 ORL A,TMH
00E7 600F JZ TIMER2
00E9 E531 MOV A,TML
00EB 2499 ADD A,#99H
00ED D4 DA A
00EE F531 MOV TML,A
00F0 E530 MOV A,TMH
00F2 3499 ADDC A,#99H
00F4 D4 DA A
00F5 F530 MOV TMH,A
00F7 22 RET
00F8 C200 TIMER2: CLR TMR
00FA 22 RET
;--------------------红外接收子程序-----------------
;对连续接收到的10次进行统计,若高电平的次数大于5次,
;则认为是高电平
00FB 7838 RECEIVE:MOV R0,#RCVBUF
00FD E5A0 MOV A,P2
00FF 13 RC0: RRC A
0100 5001 JNC RC1
0102 06 INC @R0
0103 08 RC1: INC R0
0104 B83DF8 CJNE R0,#RCVBUF+RBUFSIZE,RC0
0107 D53F27 DJNZ RCVCOUNT,RC3
010A AF2A MOV R7,RCV
010C 752A00 MOV RCV,#0
010F 783C MOV R0,#RCVBUF+RBUFSIZE-1
0111 7405 RC2: MOV A,#5
0113 C3 CLR C
0114 96 SUBB A,@R0
0115 E52A MOV A,RCV
E:\技术部\陈映宇\MCS_51\作品程序\过迷宫小车程序\迷宫车源程序.ASM
页 4
06-01-07
23:23:08
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0117 33 RLC A
0118 F52A MOV RCV,A
011A 7600 MOV @R0,#0
011C 18 DEC R0
011D B837F1 CJNE R0,#RCVBUF-1,RC2
0120 753F0A MOV RCVCOUNT,#10
0123 EF MOV A,R7
0124 F4 CPL A
0125 552A ANL A,RCV
0127 F52B MOV RCVP,A
0129 E52A MOV A,RCV
012B F4 CPL A
012C 5F ANL A,R7
012D F52C MOV RCVF,A
012F D3 SETB C
0130 22 RET
0131 C3 RC3: CLR C
0132 22 RET
;------------------电机驱动子程序----------------
;OUT的高4位=0,1,2时,表示左电机停止,正转,反转
;OUT的低4位=0,1,2时,表示右电机停止,正转,反转
0133 900148 OUTPUT: MOV DPTR,#OUTDATA
0136 E533 MOV A,OUT
0138 C4 SWAP A
0139 540F ANL A,#0FH
013B 93 MOVC A,@A+DPTR
013C FF MOV R7,A
013D E533 MOV A,OUT
013F 540F ANL A,#0FH
0141 2403 ADD A,#3
0143 93 MOVC A,@A+DPTR
0144 4F ORL A,R7
0145 F590 MOV P1,A
0147 22 RET
OUTDATA:
0148 04060C DB 04H,06H,0CH ;左电机停止,正转,反转
014B 012111 DB 01H,21H,11H ;右电机停止,正转,反转
;---------------------暂停400ms---------------------
014E 753300 STOP: MOV OUT,#00H
0151 753002 MOV TMH,#02H
0154 753150 MOV TML,#50H
0157 D200 SETB TMR
0159 2000FD JB TMR,$
015C 22 RET
;-------------------向左转弯90度子程序--------------
015D 753001 LEFT: MOV TMH,#01H
0160 753130 MOV TML,#30H
0163 D200 SETB TMR
E:\技术部\陈映宇\MCS_51\作品程序\过迷宫小车程序\迷宫车源程序.ASM
页 5
06-01-07
23:23:08
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0165 2000FD JB TMR,$
0168 314E ACALL STOP
; MOV OUT,#11H
; RET
016A 753321 MOV OUT,#21H
016D 753003 MOV TMH,#03H
0170 753190 MOV TML,#90H
0173 D200 SETB TMR
0175 2000FD JB TMR,$
; ACALL STOP
; MOV OUT,#11H
0178 22 RET
;-------------------向右转弯90度子程序--------------
0179 314E RIGHT: ACALL STOP
017B 753312 MOV OUT,#12H
017E 753003 MOV TMH,#03H
0181 753146 MOV TML,#46H
0184 D200 SETB TMR
0186 2000FD JB TMR,$
0189 314E ACALL STOP
018B 753311 MOV OUT,#11H
018E 22 RET
;----------------------向后转子程序-------------------
018F 314E BACK: ACALL STOP
0191 753312 MOV OUT,#12H
0194 753007 MOV TMH,#07H
0197 753163 MOV TML,#63H
019A D200 SETB TMR
019C 2000FD JB TMR,$
019F 314E ACALL STOP
01A1 753311 MOV OUT,#11H
01A4 22 RET
;---------------------向左偏-------------------------
01A5 753301 ZUOPIAN:MOV OUT,#01H ;向左偏转
01A8 753002 MOV TMH,#02H ;设定向左偏转的最大时间
01AB 753176 MOV TML,#76H
01AE D200 SETB TMR
01B0 A25C ZP1: MOV C, RCVP.4
01B2 B3 CPL C
01B3 8251 ANL C,RCV.1
01B5 4001 JC ZP2
01B7 22 RET
01B8 A250 ZP2: MOV C,RCV.0
01BA B3 CPL C
01BB 8200 ANL C,TMR
01BD 40F1 JC ZP1 ;若未到达设定的时间且左前方有信号反射回来
01BF C200 CLR TMR
01C1 5101 ACALL HALFT ;求偏转时间的一半,返回值在R6R7中
E:\技术部\陈映宇\MCS_51\作品程序\过迷宫小车程序\迷宫车源程序.ASM
页 6
06-01-07
23:23:08
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
01C3 753310 MOV OUT,#10H ;向右偏转
01C6 8E30 MOV TMH,R6
01C8 8F31 MOV TML,R7
01CA D200 SETB TMR
01CC 2000FD JB TMR,$
01CF 753311 MOV OUT,#11H ;直走
01D2 22 RET
;---------------------向右偏-------------------------
01D3 753310 YOUPIAN:MOV OUT,#10H ;向右偏转
01D6 753002 MOV TMH,#02H ;设定向左偏转的最大时间
01D9 753176 MOV TML,#76H
01DC D200 SETB TMR
01DE A25C YP1: MOV C, RCVP.4
01E0 B3 CPL C
01E1 8251 ANL C,RCV.1
01E3 4001 JC YP2
01E5 22 RET
01E6 A252 YP2: MOV C,RCV.2
01E8 B3 CPL C
01E9 8200 ANL C,TMR
01EB 40F1 JC YP1 ;若未到达设定的时间且左前方有信号反射回来
01ED C200 CLR TMR
01EF 5101 ACALL HALFT ;求偏转时间的一半,返回值在R6R7中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -