📄 程序样本.txt
字号:
ENA BIT P2.2
A1 BIT P2.5
A2 BIT P2.4
ENB BIT P2.3
B1 BIT P2.1
B2 BIT P2.0
; KEYDN BIT P2.6
RF BIT P3.4
LF BIT P3.3
RF2 BIT P3.1
LF2 BIT P3.0
KEYUP BIT P3.7
C1 BIT P1.1;挡板
C2 BIT P1.0
D1 BIT P1.2;闸门
D2 BIT P1.3
E1 BIT P1.5;提升
E2 BIT P1.4
AH EQU 60H
BH EQU 61H
AIM EQU 62H
STEP EQU 63H
RUN BIT 01H
CHANG BIT 02H
RUN2 BIT 03H
TC EQU 64H
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP X0INT
ORG 000BH
AJMP T0INT
; ORG 0013H
; AJMP X1INT
ORG 001BH
AJMP T1INT
ORG 0030H
MAIN: MOV SP,#30H
MOV P1,#00H
MOV P3,#0FFH
MOV P2,#0C0H
MOV STEP,#00
MOV TMOD,#12H
SETB IT0
SETB EA
SETB ET0
SETB ET1
MOV IP,#01H
MOV TH0,#200
MOV TL0,#200
MOV TH1,#00H
MOV TL1,#00H
CLR RUN
CLR RUN2
MOV TC,#00H
BODY: JB KEYUP,START
XIA: ACALL DOWN
JNB KEYUP,$
JB KEYUP,$
ACALL STOPE
JNB KEYUP,$
JB KEYUP,$
START:MOV AIM,#4
SETB EX0
ACALL LINE2
CLR RUN
ACALL STOP
ACALL DELAY
ACALL RPWM
CLR EX0
ACALL DELAY
ACALL DELAY
JB LF,$
JB LF,$
JB LF,$
JNB LF,$
JNB LF,$
JNB LF,$
JB LF,$
JB LF,$
JNB LF,$
JNB LF,$
JNB LF,$
CLR TR0
SETB EX0
MOV STEP,#5
ACALL STOP
MOV AIM,#18
ACALL UP
ACALL LINE
CLR RUN
ACALL STOP
MOV AIM,#20
ACALL RPWM
JNB RUN,$
CLR EX0
ACALL DELAY
ACALL DELAY
CLR TR0
ACALL STOP
AJMP ACTION
;---------------------------------
;#################################
;外部中断0,用来计步
;#################################
X0INT:PUSH ACC
; ACALL DELAY5MS
JB P3.2,X0END1
CLR EX0
SETB TR1
INC STEP
MOV A,STEP
CJNE A,AIM,X0END1
SETB RUN
X0END1:POP ACC
RETI
;---------------------------------
T1INT:PUSH ACC
CLR TF1
CLR TR1
MOV TH1,#00H
MOV TL1,#00H
INC TC
MOV A,TC
SETB TR1
CJNE A,#10,ENX0
CLR TR1
SETB EX0
MOV TC,#0
POP ACC
RETI
ENX0: SETB TR1
POP ACC
RETI
;---------------------------------
;#################################
;寻迹行走子程序1(用到定时器0,R0,A)
;#################################
LINE: PUSH ACC
MOV R0,#0
MOV AH,#20
MOV BH,#20
CLR CHANG
SETB A1
CLR A2
SETB B1
CLR B2
SETB ENA
SETB ENB
SETB TR0
LINE1:JB RUN,OUTA
JNB RF,RESTA
JNB LF,RESTB
JNB CHANG,LINE1
REST: MOV AH,#20
MOV BH,#20
CLR CHANG
SJMP LINE1
RESTA:JNB LF,LINE1
MOV AH,#19
MOV BH,#2
SETB CHANG
SJMP LINE1
RESTB:JNB RF,LINE1
MOV AH,#2
MOV BH,#19
SETB CHANG
SJMP LINE1
OUTA: CLR RUN
CLR TR0
POP ACC
RET
;#################################
;方格内行走子程序2(用到定时器0,R0,A)
;#################################
LINE2:PUSH ACC
MOV R0,#0
MOV AH,#20
MOV BH,#20
CLR CHANG
SETB A1
CLR A2
SETB B1
CLR B2
SETB ENA
SETB ENB
SETB TR0
LINE3:JB RUN,OUTB
JNB RF2,RESTA2
JNB LF2,RESTB2
JNB CHANG,LINE3
REST2:MOV AH,#19
MOV BH,#19
CLR CHANG
SJMP LINE3
RESTA2:JNB LF2,LINE3
MOV AH,#19
MOV BH,#2
SETB CHANG
SJMP LINE3
RESTB2:JNB RF2,LINE3
MOV AH,#2
MOV BH,#19
SETB CHANG
SJMP LINE3
OUTB: CLR RUN
CLR TR0
POP ACC
RET
;#########################
;T0定时器提供2路PWM信号
;#########################
T0INT:INC R0
MOV A,R0
JGA: CJNE A,AH,JGB
CLR ENA
JGB: CJNE A,BH,JG10
CLR ENB
JG10: CJNE A,#20,JGEND
SETB ENA
SETB ENB
MOV R0,#0
JGEND:RETI
;--------------------------
;--------------------------
;延时子程序
;--------------------------
DELAY:MOV R7,#200
DEY1: MOV R6,#250
DJNZ R6,$
DJNZ R7,DEY1
RET
DELAY1S:
MOV R5,#10
D1S1: ACALL DELAY
DJNZ R5,D1S1
RET
DELAY500MS:
MOV R5,#5
D501: ACALL DELAY
DJNZ R5,D501
RET
DELAY5MS:MOV R7,#10
DELAY51: MOV R6,#250
DJNZ R6,DELAY51
RET
;--------------------------
;RIGHT,LEFT,AHEAD,BACK
;--------------------------
LPWM: PUSH ACC
MOV R0,#0
MOV AH,#18
MOV BH,#8
SETB A1
CLR A2
SETB B1
CLR B2
SETB ENA
SETB ENB
SETB TR0
OUTL: POP ACC
RET
RPWM: PUSH ACC
MOV R0,#0
MOV AH,#8
MOV BH,#15
CLR A1
SETB A2
SETB B1
CLR B2
SETB ENA
SETB ENB
SETB TR0
OUTR: POP ACC
RET
BRPWM: PUSH ACC
MOV R0,#0
MOV AH,#8
MOV BH,#16
SETB A1
CLR A2
CLR B1
SETB B2
SETB ENA
SETB ENB
SETB TR0
POP ACC
RET
RIGHT:CLR ENA
CLR ENB
;CLR A1
;CLR A2
CLR B1
SETB B2
;SETB ENA
SETB ENB
RET
LEFT: CLR ENA
CLR ENB
CLR A1
SETB A2
SETB B1
CLR B2
SETB ENA
SETB ENB
RET
AHEAD:CLR ENA
CLR ENB
SETB A1
CLR A2
SETB B1
CLR B2
SETB ENA
SETB ENB
RET
BACK: CLR ENA
CLR ENB
CLR A1
SETB A2
CLR B1
SETB B2
SETB ENA
SETB ENB
RET
STOP: CLR ENA
CLR ENB
RET
;--------------------
ACTION:
;ACALL UP
JB KEYUP,$
ACALL STOPE
ACALL LETOUT
ACALL DELAY1S
ACALL STOPD
ACALL DELAY1S
ACALL DELAY1S
ACALL DELAY500MS
CLR EX0
ACALL BRPWM
ACALL DELAY1S
ACALL DELAY1S
ACALL DELAY1S
ACALL DELAY1S
ACALL DELAY1S
CLR TR0
ACALL STOP
ACALL DANG
ACALL DELAY1S
ACALL DELAY1S
ACALL STOPC
ACALL DOWN
ACALL DELAY1S
ACALL DELAY1S
ACALL DELAY1S
ACALL STOPE
SJMP $
UP: SETB E1
CLR E2
RET
DOWN: CLR E1
SETB E2
RET
STOPE:CLR E1
CLR E2
RET
LETOUT:
SETB D1
CLR D2
RET
STOPD:CLR D1
CLR D2
RET
DANG: SETB C1
CLR C2
RET
STOPC:CLR C1
CLR C2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -