我寫的下位機匯編代碼
僅僅供壇友參考
未經過本人授權,嚴禁用于商業!!!
;試驗手機wifi視頻遙控坦克匯編代碼
;11.0592MHz晶振+AT89C2051/4051
;Lxa0最后修改于2016-8-7--V2.0
;t0備用,t1產生9600波特率
;前進(01)
;后退(02)
;左轉(03)
;右轉(04)
;停止(00)
org 0000h
ajmp mm ;轉主程序
org 0023h
ajmp ly ;轉串口接收
;主程序*******************************************************
org 0100h
mm:nop
mov p1,#0ffh ;關閉全部
mov r0,#29h ;取出串口數據后存放的首地址
mov r1,#00h ;紀錄取出串口數據的次數
mov r2,#00h ;備用
mov r3,#00h ;備用
mov r4,#00h ;r4和r5短延時用
mov r5,#00h
mov r6,#00h ;r6和r7長延時用
mov r7,#00h
mov 20h,#00h ;20h設置wifi標志
mov 21h,#00h ;21h設置動作標志
mov 22h,#00h ;動作代碼存放單元
mov sp,#4fh ;設堆棧入口50h
mov scon,#50h ;設置串口方式1,允許串口接收
mov pcon,#00h ;設置波特率9600
mov tmod,#21h ;T0設方式1,T1方式2(自動重裝)
mov th1,#0fdh ;T1設初始值
mov tl1,#0fdh ;TH1=TL1=#0fdh(波特率9600)
clr et1 ;禁止T1中斷
clr ri
clr ti
setb tr1 ;開T1定時器
setb es ;開串口中斷
setb ea ;開總中斷
mm1:nop
acall dz ;動作
acall sgd ;閃光燈
sjmp mm1
;接收并取出串口接收到的數據指令*******************************
org 0023h
ly:clr ri ;先清零串口接收中斷位
mov 32h,sbuf ;把接收到的指令數據放到32h單元
setb 00h ;設置接收到數據的標志
ly00:reti
;執行wifi指令轉換*********************************************
org 0200h
dz:push acc
jnb 00h,dz00
mov a,32h ;從32h單元取動作指令
cjne a,#01h,dz1 ;是前(01)?
mov p1,#0ffh ;關閉全部
mov p1,#0ffh ;關閉全部
nop
nop
mov p1,#11110101b ;左右前進
mov p1,#11110101b ;為保證可靠動作而執行2遍(下同)
sjmp dz00
dz1:mov a,32h
cjne a,#02h,dz2 ;是后(02)?
mov p1,#0ffh ;關閉全部
mov p1,#0ffh ;關閉全部
nop
nop
mov p1,#11111010b ;左右后退
mov p1,#11111010b
sjmp dz00
dz2:mov a,32h
cjne a,#03h,dz3 ;是左(03)?
mov p1,#0ffh ;關閉全部
mov p1,#0ffh ;關閉全部
nop
nop
mov p1,#11111101b ;左轉
mov p1,#11111101b
sjmp dz00
dz3:mov a,32h
cjne a,#04h,dz4 ;是右(04)?
mov p1,#0ffh ;關閉全部
mov p1,#0ffh ;關閉全部
nop
nop
mov p1,#11110111b ;右轉
mov p1,#11110111b
sjmp dz00
dz4:mov a,32h
cjne a,#00h,dz00 ;是停止(00)?
mov p1,#0ffh ;停止運行
mov p1,#0ffh
dz00:nop
mov 20h,#00h
mov 30h,#00h
mov 31h,#00h
mov 32h,#00h
mov 33h,#00h
mov 34h,#00h
pop acc
ret
org 0300h
sgd:clr p3.7 ;Gled閃爍發光
acall dys
setb p3.7
acall cys
ret
dys:mov r4,#00h ;短延時
mov r5,#04h
dys1:djnz r4,dys1
dys2:djnz r5,dys1
ret
cys:mov r6,#00h ;長延時
mov r7,#0ffh
cys1:djnz r6,cys1
cys2:djnz r7,cys1
ret
end |