我写的下位机汇编代码
仅仅供坛友参考
未经过本人授权,严禁用于商业!!!
;试验手机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 |