📄 10-16.asm
字号:
;P0.0--P0.5为机械臂电机:
; 0.0--EA, 0.1与0.2--1, 0.3与0.4--2, 0.5--EB
;P2.0--P2.5为循迹电机
; 0.0与0.2--1, 0.1与0.3--2, 0.4--EA, 0.5--EB
;P3.0--P3.5为6个传感器输入
;MOV P0,#3H ;臂正(松弹簧,抓物块儿)
;MOV P0,#5H ;臂反(拉弹簧,放物块儿)
;MOV P0,#28H ;线正
;MOV P0,#30H ;线反
;MOV P0,#2BH ;正正
;MOV P0,#2BH ;正正
;MOV P0,#0 ;停
;MOV P0,#35H ;反反
;MOV P2,#15H ;右转
;MOV P2,#25H ;左转
;MOV P2,#35H ;前进
ORG 0000H
LJMP START
ORG 0030H
START: MOV P2,#35H
READY: MOV 20H,#3 ;过启动区与白区
MOV 19H,#3 ;终点判断,#3对应16H为#2
MOV 18H,#1 ;补偿判断
MOV 17H,#1 ;补偿常数
MOV 16H,#2 ;取得物快次数,#2为回头一次,取2次
MOV 15H,#5 ;放置常数 R5,5
MOV 14H,#5 ;放置判断 R4,5
MOV 13H,#4 ;取物判断 R3,4
MOV 12H,#4 ;取物常数 R2,4
MOV 11H,#4 ;回头常数 R1,4
MOV 10H,#4 ;回头判断 R0,4
CLR 21H ;判断是否前行 0前行 1倒行
CLR 22H ;判断是否取物 0取 1放
CLR 23H ;回头补偿, 0不补偿 1补偿
SETB 24H ;白区误差判断 1白区
BEGIN: MOV P0,#0
MOV P2,#35H ;前进
MOV P3,#0FFH
SEARCH: MOV A,16H
JZ JUDGE ;跳转是否到终点(为0跳转)
CHOOSE: JB 21H,RIGHT
LEFT: JNB P3.7,LCOUNT ;3.7左
LJMP BEGIN1
RIGHT: JNB P3.7,RCOUNT ;3.7HUITOU
LJMP BEGIN1
BEGIN1: LCALL D1
JNB P3.0,CHECK1
JNB P3.1,CHECK2
JNB P3.2,CHECK3
JNB P3.3,TR
JNB P3.4,TR
JNB P3.5,TR
LJMP LOST ;全白,
;--------------------------
;J1: LJMP CHECK1
;J2: LJMP CHECK2
;J3: LJMP CHECK3
;--------------------------
JUDGE: JB P3.7,BEGIN1
DJNZ 21H,BEGIN1
MOV 21H,#2
JUDGE1: LCALL D3
LCALL D3 ; P3.7离前面的传感器很远
DJNZ 19H,BEGIN1
LJMP JIEXIAN
LCOUNT: LJMP LCOUNT1
RCOUNT: LJMP RCOUNT1
FORW: MOV P2,#35H
LCALL D1
LJMP SEARCH
TL: MOV P2,#25H
LCALL D1
LJMP SEARCH
TR: MOV P2,#15H
LCALL D1
LJMP SEARCH
CHECK1: JB P3.3,TL
JB P3.4,TL
MOV P2,#35H ;全黑,暂时循迹,应为count1
LCALL D1 ;该前延时1s
LJMP SEARCH
CHECK2: JB P3.3,TL
JB P3.4,TL
MOV P2,#35H ;全黑,暂时循迹,应为count1
LCALL D1 ;该前延时1s
LJMP SEARCH
CHECK3:
JB P3.3,TL
JNB P3.4,TR
LJMP FORW
RCOUNT1:LCALL D2
JB P3.7,BEGIN1
DJNZ 10H,NEXT
LJMP RCOUNT2
RCOUNT2:MOV 10H,11H
LJMP REVERSE
LCOUNT1:LCALL D2
JB P3.7,BEGIN1
JB 24H,WHITE
JB 23H,F2 ;进入回头补偿
JNB 22H,LCATCH
LJMP LPLACE
LCATCH: DJNZ 13H,NEXT
LJMP LCATCH1
LCATCH1:MOV P2,#5
DEC 12H
MOV 13H,12H
LCALL LOAD ;机械臂取物子程序
SETB 22H ;重置为放物
LJMP BEGIN
LPLACE: DJNZ 14H,NEXT
LJMP LPLACE1
LPLACE1:MOV P2,#5
MOV 14H,15H
LCALL FINAL ;机械臂放物子程序
CLR 22H ;重置为取物
DEC 16H ;取物次数减1
SETB 23H ;开启补偿
LJMP BEGIN
F2: DJNZ 18H,NEXT
LJMP F22
F22: CLR 23H
INC 17H
MOV 18H,17H
LJMP REVERSE
NEXT: LCALL D3
LCALL D3 ;延时250ms后重新查询,防抖
LJMP BEGIN1
WHITE: DJNZ 20H,NEXT
LCALL D3
LCALL D3
CLR 24H
LJMP SEARCH
LOAD: LCALL D4
MOV P0,#3H ;臂正(松弹簧,抓物块儿)
LCALL D4
LCALL D4
LCALL D3
LCALL D3 ;4.25s
MOV P0,#0 ;停
LCALL D4 ;稳一下
RET
FINAL: LCALL D4
MOV P0,#5H ;臂反
LCALL D4
LCALL D4
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3 ;5s
MOV P0,#0
LCALL D4
RET
JIEXIAN:MOV P2,#5
LCALL D3
LCALL D3
MOV P0,#28H ;接线
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
MOV P0,#0
SJMP $ ;程序结束 原地等待
REVERSE:MOV P2,#35H
LCALL D4 ;延时1.125s,继续向前过黑线
MOV P2,#5
LCALL D3
MOV P2,#39H
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
LCALL D3
MOV P2,#5
CPL 21H
LJMP SEARCH
;------------------------------------
LOST: LJMP FORW
;------------------------------------
D1: MOV R1,#255
MOV R2,#10
D11: DJNZ R1,$
DJNZ R2,D11
RET ;5ms
D2: MOV R1,#255
MOV R2,#40
D22: DJNZ R1,$
DJNZ R2,D22
RET ;20ms
D3: MOV R1,#255
MOV R2,#255
MOV R3,#1
D33: DJNZ R1,$
DJNZ R2,D33
DJNZ R3,D33 ;125ms
RET
D4: MOV R1,#255
MOV R2,#255
MOV R3,#16
D44: DJNZ R1,$
DJNZ R2,D44
DJNZ R3,D44 ;2s
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -