51单片机四驱无线遥控小车制作详解

时间:2012-06-24来源:网络
源代码:

  ;接收程序

  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 ;设置波特率在9600

  MOV TL1,#0fdH ;设置波特率在9600

  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

1 2 3 4

关键词: 制作 详解 小车 遥控 无线 单片机

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版