linux軟件工程師(C語言)實(shí)用教程第5章.ppt_第1頁(yè)
linux軟件工程師(C語言)實(shí)用教程第5章.ppt_第2頁(yè)
linux軟件工程師(C語言)實(shí)用教程第5章.ppt_第3頁(yè)
linux軟件工程師(C語言)實(shí)用教程第5章.ppt_第4頁(yè)
linux軟件工程師(C語言)實(shí)用教程第5章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第 5 章,串行通信,2,本章重點(diǎn),串行通信編程的流程 串行通信端口的設(shè)置 串行通信中相關(guān)函數(shù)的應(yīng)用,5.1串行通信概述,現(xiàn)在的串行通信端口(RS-232)是計(jì)算機(jī)上的標(biāo)準(zhǔn)配置。最為常見的應(yīng)用是連接調(diào)制解調(diào)器進(jìn)行數(shù)據(jù)傳輸。 計(jì)算機(jī)通常包含COM1和COM2兩個(gè)串行通信端口。一般計(jì)算機(jī)的COM端口從外觀上看有9個(gè)針腳。,在Linux中,所有的設(shè)備文件都位于“/dev”下,其中COM1、COM2對(duì)應(yīng)的設(shè)備名依次為“/dev/ttyS0”、“/dev/ttyS1”。 Linux對(duì)設(shè)備的操作方法和對(duì)文件的操作方法相同,因此,對(duì)串口的讀寫就可以使用簡(jiǎn)單的“read”、“write”函數(shù)來完成,所不同的是要對(duì)串口的一些參數(shù)進(jìn)行配置。,4,5.2 串行通信程序的設(shè)計(jì),5.2.1 串行通信程序設(shè)計(jì)流程,5,5.2.2 打開通訊端口,在Linux中把串口設(shè)備視為普通文件,可使用open()函數(shù)來打開串口設(shè)備。 例5.1:打開PC的COM1串行通信端口。 源程序代碼com1open.c,思考題:要求以只讀的模式打開計(jì)算機(jī)的COM2。,6,5.2.3 設(shè)置串口屬性,在inux中若要對(duì)串口進(jìn)行操作,如改變其波特率、字符大小等,就是對(duì)結(jié)構(gòu)體stuct termios中成員的值進(jìn)行設(shè)置。,注意:在這個(gè)結(jié)構(gòu)中最為重要的是c_iflag,通過對(duì)它的賦值,用戶可以設(shè)置波特率、字符大小、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位和硬件控制等。,7,5.2.3 設(shè)置串口屬性,c_oflag(輸出模式),c_cflag(控制模式),c_lflag(局部模式),c_ccNCCS(特殊控制字符),思考題:在設(shè)置串口屬性時(shí),要求奇偶校驗(yàn)。請(qǐng)寫出設(shè)置串口的語句。,8,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,串口通信一般分為接收端和發(fā)送端。 接收端: 打開PC的COM1端口。 如果以讀寫的方式打開COM1端口,語句可寫為: fd=open(“/dev/ttyS0”,O_RDWR | O_NOCTTY); 取得當(dāng)前串口值,并保存至結(jié)構(gòu)體變量oldtio。 tcgetattr(fd,9,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,設(shè)置串口參數(shù)。 (1)假定設(shè)置波特率為38400,8個(gè)數(shù)據(jù)位,忽略任何調(diào)制解調(diào)器狀態(tài),同時(shí)啟動(dòng)接受器。 newtio.c_cflag=BAUDRATE |CS8 |CLOCAL|CREAD; (2)忽略奇偶校驗(yàn)錯(cuò)誤 newtio.c_iflag=IGNPAR; (3)設(shè)輸出模式非標(biāo)準(zhǔn)型,同時(shí)不回應(yīng)。 ewtio.c_oflag=0; (4)啟用正規(guī)模式 newtio.c_lflag=ICANON;,10,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,清除所有列隊(duì)在串口的輸入輸出 tcflush(fd,TCIFLUSH); 設(shè)置當(dāng)前的串口參數(shù)為newtio tcsetattr(fd,TCSANOW,11,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,發(fā)送端: 打開PC的COM2端口。 fd=open(“/dev/ttyS1”,O_RDWR | O_NOCTTY); 取得當(dāng)前串口值,并保存至oldtio。 tcgetattr(fd,12,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,設(shè)置串口參數(shù)。 (1)設(shè)置波特率為38400,8個(gè)數(shù)據(jù)位,忽略任何調(diào)制解調(diào)器狀態(tài)同時(shí)啟動(dòng)接受器。 newtio.c_cflag=BAUDRATE |CS8 |CLOCAL|CREAD; (2)忽略奇偶校驗(yàn)錯(cuò)誤 newtio.c_iflag=IGNPAR; (3)設(shè)輸出模式非標(biāo)準(zhǔn)型,同時(shí)不回應(yīng)。 ewtio.c_oflag=0; (4)啟用正規(guī)模式 newtio.c_lflag=ICANON;,13,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,清除所有列隊(duì)在串口的輸入輸出tcflush(fd,TCIFLUSH); 設(shè)置當(dāng)前的串口為newtio tcsetattr(fd,TCSANOW,/*恢復(fù)舊的端口參數(shù)*/,14,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,例5.2:通過計(jì)算機(jī)的COM1和COM2進(jìn)行通信,利用RS-232來傳送信息,其中COM1為發(fā)射端,COM2為接收端,當(dāng)接收端接收到字符時(shí),結(jié)束傳輸。RS-232的通信格式為38400,n,8,1(38400表示波特率大小,n表示不進(jìn)行奇偶校驗(yàn),8表示數(shù)據(jù)位,1表示停止位)。 步驟 1:連線 計(jì)算機(jī)的COM1和COM2,通過RS-232線連接。,15,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,步驟 2: 編輯源程序代碼 設(shè)接收端的源文件名為:5-2-r.c,發(fā)送端的源文件名為:5-2-s.c ,在接收端打開端口com2后,com2口會(huì)讀取計(jì)算機(jī)com1口傳來的數(shù)據(jù),并輸出。若com2口接收到的字符為,則結(jié)束傳輸。,16,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,步驟 3:用gcc編譯程序 rootlocalhost root#gcc 5-2-r.c o 5-2-r 步驟 4:編輯發(fā)送端源程序代碼 發(fā)送端com1,它會(huì)把com1的數(shù)據(jù)發(fā)送給com2。若com2接收的字符為,則結(jié)束傳輸 rootlocalhost root#vim 5-2-s.c,17,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,步驟 5:用gcc編譯程序 rootlocalhost root#gcc 5-2-s.c o 5-2-s 步驟 6: 測(cè)試運(yùn)行結(jié)果 1. 打開一個(gè)終端,運(yùn)行發(fā)送端程序: rootlocalhost root#./ 5-2-r2. 2. 打開另一個(gè)終端,運(yùn)行發(fā)送端程序,并輸入“hello,lupa!” 3. 接著會(huì)在接受端看到傳來的數(shù)據(jù)。,結(jié)果分析:接受端收到發(fā)送端傳來的字符(hello,lupa!),并統(tǒng)計(jì)出了字符數(shù)。,18,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,tcgetattr函數(shù)說明:,tcsetattr函數(shù)說明:,19,5.2.4 串口通信程序設(shè)計(jì)主要語句說明,tcflush函數(shù)說明:,思考題 把例5.2中的RS-232通信格式改為51200,n,8,1,其他設(shè)置不變,然后完成次實(shí)驗(yàn)。 參考例5.2,RS-232的通信格式不變,依然是38400,n,8,1,要求發(fā)送端先讀取文件的內(nèi)容,然后將其內(nèi)容發(fā)送到接收端,并在屏幕上打印出接受到的內(nèi)容。,20,思考與實(shí)驗(yàn),open(“/dev/ttyS0“,O_RDWR|O_NOCTTY|

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論