|
|
一個(gè)51單片機(jī)做的雙擊通訊匯編程序 調(diào)試通過(guò) proteus仿真+源代碼 給51黑電子論壇的朋友們分享下.
所有資料下載:
單片機(jī)與單片機(jī)之間的串口通信.zip
(39.38 KB, 下載次數(shù): 30)
2016-9-26 12:47 上傳
點(diǎn)擊文件名下載附件
發(fā)送程序:
- ;本程序收發(fā)數(shù)據(jù)采用查詢方式
- ORG 0000H
- AJMP START
- ORG 0030H
- START:MOV 30H,#0C0H ;傳送的16個(gè)數(shù)據(jù)(0~F)
- MOV 31H,#0F9H
- MOV 32H,#0A4H
- MOV 33H,#0B0H
- MOV 34H,#99H
- MOV 35H,#92H
- MOV 36H,#82H
- MOV 37H,#0F8H
- MOV 38H,#80H
- MOV 39H,#90H
- MOV 3AH,#88H
- MOV 3BH,#83H
- MOV 3CH,#0C6H
- MOV 3DH,#0A1H
- MOV 3EH,#086H
- MOV 3FH,#08EH
- MOV TMOD,#20H ;定時(shí)器1置為方式2
- MOV TH1,#0F4H ;裝載定時(shí)器初值,波特率2400
- MOV TL1,#0F4H
- CLR EA
- SETB TR1 ;啟動(dòng)定時(shí)器
- MOV PCON,#00H
- MOV SCON,#50H ;設(shè)定串口方式1,且準(zhǔn)備接收應(yīng)答信號(hào)
- LOOP1:MOV SBUF,#0E1H ;發(fā)聯(lián)絡(luò)信號(hào)
- JNB TI,[ DISCUZ_CODE_4 ]nbsp; ;等待一幀發(fā)送完畢
- CLR TI ;允許再發(fā)送
- JNB RI,[ DISCUZ_CODE_4 ]nbsp; ;等待2號(hào)機(jī)的應(yīng)答信號(hào)
- CLR RI ;允許再接收
- MOV A,SBUF ;2號(hào)機(jī)應(yīng)答后,瀆至A
- XRL A,#0E2H ;判斷2號(hào)機(jī)是否準(zhǔn)備完畢
- JNZ LOOP1 ;2號(hào)機(jī)未準(zhǔn)備好,繼續(xù)聯(lián)絡(luò)
- LOOP2:MOV R0,#30H ;2號(hào)機(jī)準(zhǔn)備好,設(shè)數(shù)據(jù)塊指針初值
- MOV R7,#10H ;設(shè)定數(shù)據(jù)塊長(zhǎng)度初值
- MOV R6,#00H ;清校驗(yàn)和單元
- LOOP3:MOV SBUF,@R0 ;發(fā)送一個(gè)數(shù)據(jù)字節(jié)
- MOV A,R6
- ADD A,@R0 ;求校驗(yàn)和
- MOV R6,A ;保存校驗(yàn)和
- INC R0
- JNB TI,$
- CLR TI
- DJNZ R7,LOOP3 ;整個(gè)數(shù)據(jù)塊是否發(fā)送完畢
- MOV SBUF,R6 ;發(fā)送校驗(yàn)和
- JNB TI,$
- CLR TI
- JNB RI,[ DISCUZ_CODE_4 ]nbsp; ;等待2號(hào)機(jī)的應(yīng)答信號(hào)
- CLR RI
- MOV A,SBUF ;2號(hào)機(jī)應(yīng)答,讀至A
- JNZ LOOP2 ;2號(hào)機(jī)應(yīng)答”錯(cuò)誤“,轉(zhuǎn)重新發(fā)送
- RET ;2號(hào)機(jī)應(yīng)答”正確“,返回
復(fù)制代碼
接受程序:
- ;本程序收發(fā)數(shù)據(jù)采用查詢方式
- ORG 0000H
- AJMP START
- ORG 0030H
- START:MOV TMOD,#20H ;定時(shí)器1置為方式2
- MOV TH1,#0F4H ;裝載定時(shí)器初值,波特率2400
- MOV TL1,#0F4H
- CLR EA
- SETB TR1 ;啟動(dòng)定時(shí)器
- MOV PCON,#00H
- MOV SCON,#50H ;設(shè)定串口方式1,且準(zhǔn)備接收
- LOOP1:JNB RI,[ DISCUZ_CODE_5 ]nbsp; ;等待1號(hào)機(jī)的聯(lián)絡(luò)信號(hào)
- CLR RI
- MOV A,SBUF ;收到1號(hào)機(jī)信號(hào)
- XRL A,#0E1H ;判是否為1號(hào)機(jī)聯(lián)絡(luò)信號(hào)
- JNZ LOOP1 ;不是一號(hào)機(jī)聯(lián)絡(luò)信號(hào),再等待
- MOV SBUF,#0E2H ;是1號(hào)機(jī)聯(lián)絡(luò)信號(hào),發(fā)應(yīng)答信號(hào)
- JNB TI,$
- CLR TI
- MOV R0,#30H ;設(shè)定數(shù)據(jù)快地址指針初值
- MOV R7,#10H ;設(shè)定數(shù)據(jù)塊長(zhǎng)度初值
- MOV R6,#00H ;清校驗(yàn)和單元
- LOOP2:JNB RI,$
- CLR RI
- MOV A,SBUF
- MOV @R0,A ;接收數(shù)據(jù)轉(zhuǎn)儲(chǔ)
- INC R0
- ADD A,R6 ;求校驗(yàn)和
- MOV R6,A
- DJNZ R7,LOOP2 ;判斷數(shù)據(jù)塊是否接收完畢
- JNB RI,[ DISCUZ_CODE_5 ]nbsp; ;完畢,接收1號(hào)機(jī)發(fā)來(lái)的校驗(yàn)和
- CLR RI
- MOV A,SBUF
- XRL A,R6 ;比較校驗(yàn)和
- JZ END1 ;校驗(yàn)和相等,跳至發(fā)正確標(biāo)志
- MOV SBUF,#0FFH ;校驗(yàn)和不相等,發(fā)錯(cuò)誤標(biāo)志
- JNB TI,[ DISCUZ_CODE_5 ]nbsp; ;轉(zhuǎn)重新接收
- CLR TI
- SJMP LOOP2
- END1: MOV SBUF,#00H
- JS1: MOV R0,#30H ;顯示接到的數(shù)據(jù)
- JS3: MOV A,@R0
- MOV P0,A
- ACALL DELAY
- INC R0
- MOV A,R0
- CJNE A,#40H,JS2
- AJMP JS1
- JS2: AJMP JS3
- DELAY: MOV R4,#04H
- D1: MOV R7,#0FFH
- D2: MOV R6,#0FFH
- DJNZ R6,$
- DJNZ R7,D2
- DJNZ R4,D1
- RET
- END
復(fù)制代碼
|
|