資源描述:
《pc機(jī)與單片機(jī)之間的串口通信分析》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、中山火炬職業(yè)技術(shù)學(xué)院畢業(yè)綜合實(shí)踐項(xiàng)目項(xiàng)目名稱(chēng):PC機(jī)與單片機(jī)之間的串口通信分析作者:劉世浩學(xué)號(hào):1102070104系別:信息工程系專(zhuān)業(yè):通信技術(shù)指導(dǎo)老師:雷英專(zhuān)業(yè)技術(shù)職務(wù)單片機(jī)技術(shù)9摘要單片機(jī)的串行口在單片機(jī)的日常教學(xué)實(shí)踐和實(shí)際的工程技術(shù)中,應(yīng)用十分普遍,因此在學(xué)習(xí)和設(shè)計(jì)時(shí)經(jīng)常會(huì)對(duì)串口進(jìn)行仿真調(diào)試。PC機(jī)和單片機(jī)的串口通信系統(tǒng)的調(diào)試一般需要通過(guò)一根串口連接線(xiàn)把帶有軟件的上位機(jī)(PC機(jī))和下位機(jī)(即單片機(jī))連接起來(lái)進(jìn)行,這種方法受實(shí)驗(yàn)條件的約束,而且比較煩瑣。本文介紹一種用純軟件實(shí)現(xiàn)的仿真調(diào)試方法,全部過(guò)程都在一臺(tái)電腦上通過(guò)軟件完成此次課設(shè)主
2、題為單片機(jī)串口通信的應(yīng)用之一。通過(guò)串口,我們的個(gè)人電腦和單片機(jī)系統(tǒng)進(jìn)行通信。個(gè)人電腦作為上位機(jī),向下位機(jī)單片機(jī)系統(tǒng)發(fā)送數(shù)據(jù)幀,單片機(jī)系統(tǒng)接收后,發(fā)回通信協(xié)議要求的數(shù)據(jù)幀??梢杂肅++Builder語(yǔ)言制作的應(yīng)用程序界面或串口調(diào)試助手字符串輸入框中輸入數(shù)字和字符來(lái)實(shí)現(xiàn)PC機(jī)與80C51系列單片機(jī)的串口通信。關(guān)鍵詞:?jiǎn)纹瑱C(jī)串口通信仿真一、如何串行通信實(shí)現(xiàn)利用虛擬終端仿真單片機(jī)與PC機(jī)間的串行通信。PC機(jī)先發(fā)送從鍵盤(pán)輸入的數(shù)據(jù),單片機(jī)接收后回發(fā)給PC機(jī)。單片機(jī)同時(shí)將收到的30~39H間的數(shù)據(jù)轉(zhuǎn)換成0~9的數(shù)字顯示,其他字符的數(shù)據(jù)直接顯示為其ASCI
3、I碼。單片機(jī)和PC機(jī)進(jìn)行通信時(shí),要求使用的波特率、傳送的位數(shù)等相同。要能夠進(jìn)行數(shù)據(jù)傳送也必須首先測(cè)試雙方是否可以可靠通信。可在PC機(jī)和單片機(jī)上各編制非常短小的程序,具體可分成PC機(jī)串行口發(fā)送接收程序、單片機(jī)串行口發(fā)送程序和單片機(jī)串行口發(fā)送接收程序。這三個(gè)程序能運(yùn)行通過(guò),即可證明串行口工作正常。PC機(jī)串行口發(fā)送接收程序設(shè)置串行口為波特率9600、8位數(shù)據(jù)、1位停止位、無(wú)奇偶校驗(yàn)的簡(jiǎn)單設(shè)置。從鍵盤(pán)接收的字符可從串行口發(fā)送出去,從串行口接收的字符在屏幕上顯示。通過(guò)讓串行口發(fā)送線(xiàn)和接收線(xiàn)短接可測(cè)試微機(jī)串行口,通過(guò)讓串行口和單片機(jī)系統(tǒng)相接,使用此程序可
4、進(jìn)一步測(cè)試單片機(jī)的串行通信狀況。二、串行通信詳細(xì)設(shè)計(jì)1.串行通信原理此次采用80C51系列串口的方式1進(jìn)行串行通信。串口結(jié)構(gòu)如圖1所示。9圖1方式1是10位數(shù)據(jù)的異步通信口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接收引腳,傳送一幀數(shù)據(jù)的格式如圖2所示。其中1位起始位,8位數(shù)據(jù)位,1位停止位。用軟件置REN為1時(shí),接收器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測(cè)到RXD引腳輸入電平發(fā)生負(fù)跳變時(shí),則說(shuō)明起始位有效,將其移入輸入移位寄存器,并開(kāi)始接收這一幀信息的其余位。接收過(guò)程中,數(shù)據(jù)從輸入移位寄存器右邊移入,起始位移至輸入移位寄存器最左邊時(shí),
5、控制電路進(jìn)行最后一次移位。當(dāng)RI=0,且SM2=0(或接收到的停止位為1)時(shí),將接收到的9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接收SBUF,第9位(停止位)進(jìn)入RB8,并置RI=1,向CPU請(qǐng)求中斷。用單片機(jī)內(nèi)部定時(shí)器1即T1,使其工作在方式2,作為波特率發(fā)生器。圖2由于基于C++Builder的通信協(xié)議如圖3所示,因此在程序編寫(xiě)時(shí),需要在設(shè)置一個(gè)緩沖區(qū)來(lái)暫時(shí)存儲(chǔ)單片機(jī)接收的來(lái)自PC機(jī)的一串字符串。前導(dǎo)符站號(hào)地址功能碼數(shù)據(jù)長(zhǎng)度數(shù)據(jù)結(jié)束符校驗(yàn)碼##AAAAFFLLDDDD@@X圖32.硬件設(shè)計(jì)51單片機(jī)有一個(gè)全雙工的串行通訊口,所以單片機(jī)和電腦之間可以方便地
6、進(jìn)行串口通訊。進(jìn)行串行通訊時(shí)要滿(mǎn)足一定的條件,比如電腦的串口是RS232電平的,而單片機(jī)的串口是TTL電平的,兩者之間必須有一個(gè)電平轉(zhuǎn)換電路,我們采用了專(zhuān)用芯片MAX232進(jìn)行轉(zhuǎn)換。如圖4所示。9圖43.軟件設(shè)計(jì)如圖4,PC機(jī)作為主機(jī),80C51單片機(jī)作為從機(jī)(波特率為9600b/s)。通信程序采用C語(yǔ)言編程。這個(gè)程序的流程圖如圖5所示。程序見(jiàn)下。圖593.1串口初始化3.2從機(jī)(單片機(jī))接收主機(jī)(PC機(jī))發(fā)送來(lái)的數(shù)據(jù)幀3.3從機(jī)發(fā)送數(shù)據(jù)幀給主機(jī)(1)解析從機(jī)發(fā)送的數(shù)據(jù)幀(程序見(jiàn)附錄3的voidsend()部分)(2)從機(jī)發(fā)送數(shù)據(jù)幀3.4拓展
7、部分利用P1口連接的8個(gè)LED燈來(lái)顯示C++Builder的十三個(gè)功能(見(jiàn)附錄1)。9三、實(shí)驗(yàn)調(diào)試1.硬件方面9(1)燒寫(xiě)程序時(shí),已經(jīng)上電了,可軟件還是一直提示上電,反復(fù)上電也不行后,最終通過(guò)反復(fù)換串口,反復(fù)燒寫(xiě)上電解決了。類(lèi)似的還有只要進(jìn)行燒寫(xiě),燒寫(xiě)軟件界面就會(huì)消失,也是通過(guò)上述方法解決。(2)有時(shí)燒寫(xiě)時(shí),忽略了相應(yīng)的串口和波特率的選擇甚至忘記打開(kāi)串口助手的串口,發(fā)送數(shù)據(jù)后使得PC機(jī)的接收窗口中無(wú)顯示。(3)有時(shí)發(fā)送數(shù)據(jù)后接收窗口無(wú)顯示,經(jīng)過(guò)復(fù)位后,問(wèn)題得以解決。2.軟件方面編程時(shí)遇到的主要問(wèn)題有四個(gè):(1)如何在C51單片機(jī)中存儲(chǔ)接收的一
8、個(gè)字符串?dāng)?shù)據(jù)幀。如上所述,需要設(shè)置一個(gè)緩沖數(shù)組來(lái)接收主機(jī)發(fā)送的字符串?dāng)?shù)據(jù)幀。程序見(jiàn)3.2。(2)如何判斷從機(jī)已經(jīng)接收到完整的數(shù)據(jù)幀即結(jié)束接收。設(shè)置一個(gè)標(biāo)志位,如uc