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