双机之间的串行通信设计 c语言编程,双机串行通信设计精品.doc-资源下载人人文库网...
雙機串行通信設計 精品.doc
所屬課程名稱 單片機原理與接口技術 題 目 雙機串行通信 二 總體設計2.1 設計目的 通過本次課題設計,應用單片機原理及其接口技術等所學相關知識及查閱資料,完成簡易雙機串行通信設計,以達到理論與實踐更好的結合、進一步提高綜合運用所學知識和設計的能力的目的。通過本次設計的訓練,可以使我在基本思路和基本方法上對基于MCS-51單片機的嵌入式系統設計有一個比較感性的認識,并具備一定程度的設計能力。2.2 設計任務兩片單片機之間進行串行通信,發送端將0f循環發送到接收端,完成后在接收端的led 燈亮。2.3 設計方法本次設計,對于兩片89C51,采用RS232進行雙機通信。發送方的數據由串行口TXD段輸出。接受方接收后,燈亮。為提高抗干擾能力,還可以在輸入輸出端加光耦合進行光電隔離。軟件部分,通過通信協議進行發送接收,主機先送AAH給從機,當從機接收到AAH后,向主機回答BBH。主機收到BBH后就把數碼表TAB16中的10個數據送給從機,并發送檢驗和。從機收到16個數據并計算接收到數據的檢驗和,與主機發送來的檢驗和進行比較,若檢驗和相同則發送00H給主機;否則發送FFH給主機,重新接受。從機收到16個正確數據后送到一個數碼管顯示。三 硬件系統設計3.1基本功能:利用89c51完成兩片單片機之間進行串行通信。3.2可選器件:51系列單片機、電容、LED燈本設計是硬件電路和軟件編程相結合的設計方案,選擇合適的編程語言是一個重要的環節。在單片機的應用系統程序設計時,常用的是匯編語言和C語言。C語言雖然執行效率沒有匯編語言高,但語言簡潔,使用方便,靈活,運算豐富,表達化類型多樣化,數據結構類型豐富,具有結構化的控制語句。本著學習和創新的精神,我們采用匯編語言編寫了程序。3.1 51單片機串行通信功能圖1.AT89C51計算機與外界的信息交換稱為通信,常用的通信方式有兩種:并行通信和串行通信。51單片機用4個接口與外界進行數據輸入與數據輸出就是并行通信,并行通信的特點是傳輸信號的速度快,但所用的信號線較多,成本高,傳輸的距離較近。串行通信的特點是只用兩條信號線(一條信號線,再加一條地線作為信號回路)即可完成通信,成本低,傳輸的距離較遠。51單片機的串行接口是一個全雙工的接口,它可以作為UART(通用異步接受和發送器)用,也可以作為同步移位寄存器用。51單片機串行接口的結構如下:(1)數據緩沖器(SBUF)接受或發送的數據都要先送到SBUF緩存。有兩個,一個緩存,另一個接受,用同一直接地址99H,發送時用指令將數據送到SBUF即可啟動發送;接收時用指令將SBUF中接收到的數據取出。(2)串行控制寄存器(PCON)SCON用于串行通信方式的選擇,收發控制及狀態指示,各位含義如下:SM0SM1SM2RENTB8RB8TIRISM0,SM1:串行接口工作方式選擇位,這兩位組合成00,01,10,11對應于工作方式0、1、2、3。串行接口工作方式特點見下表SM0SM1工作方式功能波特率0008位同步移位寄存器(用于I/O擴展)fORC/1201110位異步串行通信(UART)可變(T1溢出率*2SMOD/32)10211位異步串行通信(UART)fORC/64或fORC/3211311位異步串行通信(UART)可變(T1溢出率*2SMOD/32)SM2:多機通信控制位。REN:接收允許控制位。軟件置1允許接收;軟件置0禁止接收。TB8:方式2或3時,TB8為要發送的第9位數據,根據需要由軟件置1或清0。RB9:在方式2或3時,RB8位接收到的第9位數據,實際為主機發送的第9位數據TB8,使從機根據這一位來判斷主機發送的時呼叫地址還是要傳送的數據。TI:發送中斷標志。發送完一幀數據后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續發送。RI:接收中斷標志。接收完一幀數據后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續接收。(3)輸入移位寄存器接收的數據先串行進入輸入移位寄存器,8位數據全移入后,再并行送入接收SBUF中。(4)波特率發生器波特率發生器用來控制串行通信的數據傳輸速率的,51系列單片機用定時器T1作為波特率發生器,T1設置在定時方式。波特率時用來表示串行通信數據傳輸快慢程度的物理量,定義為每秒鐘傳送的數據位數。(5)電源控制寄存器PCON其最高位為SMOD。(6)波特率計算當定時器T1工作在定時方式的時候,定時器T1溢出率=(T1計數率)/(產生溢出所需機器周期)。由于是定時方式,T1計數率= fORC/12。產生溢出所需機器周期數=模M-計數初值X。3.2 整體電路設計最終設計電路如下圖3所示,發送方的數據由串行口TXD段輸出,經過電平轉換芯片MAX232將TTL電平轉換為RS232電平輸出,經過傳輸線將信號傳送到接收端。圖2.整體電路四 程序設計通過通信協議進行發送接收,主機先送AAH給從機,當從機接收到AAH后,向主機回答BBH。主機收到BBH后就把數碼表TAB16中的10個數據送給從機,并發送檢驗和。從機收到16個數據并計算接收到數據的檢驗和,與主機發送來的檢驗和進行比較,若檢驗和相同則發送00H給主機;否則發送FFH給主機,重新接受。從機收到16個正確數據后送到一個數碼管顯示。4.1 串行通信軟件實現(1)串行口工作于方式1;用定時器1產生2400bit/s的波特率,工作于方式2。(2)功能:將本機ROM中數碼表TAB16中的16個數發送到從機,并保存在從機內部ROM中,從機收到這16個數據后送到一個數碼管循環顯示。(3)通信協議:主機首先發送連絡信號(AAH),從機接收到之后返回一個連絡信號(BBH)表示從機已準備好接收。(4)通信過程使用第九位發送奇偶校驗位。(5)從機接收到一個數據后,立即進行奇偶校驗,若數據沒有錯誤,則返回00H,否則返回FFH。(6)主機發送一個數據后,等待從機返回數據;若為00H,則繼續發送下一個數據,若為FFH,則重新發送數據。4.2 程序流程圖(1)發送端程序流程圖主程序開始從機是否回答BBH?程序初始化主機發送AAHN主機發送數據,檢驗和輸出完成?N清除標志位(2) 接收方程序流程圖主程序開始檢驗和相等?程序初始化接收數據,計算檢驗和N發送00H至主機接收完成?N清除標志位發送FFH,重新接收顯示4.3:源程序匯編語言程序:發送程序清單如下: START:CLR EA MOV TMOD,#20H ;定時器1置為方式2 MOV TH1,#0F4H ;裝載定時器初值,波特率2400 MOV TL1,#0F4H MOV PCON,#00H SETB TR1 ;啟動定時器 MOV SCON,#50H ;設定串口方式1,且準備接收應答信號 LOOP1:MOV SBUF,#0AAH ;發聯絡信號 JNB TI,$ ;等待一幀發送完畢 CLR TI ;允許再發送 JNB RI,$ ;等待2號機的應答信號 CLR RI ;允許再接收 MOV A,SBUF ;2號機應答后,讀至A XRL A,#0BBH ;判斷2號機是否準備完畢 JNZ LOOP1 ;2號機未準備好,繼續聯絡 LOOP2:MOV R0,#40H ;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,$ ;等待2號機的應答信號 CLR RI MOV A,SBUF ;2號機應答,讀至A JNZ LOOP2 ;2號機應答“錯誤”,轉重新發送 RET ;2號機應答“正確”,返回接收程序清單如下: START:CLR EA CLR P1.0MOV TMOD,#20H MOV TH1,#0F4H MOV TL1,#0F4H MOV PCON,#00H SETB TR1 MOV SCON,#50H ;設定串口方式1,且準備接收 LOOP1:JNB RI,$ ;等待1號機的聯絡信號 CLR RI MOV A,SBUF ;收到1號機信號 XRL A,#0AAH ;判是否為1號機聯絡信號 JNZ LOOP1 ;不是1號機聯絡信號,再等待 MOV SBUF,#0BBH ;是1號機聯絡信號,發應答信號 JNB TI,$ CLR TI MOV R0,#40H ;設定數據塊地址指針初值 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,$ ;完畢,接收1號機發來的校驗和 CLR RI MOV A,SBUF XRL A,R6 ;比較校驗和 JZ END1 ;校驗和相等,跳至發正確標志 MOV SBUF,#0FFH ;校驗和不相等,發錯誤標志 JNB TI,$ ;轉重新接收 CLR TI END1:SETB P1.0MOV SBUF,#00H RET五 系統調試與存在的問題在protues上進行仿真實驗。首先使用Keil將編寫完成的程序編譯生成HEX文件,將HEX文件錄到兩片單片機中,進行仿真實驗,結果如下圖所示,可以看到,接收端接收到數據。圖4.仿真圖5.1 硬件調試常見故障:1、邏輯錯誤:它是由設計錯誤或加工過程中的工藝性錯誤所造成的。這類錯誤包括錯線、開路、短路等。2、元器件失效:有兩方面的原因:一是器件本身已損壞或性能不符合要求;二是組裝錯誤造成元件失效,如電解電容、集成電路安裝方向錯誤等。3、可靠性差:因其可靠性差的原因很多,如金屬化孔、接插件接觸不良會造成系統時好時壞,經不起振動;走線和布局不合理也會引起系統可靠性差。4、電源故障:若樣機由電源故障,則加電后很容易造成器件損壞。電源故障包括電壓值不符合設計要求,電源引線和插座不對,功率不足,負載能力差等。調試方法:包括多級調試和聯機調試。在調試過程中要針對可能出現的故障認真分析,直至檢查出原因并排除。本次硬件調試過程中,對所出現的問題進行了認真的分析和改正,最后能夠很好的達到設計要求的效果。5.2 軟件調試軟件調試一般分為以下四個階段:1、 編寫程序并查錯;2、 在匯編語言的編譯系統中編譯源程序3、 對程序進行編譯連接,并及時發現程序中存在的錯誤;4、 改正錯誤。在軟件調試過程中,對出現的錯誤進行了認真的分析和修改,多次調試成功后,能夠很好的達到既定的設計效果。六 設計小結經過繁忙而又緊張的課程設計,終于順利的完成了設計任務。雖然在這段時間里每天都那么繁忙,但是在這忙碌的過程中卻得到了許多的收獲。經過課程設計,在查閱資料的過程中,了解了單片機串行通信的基本知識,對于以后的學習和工作都有很大的益處。在學習的過程中,也遇到了一些困難,比如開始的時候,由于發送端和接收端的通信協議沒有做好,導致數據不能正確的傳輸,在解決問題的過程中,對于串行通信的實現有了深刻的認識
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的双机之间的串行通信设计 c语言编程,双机串行通信设计精品.doc-资源下载人人文库网...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: noj大作业c语言扫雷,noj大作业.d
- 下一篇: android pdu 编码规则,[转载