⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10-16.asm

📁 Mc51单片机程序+Proteus仿真文件。汇编语言编写
💻 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 + -