ben147
2010-11-16, 12:40 AM
各位大大
小弟目前正在做使用8051組合語言來使用超音波控制的自走車
現階段已經做出前進 轉彎
想再加入一定距離會自動停止的功能 以免碰撞(使用超音波發射器)
試過很多次都失敗 請大大們給我點建議如何加入此功能的程式或需再加上其他原件
ORG 00H ;開頭位置
START:
MOV40H,#10
MOV41H,#2
SETBP1.0;馬達直行
CLRP1.1
SETBP1.2
CLRP1.3
;==========================
;========主程式迴圈=========
;==========================
LOOP:
L2:
CALLWAVED
MOVA,P2;P2=>A
CPLA;A反相
ANLA,#00000111B;取3位元
CJNEA,#7,M1;A=7時(111)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M1:
CJNEA,#2,M2;A=2時(010)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M2:
CJNEA,#3,M3;A=3時(011)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M3:
CJNEA,#6,M4;A=6時(110)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M4:
CJNEA,#1,M5;A=1時(001)
MOV40H,#10
MOV41H,#2
CLRP1.0;車子右轉
CLRP1.1
SETBP1.2
CLRP1.3
CALLDELAY
JMPM8
M5:
CJNEA,#4,M7;A=4時(100)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子左轉
CLRP1.1
CLRP1.2
CLRP1.3
CALLDELAY
JMPM8
M7:
CJNEA,#0,M8;A=0時(000)
DJNZ40H,M8
MOV40H,#10
DJNZ41H,M8
MOV41H,#2
CLRP1.0;車子停
CLRP1.1
CLRP1.2
CLRP1.3
JMPM8
M8:
JMPLOOP
WAVED:
CLRP3.0;選擇訊號00
CLRP3.1
CALLDELAY
MOV R6,#5
WL1:MOV R7,#5
WL2:JNBP2.7,WD1;有超音波訊號則跳WD1
DJNZ R7,WL2
DJNZ R6,WL1
SETBP2.0;P2.0設為1,右邊LED暗
JMPWAV2
WD1:
CLRP2.0;P2.0設為0,右邊LED亮
WAV2:
SETBP3.0;選擇訊號01
CLRP3.1
CALLDELAY
MOV R6,#5
WL3:MOV R7,#5
WL4:JNBP2.7,WD2;有超音波訊號則跳WD2
DJNZ R7,WL4
DJNZ R6,WL3
SETBP2.1;P2.1設為1,中間LED暗
JMPWAV3
WD2:
CLRP2.1;P2.1設為0,中間LED亮
WAV3:
CLRP3.0;選擇訊號10
SETBP3.1
CALLDELAY
MOV R6,#5
WL5:MOV R7,#5
WL6:JNBP2.7,WD3;有超音波訊號則跳WD3
DJNZ R7,WL6
DJNZ R6,WL5
SETBP2.2;P2.2設為1,左邊LED暗
JMPWAVOK
WD3:
CLRP2.2;P2.2設為0,左邊LED亮
WAVOK:
RET
; ======================
; ==廷時副程式R5來定時==
; ======================
DELAY: MOVR5,#2
DL0:MOV R6,#60
DL1:MOV R7,#60
DL2:DJNZ R7,DL2
DJNZ R6,DL1
DJNZ R5,DL0
RET
END8051的問題
------------------------------------------------------------------------------------------
以上是原先正常動作的程式 前進 右轉 左轉 一開始設定成自走一小段距離
請問該如何加入及怎麼加入我的的功能呢?
下面附加我的圖片
贊助商連結
小弟目前正在做使用8051組合語言來使用超音波控制的自走車
現階段已經做出前進 轉彎
想再加入一定距離會自動停止的功能 以免碰撞(使用超音波發射器)
試過很多次都失敗 請大大們給我點建議如何加入此功能的程式或需再加上其他原件
ORG 00H ;開頭位置
START:
MOV40H,#10
MOV41H,#2
SETBP1.0;馬達直行
CLRP1.1
SETBP1.2
CLRP1.3
;==========================
;========主程式迴圈=========
;==========================
LOOP:
L2:
CALLWAVED
MOVA,P2;P2=>A
CPLA;A反相
ANLA,#00000111B;取3位元
CJNEA,#7,M1;A=7時(111)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M1:
CJNEA,#2,M2;A=2時(010)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M2:
CJNEA,#3,M3;A=3時(011)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M3:
CJNEA,#6,M4;A=6時(110)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子往前
CLRP1.1
SETBP1.2
CLRP1.3
JMPM8
M4:
CJNEA,#1,M5;A=1時(001)
MOV40H,#10
MOV41H,#2
CLRP1.0;車子右轉
CLRP1.1
SETBP1.2
CLRP1.3
CALLDELAY
JMPM8
M5:
CJNEA,#4,M7;A=4時(100)
MOV40H,#10
MOV41H,#2
SETBP1.0;車子左轉
CLRP1.1
CLRP1.2
CLRP1.3
CALLDELAY
JMPM8
M7:
CJNEA,#0,M8;A=0時(000)
DJNZ40H,M8
MOV40H,#10
DJNZ41H,M8
MOV41H,#2
CLRP1.0;車子停
CLRP1.1
CLRP1.2
CLRP1.3
JMPM8
M8:
JMPLOOP
WAVED:
CLRP3.0;選擇訊號00
CLRP3.1
CALLDELAY
MOV R6,#5
WL1:MOV R7,#5
WL2:JNBP2.7,WD1;有超音波訊號則跳WD1
DJNZ R7,WL2
DJNZ R6,WL1
SETBP2.0;P2.0設為1,右邊LED暗
JMPWAV2
WD1:
CLRP2.0;P2.0設為0,右邊LED亮
WAV2:
SETBP3.0;選擇訊號01
CLRP3.1
CALLDELAY
MOV R6,#5
WL3:MOV R7,#5
WL4:JNBP2.7,WD2;有超音波訊號則跳WD2
DJNZ R7,WL4
DJNZ R6,WL3
SETBP2.1;P2.1設為1,中間LED暗
JMPWAV3
WD2:
CLRP2.1;P2.1設為0,中間LED亮
WAV3:
CLRP3.0;選擇訊號10
SETBP3.1
CALLDELAY
MOV R6,#5
WL5:MOV R7,#5
WL6:JNBP2.7,WD3;有超音波訊號則跳WD3
DJNZ R7,WL6
DJNZ R6,WL5
SETBP2.2;P2.2設為1,左邊LED暗
JMPWAVOK
WD3:
CLRP2.2;P2.2設為0,左邊LED亮
WAVOK:
RET
; ======================
; ==廷時副程式R5來定時==
; ======================
DELAY: MOVR5,#2
DL0:MOV R6,#60
DL1:MOV R7,#60
DL2:DJNZ R7,DL2
DJNZ R6,DL1
DJNZ R5,DL0
RET
END8051的問題
------------------------------------------------------------------------------------------
以上是原先正常動作的程式 前進 右轉 左轉 一開始設定成自走一小段距離
請問該如何加入及怎麼加入我的的功能呢?
下面附加我的圖片
贊助商連結