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