課程設計(論文)
課程名稱:《單片機應用》課程設計 題 目:單片機與PC機的串口通信 院 (系):信息與控制工程系 專業班級:自動化 姓 名: 學 號: 指導教師:
單片機與PC機的串口通信設計總說明 單片機自20世紀70年代問世以來,以其極高的性能價格比,受到人們的重視和關注,應用很廣、發展很快。而AT89C51單片機是各單片機中最為典型和最有代表性的一種,本設計是基于MCS51系列單片機中AT89C51所設計的一種具有一個全雙工的串行通信口,可以實現單片機與PC機之間通信,主從通信以及上,下位機互相通信等。本設計基于單片機技術原理,通過硬件電路制作以及軟件程序的編制,設計制作一個簡單的單片機與PC機間串行通信。當PC機上按數字鍵時,能在單片機數碼管上顯示相應數字。
目錄
1 緒論 1.1設計目的 1.2設計內容 2 系統硬件電路設計 2 2.1系統設計框圖 2 2.2串口通信基本原理 2 2.3 AT89C51單片機簡介 4 2.4 9針串口 6 2.5硬件電路圖 7 3 系統軟件程序設計 8 3.1單片機與PC機總體設計流程圖 8 3.2主程序設 9 3.3 其他子程序設計 10 4 軟件仿真 12 5 總結 17 致謝 18 參考文獻 19
1.1設計目的
單片機與PC機串行通信端口在系統控制的范疇中一直占據著及其重要的地位,它不僅沒有因為時代的進步而遭淘汰,反而在規格上越來越完善,應用也越來越廣泛。作為一種基本而又靈活方便的通信方式,串口通信被廣泛應用于PC與PC或者PC與單片機之間的數據交換以及其他工業控制與自動控制中。如今,在很多場合中,要求單片機不僅能獨立完成單機的控制任務,還要能與其他數據控制設備(單片機、PC機等)進行數據交換。因此如何實現PC機與單片機之間的通信具有非常重要的現實意義。 1.2設計內容 以單片機與PC機為核心,實現單片機與PC機機的串口通信。
2系統硬件電路設計
2.1系統設計框圖 圖2-1 系統設計框圖 2.2串口通信基本原理 所謂"串行通信"是指外設和計算機間使用一根數據信號線,數據在一根數據信號線上按位進行傳輸,每一位數據都占據一個固定的時間長度。這種通信方式使用的數據線少,在遠距離通信中可以節約通信成本,當然,其傳輸速度比并行傳輸慢。相比之下,由于高速率的要求,處于計算機內部的CPU與串口之間的通訊仍然采用并行的通訊方式,所以串行口的本質就是實現CPU與外圍數據設備的數據格式轉換(或者稱為串并轉換器),即當數據從外圍設備輸入計算機時,數據格式由位 (bit)轉化為字節數據;反之,當計算機發送下行數據到外圍設備時,串口又將字節數據轉化為位數據。
串行端口的本質功能是作為CPU和串行設備間的編碼轉換器。當數據從 CPU經過串行端口發送出去時,字節數據轉換為串行的位。在接收數據時,串行的位被轉換為字節數據。
在Windows環境(Windows NT、Win98、Windows2000)下,串口是系統資源的一部分。 應用程序要使用串口進行通信,必須在使用之前向操作系統提出資源申請要求(打開串口),通信完成后必須釋放資源(關閉串口)。 串口通信的概念非常簡單,串口按位(bit)發送和接收字節。盡管比按字節(byte)的并行通信慢,但是串口可以在使用一根線發送數據的同時用另一根線接收數據。它很簡單并且能夠實現遠距離通信。比如IEEE488定義并行通行狀態時,規定設備線總常不得超過20米,并且任意兩個設備間的長度不得超過2米;而對于串口而言,長度可達1200米。
典型的串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發送數據同時在另一根線上接收數據。其他線用于握手,但是不是必須的。串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。對于兩個進行通行的端口,這些參數必須匹配: a,波特率:這是一個衡量通信速度的參數。它表示每秒鐘傳送的bit的個數。例如300波特表示每秒鐘發送300個bit。當我們提到時鐘周期時,我們就是指波特率例如如果協議需要4800波特率,那么時鐘是4800Hz。這意味著串口通信在數據線上的采樣率為4800Hz。通常電話線的波特率為14400,28800和36600。波特率可以遠遠大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB設備的通信。
b,數據位:這是衡量通信中實際數據位的參數。當計算機發送一個信息包,實際的數據不會是8位的,標準的值是5、7和8位。如何設置取決于你想傳送的信息。比如,標準的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數據使用簡單的文本(標準 ASCII碼),那么每個數據包使用7位數據。每個包是指一個字節,包括開始/停止位,數據位和奇偶校驗位。由于實際數據位取決于通信協議的選取,術語 “包”指任何通信的情況。
c,停止位:用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數據是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數越多,不同時鐘同步的容忍程度越大,但是數據傳輸率同時也越慢。
d,奇偶校驗位:在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設置校驗位(數據位后面的一位),用一個值確保傳輸的數據有偶個或者奇個邏輯高位。例如,如果數據是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數是偶數個。如果是奇校驗,校驗位位1,這樣就有3個邏輯高位。高位和低位不真正的檢查數據,簡單置位邏輯高或者邏輯低校驗。這樣使得接收設備能夠知道一個位的狀態,有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數據是否不同步。 2.3 AT89C51單片機簡介 AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。其管腳功能如下: VCC:供電電壓。 GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。 P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為低八位地址接收。 P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷0) P3.3 /INT1(外部中斷1) P3.4 T0(計時器0外部輸入) P3.5 T1(計時器1外部輸入) P3.6 /WR(外部數據存儲器寫選通) P3.7 /RD(外部數據存儲器讀選通) 圖2-2 ATC89C51管腳圖
2.4 9針串口
9針串口:一個完整的RS-232接口是一個25針的D型插頭座,25針的連接器實際上只有9根連接線,所以就產生了一個簡化的9針D型RS-232插頭座,常用的就是一個9針的D型插頭座。
EIA-RS-232C對電器特性、邏輯電平和各種信號線功能都作了規定:
在TxD和RxD上:邏輯1(MARK)=-3V~-15V
邏輯0(SPACE)=+3~+15V
在RTS、CTS、DSR、DTR和DCD等控制線上:
信號有效(接通,ON狀態,正電壓)=+3V~+15V
信號無效(斷開,OFF狀態,負電壓)=-3V~-15V
介于-3~+3V之間的電壓無意義,低于-15V或高于+15V的電壓也認為無意義。因此如果要進行通信,還要對信號的電平進行轉換,比如使用MAX3232芯片來轉換電平。使用串口進進行通信時,我們最主要關心的時以下這三個引腳:5 GND、2 RXD、3 TXD要完成數據的發送與接收就必須要到上面這三個引腳。而其它引腳是用來控制傳輸規則的,即握手協議。下面是9針串口(DB9),引腳功能。 引腳號 | 縮寫 | 英文全稱 | 功能說明 | 1 | DCD | Data Carrier Detection | 數據載波檢測 | 2 | RXD | Receive Data | 接收數據 | 3 | TXD | Transmit Data | 發送數據 | 4 | DTR | Data Terminal Ready | 數據終端準備 | 5 | GND | System Ground | 信號地 | 6 | DSR | Data Set Ready | 數據設備準備好 | 7 | RTS | Request to Send | 請求發送 | 8 | CTS | Clear to Send | 清除發送 | 9 | RI | Ring Indicator | 振鈴指示 |
圖2-3 9針串口引腳功能圖
2.5硬件電路圖 圖2-4 硬件總電路圖
3 系統軟件程序設計
3.1單片機與PC總體設計流程圖(見附件)
3.2主程序設計 - receivedata data 40h ;存放收到的數據
- displaydata data 39h ;存放顯示子程序要顯示的數據
- ORG 0000H
- JMP START
- ORG 0023H
- JMP COMMJUDGE
- ORG 0100H
- START:
- MOV SP, #60H
- MOV SCON, #50H
- MOV PCON, #80H
- MOV TMOD,#20H
- MOV TL1,#0FAH
- MOV TH1,#0FAH
- SETB EA
- SETB ES
- SETB TR1
- HERE: JMP HERE
- COMMJUDGE:
- JB TI,TT00 ;如果是發送引起的中斷,那么就不管
- CLR RI
- CALL CHANGEDIS
- CALL DISPLAY
- CALL TRANS
- TT00: CLR TI
- RETI
- 3.3其他子程序設計
- ;********************************************************************
- ;=========================================
- ;功能描述: 串口接收數據的處理子程序
- ;創建日期: 2017年6月29日12:37:12
- ;=========================================
- CHANGEDIS:
- PUSH Acc
- PUSH PSW
- MOV A,SBUF
- MOV receivedata,A
- SUBB A,#30H ;數字的ASCII碼轉換為對應的數字(此程序僅限數字
- MOV displaydata,A
- POP PSW
- POP Acc
- RET
- ;=========================================
- ;函 數 名: TRANS
- ;功能描述: 串口發送數據給PC的子程序
- ;創建日期: 2017年6月29日12:43:48
- ;=========================================
- TRANS:
- PUSH ACC
- PUSH PSW
- MOV A,#2BH ;2AH是事先約定的字符,返回給PC端時,用于確認顯示正確
- MOV SBUF,A ;此語句產生一個TI=1.
- MOV R7,#02H
- DL: MOV R6,#0FFH
- DL6: DJNZ R6,DL6
- DJNZ R7,DL
- POP PSW
- POP ACC
- RET
- ;=========================================
- ;函 數 名: DISPLAY
- ;功能描述: 顯示子程序
- ;創建日期: 2017年6月27日22:37:46
- ;=========================================
- DISPLAY:
- MOV R1,#displaydata ;取顯示緩沖區首地址
- MOV A,@R1 ;查表獲取段選碼
- MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV P0,#0FEH ;對P0口進行位選,FE則最左邊那位顯示
- MOV P1,A ;給P1口送段選碼
- RET
- ;-------------------------LED顯示碼表--------------------------
- TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH
- DB 7DH,7FH, 6FH,
- END
復制代碼
4軟件仿真 首先在protues中畫出如下電路圖 
圖4-1仿真開始電路圖 打開虛擬串口軟件,建立COM1和COM2為相互連接的一對端口。 打開虛擬串口軟件,建立COM1和COM2為相互連接的一對端口。 單擊添加端口,即可完成端口添加。
打開虛擬串口軟件,建立COM1和COM2為相互連接的一對端口。 單擊添加端口,即可完成端口添加。 圖4-2 建立虛擬端口
接下來對串口進行設置,設置內容如下: 圖4-3 串口設置
對51單片機設置 圖4-4 AT89C51單片機設置
啟動友善串口助手,選擇COM2發送數據。向單片機發送數字3,觀察單片機仿真結果。 圖4-5 仿真結果
5總結 通過本次單片機間串行通信實驗設計,使我對單片機有更加深刻的了解,明白了軟件與硬件的配合使用,懂得怎樣去分析電路及調試程序,雖然在設計過程中遇到很多困難,但是經過進一步查閱相關資料,問題才得以解決,盡管最后設計不是那么完美,不是那么理想,但總體上來說實現了單片機與PC機間串行通信,基本上完成了實驗原理所需要求,通過本次設計也使得自己明白軟件與硬件相結合的重要性,二者缺一不可,所以在實現硬件連接的同時也要讀懂軟件所實現的功能。本設計介紹了一種單片機與PC機之間串行通信的設計方法,論文首先介紹了單片機與單片機之間串行通信的工作原理、軟件與硬件的實現、研究現狀、串行通信的概念以及鍵盤輸入。主要是單片機與單片機之間串行通信的方式和重要的數據位說明,接著提出了可行的設計方案,并從硬件電路設計及軟件程序設計兩個方面詳細介紹了整個設計的工作原理及設計過程,同時驗證了方案的可行性。
致謝在這次課程設計的撰寫過程中,我得到了許多人的幫助。 首先我要感謝我的老師在課程設計上給予我的指導、提供給我的支持和幫助,這是我能順利完成這次報告的主要原因,更重要的是老師幫我解決了許多技術上的難題,讓我能把系統做得更加完善。在此期間,我不僅學到了許多新的知識,而且也開闊了視野,提高了自己的設計能力。 其次,我要感謝幫助過我的同學,他們也為我解決了不少我不太明白的設計商的難題。同時也感謝學院為我提供良好的做畢業設計的環境。 最后再一次感謝所有在設計中曾經幫助過我的良師益友和同學。
完整的Word格式文檔51黑下載地址:
單片機與PC機的串口通信課程設計報告.doc
(933.5 KB, 下載次數: 127)
2017-12-6 17:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|