




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗指導(dǎo)書:串口通信實驗實驗?zāi)康模和ㄟ^程序,理解并驗證串口通信的編程方法和機制。本次實驗分兩個環(huán)節(jié),第一環(huán)節(jié)為用程序發(fā)送字符串,用linux命令在另一窗口直接從串口讀?。坏诙h(huán)節(jié)為用發(fā)送程序發(fā)送字符串,用接收程序在另一窗口讀取串口并顯示。要求必須完成第一環(huán)節(jié),而第二環(huán)節(jié)為選作。本實驗在虛擬機環(huán)境下完成,利用虛擬機創(chuàng)建兩個虛擬串口,基于這兩個虛擬串口完成串口通信實驗。實驗內(nèi)容:本次實驗需要在linux環(huán)境下,用vi工具輸入對應(yīng)的程序,并編譯通過,運行后觀察結(jié)果是否正確。一、設(shè)置虛擬機串口1.1 VMware的串口:一個虛擬機最多可以添加四個虛擬串口,有如下3個方法配置虛擬串口:(1) 連接一個虛擬串口到宿主機的物理串口。(2) 連接一個虛擬串口到宿主機上的一個文件。(3) 在兩個虛擬機之間建立一個直接的連接,或者將虛擬機的串口與宿主機的應(yīng)用程序連接。1.2 為虛擬機添加串口首先要保證虛擬機下的linux處于關(guān)機(power off)狀態(tài),(1) 選擇菜單中的虛擬機設(shè)置(英文版為:VM - Settings),在硬件(Hardware)標(biāo)簽頁中,如果已有串行端口(serial port),則選中該串口,并點選移除。(2) 點擊Add按鈕,在Add Hardware Wizard對話框中選擇Serial Port,點擊next,分兩次添加兩個串口,具體的選項如下圖:串口2的設(shè)置:注意兩個串口都使用了命名管道方式,但一個是服務(wù)器端,一個是客戶端。(3) 啟動linux操作系統(tǒng),測試兩個串口是否設(shè)置成功在linux桌面空白處點擊右鍵,打開兩個終端窗口。在其中一個窗口(稱為窗口A)中,建立工作目錄,并進入該目錄。即,執(zhí)行下述命令:1 cd /home2 mkdir src3 cd src4 cat /dev/ttyS1/注意是大寫的S在另一個窗口(稱為窗口B)執(zhí)行下述命令:5 cd /home/src6 echo hello /dev/ttyS0/注意是大寫的S此時,應(yīng)在窗口A中顯示出“hello”這個字符串,這表明窗口B通過串口/deb/ttyS0發(fā)送的字符串,通過串口連接,在窗口A的串口/dev/ttyS1上接收到了該字符串。在窗口A輸入Ctrl+c,可推出cat命令。環(huán)境設(shè)置完畢。可進入下面的代碼編輯、編譯、執(zhí)行環(huán)節(jié)。二、僅創(chuàng)建串口發(fā)送程序,用在linux下用cat命令直接讀取串口該環(huán)節(jié)為用ttySend程序發(fā)送字符串,用linux的cat命令在另一窗口直接從串口讀取7 vi ttySend.c/創(chuàng)建ttySend.c文件,并輸入下述代碼ttySend.c:/* File Name: send.c* Description: send data to serial_Port* Date: */*頭文件定義*/#include #include #include #include #include #include #include #include #define max_buffer_size 100 /*定義緩沖區(qū)最大寬度*/*/int fd; /*定義設(shè)備文件描述符*/int flag_close;int open_serial(int k) if(k=0) /*串口選擇*/ fd = open(/dev/ttyS0,O_RDWR|O_NOCTTY); /*讀寫方式打開串口*/ perror(open /dev/ttyS0); else fd = open(/dev/ttyS1,O_RDWR|O_NOCTTY); perror(open /dev/ttyS1); if(fd = -1) /*打開失敗*/ return -1; else return 0;/*/int main(int argc, char *argv ) char sbuf=Hello,this is a Serial_Port test!n;/*待發(fā)送的內(nèi)容,以n為結(jié)束標(biāo)志*/ int sfd,retv,i; struct termios option; int length=sizeof(sbuf);/*發(fā)送緩沖區(qū)數(shù)據(jù)寬度*/*/ open_serial(0); /*打開串口1*/*/ printf(ready for sending data.n); /*準(zhǔn)備開始發(fā)送數(shù)據(jù)*/ tcgetattr(fd,&option); cfmakeraw(&option);/*/ cfsetispeed(&option,B9600); /*波特率設(shè)置為9600bps*/ cfsetospeed(&option,B9600);/*/ tcsetattr(fd,TCSANOW,&option); retv=write(fd,sbuf,length); /*接收數(shù)據(jù)*/ if(retv=-1) perror(write); printf(the number of char sent is %dn,retv); flag_close = close(fd); if(flag_close = -1) /*判斷是否成功關(guān)閉文件*/ printf(Close the Device failur!n);輸入完畢后保存退出。執(zhí)行命令:8 gcc -o ttySend ttySend.c /編譯,并指定生成文件為ttySend編譯成功后,再linux桌面空白處點擊右鍵,新建一個終端,執(zhí)行下述命令:9 cat /dev/ttyS1/注意,是大寫的S,用于接收發(fā)送端發(fā)送的字符串然后切換回剛才的編譯窗口,執(zhí)行下述命令:10 ./ttySend/發(fā)送字符串顯示如下:此時,在接收的終端窗口,應(yīng)顯示如下:按ctrl+C可退出接收程序的等待循環(huán)三、ttySend程序發(fā)送,ttyReceive程序接收步驟一是用ttySend程序發(fā)送,用cat命令直接在另一個終端接收了串口的輸出。本步驟在步驟一的基礎(chǔ)上,用ttySend程序發(fā)送,用ttyReceive程序接收。在步驟一的接收窗口,按ctrl+C退出cat接收命令,并執(zhí)行下述命令:11 cd /home/src/進入工作目錄12 vi ttyReceive.c/創(chuàng)建ttyReceive.c文件,并輸入下述代碼ttyReceive.c/* Filename:receive.c* Description:Receive data from Serial_Port* Date:*/*頭文件定義*/#include #include #include #include #include #include #include #include #include math.h#define max_buffer_size 100 /*定義緩沖區(qū)最大寬度*/*/int fd,s;int open_serial(int k) if(k=0) /*串口選擇*/ fd = open(/dev/ttyS0,O_RDWR|O_NOCTTY); /*讀寫方式打開串口*/ perror(open /dev/ttyS0); else fd = open(/dev/ttyS1,O_RDWR|O_NOCTTY); perror(open /dev/ttyS1); if(fd = -1) /*打開失敗*/ return -1; else return 0;/*/int main() char hdmax_buffer_size,*rbuf; /*定義接收緩沖區(qū)*/ int flag_close, retv,i,ncount=0; struct termios opt; int realdata=0;/*/ open_serial(1); /*打開串口1*/*/ tcgetattr(fd,&opt); cfmakeraw(&opt);/*/ cfsetispeed(&opt,B9600); /*波特率設(shè)置為9600bps*/ cfsetospeed(&opt,B9600);/*/ tcsetattr(fd,TCSANOW,&opt); rbuf=hd; /*數(shù)據(jù)保存*/ printf(ready for receiving data.n); retv=read(fd,rbuf,1); /*接收數(shù)據(jù)*/ if(retv=-1) printf(read error:%dn,retv); perror(read); /*讀狀態(tài)標(biāo)志判斷*/ /*開始接收數(shù)據(jù)*/ while(*rbuf!=n) /*判斷數(shù)據(jù)是否接收完畢*/ ncount+=1; rbuf+; retv=read(fd,rbuf,1); if(retv=-1) printf(read error in whilen);perror(read); /*/ printf(The data received is:n); /*輸出接收到的數(shù)據(jù)*/ for(i=0;incount;i+) printf(%c,hdi); printf(n); flag_close =close(fd); if(flag_close = -1) /*判斷是否成功關(guān)閉文件*/ printf(Close the
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 協(xié)議書附屬條件范本
- 母狗收養(yǎng)協(xié)議書范本
- 離婚協(xié)議書中的家庭農(nóng)場經(jīng)營權(quán)與土地流轉(zhuǎn)協(xié)議
- 車輛抵押擔(dān)保汽車維修保養(yǎng)擔(dān)保服務(wù)協(xié)議
- 采暖系統(tǒng)安裝與節(jié)能技術(shù)咨詢合同
- 貝娥婚姻關(guān)系終止合同
- 草莓苗種植與農(nóng)業(yè)科技園區(qū)合作合同
- 汽車質(zhì)押擔(dān)保借款合同范本
- 知識產(chǎn)權(quán)產(chǎn)業(yè)園區(qū)廠房轉(zhuǎn)租及創(chuàng)新成果轉(zhuǎn)化合同
- 腎結(jié)石非手術(shù)的護理查房
- 固廢危廢培訓(xùn)課件
- 水庫安保服務(wù)方案
- 一例ANCA相關(guān)性血管炎患者的護理查房
- 《外科微創(chuàng)技術(shù)》課件
- 產(chǎn)品審核VDA6.5培訓(xùn)課件
- 如何建立與客戶良好的關(guān)系
- 邊防派出所知識講座
- 消防安全隱患排查投標(biāo)方案(技術(shù)標(biāo))
- 刑事案件模擬法庭劇本完整版五篇
- PSSE軟件操作說明
- 教科版科學(xué)三年級下冊實驗報告單
評論
0/150
提交評論