新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機四驅無線遙控小車制作詳解

51單片機四驅無線遙控小車制作詳解

作者: 時間:2012-06-24 來源:網絡 收藏
源代碼:

本文引用地址:http://m.butianyuan.cn/article/171240.htm

  ;接收程序

  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 ;無限循環(huán)main程序

  LOOP:

  jnb ri,$ ;判斷接收位是否接收完

  clr ri ;接收完后清空接收位

  mov a,sbuf ;發(fā)送的數據給a

  reti ;返回后,a的值就會給p1

  END

  ;發(fā)送程序

  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 ;無限循環(huán)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,$ ;判斷是否發(fā)送完

  reti ;中斷返回

  END

51單片機相關文章:51單片機教程


雙控開關相關文章:雙控開關原理

上一頁 1 2 3 4 下一頁

評論


相關推薦

技術專區(qū)

關閉