SETB EA ;开起中断
clr ET1 ;关闭定时1中断
SETB ES ;开起串口中断
SETB TR1 ;启动定时器1
mov a,#0 ;
mov p1,a ;设置初始值,即开机p1输出00h小车不动作
main:
mov p1,a ;把a值给p1端口
sjmp main ;无限循环main程序
LOOP:
jnb ri,$ ;判断接收位是否接收完
clr ri ;接收完后清空接收位
mov a,sbuf ;发送的数据给a
reti ;返回后,a的值就会给p1
END
;发送程序
ORG 0 ;程序起始地址
SJMP START ;跳转到主程序
ORG 30H ;串口中断地址
START:
MOV SP,#5FH ;设置堆栈
MOV TMOD,#20H ;定时器工作方式(请参考51手册)
MOV PCON,#0 ;波特率不倍速(请参考51手册)
MOV SCON,#50H ;串行数据格式(详情请参考51手册)
MOV TH1,#0fdH ;设置波特率在9600
MOV TL1,#0fdH
setb EA ;开起中断
clr ET1 ;关闭定时1中断
setb ES ;开起串口中断
SETB TR1 ;启动定时器1
main:
lcall kcs ;调用按键扫描程序
jnz key ;有键按下则跳转到key程序段
sjmp main ;无限循环main程序
kcs:
mov p1,#0ffh ;p1给初值
mov a,p1 ;p1的数值给a
cpl a ;取反a
anl a,#0ffh ;与运算
ret
key:
lcall delay ;软件延时程序,按键去抖
jb aCC.0,send1
jb acc.1,send2
jb acc.2,send3
jb acc.3,send4
jb acc.4,send5
ret
DELAY:
MOV R5,#20
D1:MOV R6,#10
D2:MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
ret
send1:
mov r1,#10101010b ;前进指令
sjmp send
send2:
mov r1,#01010101b ;后退指令
sjmp send
send3:
mov r1,#01011010b ;左转指令
sjmp send
send4:
mov r1,#10100101b ;右转指令
sjmp send
send5:
mov r1,#00h ;停止指令
sjmp send
send:
MOV SBUF,r1 ;指令给sbuf
JNB TI,$ ;判断是否发送完
reti ;中断返回
END
上一篇:红外遥控延熄开关的制作