51單片機四驅無線遙控小車制作詳解
;接收程序
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單片機教程
雙控開關相關文章:雙控開關原理
評論