📄 1.asm
字号:
L_EN BIT P1.4 ;左主电机使能端
R_EN BIT P1.5 ;右主电机使能端
L_IN1 BIT P1.0 ;左主电机输入1
L_IN2 BIT P1.1 ;左主电机输入2
R_IN1 BIT P1.2 ;右主电机输入1
R_IN2 BIT P1.3 ;右主电机输入2
JS1 EQU 40H
JS2 EQU 41H
JSP1 EQU 42H
JSP2 EQU 43H
G_EN BIT P2.6
S_EN BIT P2.7
;高电平节能
;下降沿有效
;***************************************************************
ORG 0000H
LJMP START
ORG 000BH ;定时器入口
LJMP TOP ;
ORG 0020H
;**************************主程序*******************************
START: SETB P3.2
CLR P2.5
SETB P3.7
SETB P1.7
SETB P2.3
SETB P2.1
MOV P0,#0FFH ;初始化
MOV P1,#00h
clr p2.7
clr P2.6
MOV P0,#0eH ;3
LCALL DELAY1S
MOV P0,#26H ;2
LCALL DELAY1S
MOV P0,#09fH ;1
LCALL DELAY1S
MOV P0,#03H ;0
SETB P2.5
MAIN:
MOV JS1,#0
MOV JS2,#1
MOV JSP1,#40
MOV JSP2,#40
MOV R1,#47
MOV R0,#2
MOV R2,#11
MOV R3,#10
MOV 50H,#03H
MOV 51H,#03H
MOV TMOD,#01H
MOV TL0,#0E0H ;定时器装入初值
MOV TH0,#0B1H
SETB EA ;开中断
SETB ET0 ;开电机PWM调速中断
SETB TR0 ;启动T0开始计数
LCALL QIDONG
;-----------------------------------电机PWM调速 与定时器中断程序----------------------------
TOP: PUSH PSW
PUSH ACC
MOV TH0,#0B1H
MOV TL0,#0E0H
LOP: LCALL DP
QQ: POP ACC
POP PSW
RETI
DP: MOV A,50H
MOV P0,A
CLR P2.6
ACALL D1MS
SETB P2.6
MOV A,51H
MOV P0,A
CLR P2.7
LCALL D1MS
SETB P2.7
DJNZ R1,PP
MOV R1,#47
MOV DPTR,#NUMTAB
MOV A,JS1
INC JS1
MOVC A,@A+DPTR
MOV 50H,A
DJNZ R2,PP
MOV R2,#11
MOV JS1,#0
MOV A,JS2
INC JS2
MOVC A,@A+DPTR
MOV 51H,A
DJNZ R3,PP
MOV R3,#10
MOV JS2,#0
PP: RET
NUMTAB:
DB 03h,9fh,26h,0eh,9ah,4ah,42h,1fh
DB 02h,0ah,03h
;********************* 启动程序******************************
QIDONG: CLR P3.4
CLR P3.5
CLR P3.6
SETB P3.7
LCALL DLY1
CLR P3.7
SETB L_EN
SETB R_EN
LCALL QIAN
LCALL DELAY1S
;*********************** 前进寻迹程序 **************************
ADVANCE: LCALL QIAN
LCALL DELAY1S
; LCALL DLY1
MOV A,P2
ORL A,#0F8H
CJNE A,#0F8H,L7
LJMP OVER1 ;检测是否到站
L7:
LCALL XUNJI
LJMP ADVANCE
;-----------------------------------------寻迹子程序----------------------------------------
XUNJI:
MOV A,P2 ;读入传感器数据
ORL A,#0FAH
S1: CJNE A,#0FEH,S2 ;110 急速右转
LCALL YOU
LCALL DLY2
LJMP XUNJI
S2: CJNE A,#0FCH,S3 ;100 右转
LCALL YOU
LCALL DLY3
LJMP XUNJI
S3: CJNE A,#0FBH,S4 ;011 急速左转
LCALL ZUO
LCALL DLY2
LJMP XUNJI
S4: CJNE A,#0F9H,S5 ;001左转
LCALL ZUO
LCALL DLY3
LJMP XUNJI
S5: CJNE A,#0F8H,S6
LJMP OVER1
S6: RET
;XUNJI1:
; MOV A,P2 ;读入传感器数据
; ORL A,#0F8H
;S11: CJNE A,#0FEH,S12 ;110 急速右转
; LCALL ZUO
; LCALL DLY22
; LJMP XUNJI1
;S12: CJNE A,#0FCH,S13 ;100 右转
; LCALL ZUO
; LCALL DLY33
; LJMP XUNJI1
;
;S13: CJNE A,#0FBH,S14 ;011 急速左转
; LCALL YOU
; LCALL DLY22
; LJMP XUNJI1
;
;S14: CJNE A,#0F9H,S15 ;001左转
; LCALL YOU
; LCALL DLY33
; LJMP XUNJI1
;S15: CJNE A,#0F8H,S16
; LJMP OVER2
;S16: RET
;----------------------------------------常用子程序---------------------------------------
HOU: MOV P1,#0F0H ;小车后退子程序
SETB L_IN1
SETB R_IN1
RET
QIAN: MOV P1,#0F0H ;小车前进子程序
SETB L_IN2
SETB R_IN2
RET
YOU: MOV P1,#0F0H ;小车左转子程序
SETB L_IN2
SETB R_IN1
RET
ZUO: MOV P1,#0F0H ;小车右转子程序
SETB L_IN1
SETB R_IN2
RET
;****************************停车倒水程序***************************
OVER1: MOV P1,#3FH ; 急停
CLR P3.2
LCALL DLY1
SETB P3.2
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL FANHUI
;*******************************************************************
DLY1: MOV R7,#0F8H ;0.5ms
DJNZ R7,$
RET
DLY2: MOV R4,#0 ;140ms
DLL1: MOV R5,#0
DJNZ R5,$
DJNZ R4,DLL1
RET
DLY22:
MOV R4,#200 ;140ms
DLL11: MOV R5,#200
DJNZ R5,$
DJNZ R4,DLL11
RET
LB: CLR P2.5 ;取反小喇叭(p2.5)
LCALL DLY4
SETB P2.5
RET
DLY3: MOV R6,#100 ;20MS
DLQQ: MOV R5,#100
DJNZ R5,$
DJNZ R6,DLQQ
RET
DLY33: MOV R6,#100 ;20MS
DLQQ3: MOV R5,#100
DJNZ R5,$
DJNZ R6,DLQQ3
RET
DLY4: MOV R6,#0
DLQ: MOV R5,#0
DJNZ R5,$
DJNZ R6,DLQ
RET
DELAY1S: MOV R4,#100
Lo1: MOV R6,#50
Lo2: MOV R5,#80
DJNZ R5,$
DJNZ R6,Lo2
DJNZ R4,Lo1
RET
D1MS:
MOV R5,#0
DJNZ R5,$
RET
;---------------------------------------后退返回程序---------------------------------------
FANHUI: CLR P2.3
CLR P2.1
CLR P1.7
SETB P3.4
CLR P3.5
CLR P3.6
CLR P3.7
LCALL DLY1
SETB P3.7 ;语音播报(倒车请注意)
;驱动继电器,转换传感器
LCALL HOU
LCALL DELAY1S
BACK: LCALL HOU
MOV A,P2
ORL A,#0F8H
CJNE A,#0F8H,L8 ;判断是否到起点
LJMP OVER2
L8: LCALL XUNJI
LJMP BACK
OVER2: DJNZ R0,LL
CLR EA ;到起点后关总中断
MOV P0,#0
MOV P1,#0
setb p2.5
CLR P3.6 ; 语音播报(任务完成 谢谢观赏)
LCALL DLY1
SETB P3.6
LJMP HH ;全部任务完成 程序暂停
LL: MOV P1,#0F0H ;停车接水
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
LCALL DELAY1S
SETB P2.3
SETB P2.1
SETB P1.7
LJMP ADVANCE
HH: CLR P3.4
CLR P3.5
SETB P3.6
SETB P3.7
LCALL DLY1
CLR P3.7
DD: MOV A,50H
MOV P0,A
CLR P2.6
ACALL D1MS
SETB P2.6
MOV A,51H
MOV P0,A
CLR P2.7
LCALL D1MS
SETB P2.7
LJMP DD
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -