源代碼:;接收程序ORG 0 ;程序起始地址SJMP STAR ;跳轉(zhuǎn)到主程序ORG 30H ;串口中斷地址sjmp loop ;跳轉(zhuǎn)到中斷服務(wù)程序STAR:MOV SP,#5FH ;設(shè)置堆棧MOV SCON,#50H ;串行數(shù)據(jù)格式(詳情請(qǐng)參考51手冊(cè))MOV TMOD,#20H ;定時(shí)器工作方式(請(qǐng)參考51手冊(cè))MOV PCON,#0 ;波特率不倍速(請(qǐng)參考51手冊(cè))MOV TH1,#0fdH ;設(shè)置波特率在9600MOV TL1,#0fdH ;設(shè)置波特率在9600SETB EA ;開(kāi)起中斷clr ET1 ;關(guān)閉定時(shí)1中斷SETB ES ;開(kāi)起串口中斷SETB TR1 ;啟動(dòng)定時(shí)器1mov a,#0 ;mov p1,a ;設(shè)置初始值,即開(kāi)機(jī)p1輸出00h小車(chē)不動(dòng)作main:mov p1,a ;把a(bǔ)值給p1端口sjmp main ;無(wú)限循環(huán)main程序LOOP: jnb ri,$ ;判斷接收位是否接收完clr ri ;接收完后清空接收位mov a,sbuf ;發(fā)送的數(shù)據(jù)給areti ;返回后,a的值就會(huì)給p1END;發(fā)送程序ORG 0 ;程序起始地址SJMP START ;跳轉(zhuǎn)到主程序ORG 30H ;串口中斷地址START:MOV SP,#5FH ;設(shè)置堆棧MOV TMOD,#20H ;定時(shí)器工作方式(請(qǐng)參考51手冊(cè))MOV PCON,#0 ;波特率不倍速(請(qǐng)參考51手冊(cè))MOV SCON,#50H ;串行數(shù)據(jù)格式(詳情請(qǐng)參考51手冊(cè))MOV TH1,#0fdH ;設(shè)置波特率在9600MOV TL1,#0fdHsetb EA ;開(kāi)起中斷clr ET1 ;關(guān)閉定時(shí)1中斷setb ES ;開(kāi)起串口中斷SETB TR1 ;啟動(dòng)定時(shí)器1main:lcall kcs ;調(diào)用按鍵掃描程序jnz key ;有鍵按下則跳轉(zhuǎn)到key程序段sjmp main ;無(wú)限循環(huán)main程序kcs: mov p1,#0ffh ;p1給初值mov a,p1 ;p1的數(shù)值給acpl a ;取反aanl a,#0ffh ;與運(yùn)算ret key:lcall delay ;軟件延時(shí)程序,按鍵去抖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 ;前進(jìn)指令sjmp sendsend2:mov r1,#01010101b ;后退指令sjmp sendsend3:mov r1,#01011010b ;左轉(zhuǎn)指令sjmp sendsend4:mov r1,#10100101b ;右轉(zhuǎn)指令sjmp sendsend5:mov r1,#00h ;停止指令sjmp sendsend: MOV SBUF,r1 ;指令給sbufJNB TI,$ ;判斷是否發(fā)送完reti ;中斷返回END
評(píng)論