源代码:;接收程序ORG 0 ;程序起始地址SJMP STAR ;跳转到主程序ORG 30H ;串口中断地址sjmp loop ;跳转到中断服务程序STAR:MOV SP,#5FH ;设置堆栈MOV SCON,#50H ;串行数据格式(详情请参考51手册)MOV TMOD,#20H ;定时器工作方式(请参考51手册)MOV PCON,#0 ;波特率不倍速(请参考51手册)MOV TH1,#0fdH ;设置波特率在9600MOV TL1,#0fdH ;设置波特率在9600SETB EA ;开起中断clr ET1 ;关闭定时1中断SETB ES ;开起串口中断SETB TR1 ;启动定时器1mov a,#0 ;mov p1,a ;设置初始值,即开机p1输出00h小车不动作main:mov p1,a ;把a值给p1端口sjmp main ;无限循环main程序LOOP: jnb ri,$ ;判断接收位是否接收完clr ri ;接收完后清空接收位mov a,sbuf ;发送的数据给areti ;返回后,a的值就会给p1END;发送程序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 ;设置波特率在9600MOV TL1,#0fdHsetb EA ;开起中断clr ET1 ;关闭定时1中断setb ES ;开起串口中断SETB TR1 ;启动定时器1main:lcall kcs ;调用按键扫描程序jnz key ;有键按下则跳转到key程序段sjmp main ;无限循环main程序kcs: mov p1,#0ffh ;p1给初值mov a,p1 ;p1的数值给acpl a ;取反aanl a,#0ffh ;与运算ret key:lcall delay ;软件延时程序,按键去抖jb acc.0,send1jb acc.1,send2jb acc.2,send3jb acc.3,send4jb acc.4,send5retDELAY:MOV R5,#20D1:MOV R6,#10D2:MOV R7,#100DJNZ R7,$DJNZ R6,D2DJNZ R5,D1ret send1:mov r1,#10101010b ;前进指令sjmp sendsend2:mov r1,#01010101b ;后退指令sjmp sendsend3:mov r1,#01011010b ;左转指令sjmp sendsend4:mov r1,#10100101b ;右转指令sjmp sendsend5:mov r1,#00h ;停止指令sjmp sendsend: MOV SBUF,r1 ;指令给sbufJNB TI,$ ;判断是否发送完reti ;中断返回END
评论