一個51單片機做的雙擊通訊匯編程序 調(diào)試通過 proteus仿真+源代碼 給51黑電子論壇的朋友們分享下.
所有資料下載:
單片機與單片機之間的串口通信.zip
(39.38 KB, 下載次數(shù): 30)
2016-9-26 12:47 上傳
點擊文件名下載附件
發(fā)送程序:
- ;本程序收發(fā)數(shù)據(jù)采用查詢方式
- ORG 0000H
- AJMP START
- ORG 0030H
- START:MOV 30H,#0C0H ;傳送的16個數(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 ;定時器1置為方式2
- MOV TH1,#0F4H ;裝載定時器初值,波特率2400
- MOV TL1,#0F4H
- CLR EA
- SETB TR1 ;啟動定時器
- MOV PCON,#00H
- MOV SCON,#50H ;設定串口方式1,且準備接收應答信號
- LOOP1:MOV SBUF,#0E1H ;發(fā)聯(lián)絡信號
- JNB TI,[ DISCUZ_CODE_4 ]nbsp; ;等待一幀發(fā)送完畢
- CLR TI ;允許再發(fā)送
- JNB RI,[ DISCUZ_CODE_4 ]nbsp; ;等待2號機的應答信號
- CLR RI ;允許再接收
- MOV A,SBUF ;2號機應答后,瀆至A
- XRL A,#0E2H ;判斷2號機是否準備完畢
- JNZ LOOP1 ;2號機未準備好,繼續(xù)聯(lián)絡
- LOOP2:MOV R0,#30H ;2號機準備好,設數(shù)據(jù)塊指針初值
- MOV R7,#10H ;設定數(shù)據(jù)塊長度初值
- MOV R6,#00H ;清校驗和單元
- LOOP3:MOV SBUF,@R0 ;發(fā)送一個數(shù)據(jù)字節(jié)
- MOV A,R6
- ADD A,@R0 ;求校驗和
- MOV R6,A ;保存校驗和
- INC R0
- JNB TI,$
- CLR TI
- DJNZ R7,LOOP3 ;整個數(shù)據(jù)塊是否發(fā)送完畢
- MOV SBUF,R6 ;發(fā)送校驗和
- JNB TI,$
- CLR TI
- JNB RI,[ DISCUZ_CODE_4 ]nbsp; ;等待2號機的應答信號
- CLR RI
- MOV A,SBUF ;2號機應答,讀至A
- JNZ LOOP2 ;2號機應答”錯誤“,轉(zhuǎn)重新發(fā)送
- RET ;2號機應答”正確“,返回
復制代碼
接受程序:
- ;本程序收發(fā)數(shù)據(jù)采用查詢方式
- ORG 0000H
- AJMP START
- ORG 0030H
- START:MOV TMOD,#20H ;定時器1置為方式2
- MOV TH1,#0F4H ;裝載定時器初值,波特率2400
- MOV TL1,#0F4H
- CLR EA
- SETB TR1 ;啟動定時器
- MOV PCON,#00H
- MOV SCON,#50H ;設定串口方式1,且準備接收
- LOOP1:JNB RI,[ DISCUZ_CODE_5 ]nbsp; ;等待1號機的聯(lián)絡信號
- CLR RI
- MOV A,SBUF ;收到1號機信號
- XRL A,#0E1H ;判是否為1號機聯(lián)絡信號
- JNZ LOOP1 ;不是一號機聯(lián)絡信號,再等待
- MOV SBUF,#0E2H ;是1號機聯(lián)絡信號,發(fā)應答信號
- JNB TI,$
- CLR TI
- MOV R0,#30H ;設定數(shù)據(jù)快地址指針初值
- MOV R7,#10H ;設定數(shù)據(jù)塊長度初值
- MOV R6,#00H ;清校驗和單元
- LOOP2:JNB RI,$
- CLR RI
- MOV A,SBUF
- MOV @R0,A ;接收數(shù)據(jù)轉(zhuǎn)儲
- INC R0
- ADD A,R6 ;求校驗和
- MOV R6,A
- DJNZ R7,LOOP2 ;判斷數(shù)據(jù)塊是否接收完畢
- JNB RI,[ DISCUZ_CODE_5 ]nbsp; ;完畢,接收1號機發(fā)來的校驗和
- CLR RI
- MOV A,SBUF
- XRL A,R6 ;比較校驗和
- JZ END1 ;校驗和相等,跳至發(fā)正確標志
- MOV SBUF,#0FFH ;校驗和不相等,發(fā)錯誤標志
- 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
復制代碼
|