?? 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 + -