




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)驗(yàn)指導(dǎo)書:串口通信實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模和ㄟ^程序,理解并驗(yàn)證串口通信的編程方法和機(jī)制。本次實(shí)驗(yàn)分兩個(gè)環(huán)節(jié),第一環(huán)節(jié)為用程序發(fā)送字符串,用linux命令在另一窗口直接從串口讀??;第二環(huán)節(jié)為用發(fā)送程序發(fā)送字符串,用接收程序在另一窗口讀取串口并顯示。要求必須完成第一環(huán)節(jié),而第二環(huán)節(jié)為選作。本實(shí)驗(yàn)在虛擬機(jī)環(huán)境下完成,利用虛擬機(jī)創(chuàng)建兩個(gè)虛擬串口,基于這兩個(gè)虛擬串口完成串口通信實(shí)驗(yàn)。實(shí)驗(yàn)內(nèi)容:本次實(shí)驗(yàn)需要在linux環(huán)境下,用vi工具輸入對(duì)應(yīng)的程序,并編譯通過,運(yùn)行后觀察結(jié)果是否正確。一、設(shè)置虛擬機(jī)串口1.1 VMware的串口:一個(gè)虛擬機(jī)最多可以添加四個(gè)虛擬串口,有如下3個(gè)方法配置虛擬串口:(1) 連接一個(gè)虛擬串口到宿主機(jī)的物理串口。(2) 連接一個(gè)虛擬串口到宿主機(jī)上的一個(gè)文件。(3) 在兩個(gè)虛擬機(jī)之間建立一個(gè)直接的連接,或者將虛擬機(jī)的串口與宿主機(jī)的應(yīng)用程序連接。1.2 為虛擬機(jī)添加串口首先要保證虛擬機(jī)下的linux處于關(guān)機(jī)(power off)狀態(tài),(1) 選擇菜單中的虛擬機(jī)設(shè)置(英文版為:VM - Settings),在硬件(Hardware)標(biāo)簽頁中,如果已有串行端口(serial port),則選中該串口,并點(diǎn)選移除。(2) 點(diǎn)擊Add按鈕,在Add Hardware Wizard對(duì)話框中選擇Serial Port,點(diǎn)擊next,分兩次添加兩個(gè)串口,具體的選項(xiàng)如下圖:串口2的設(shè)置:注意兩個(gè)串口都使用了命名管道方式,但一個(gè)是服務(wù)器端,一個(gè)是客戶端。(3) 啟動(dòng)linux操作系統(tǒng),測(cè)試兩個(gè)串口是否設(shè)置成功在linux桌面空白處點(diǎn)擊右鍵,打開兩個(gè)終端窗口。在其中一個(gè)窗口(稱為窗口A)中,建立工作目錄,并進(jìn)入該目錄。即,執(zhí)行下述命令:1 cd /home2 mkdir src3 cd src4 cat /dev/ttyS1/注意是大寫的S在另一個(gè)窗口(稱為窗口B)執(zhí)行下述命令:5 cd /home/src6 echo hello /dev/ttyS0/注意是大寫的S此時(shí),應(yīng)在窗口A中顯示出“hello”這個(gè)字符串,這表明窗口B通過串口/deb/ttyS0發(fā)送的字符串,通過串口連接,在窗口A的串口/dev/ttyS1上接收到了該字符串。在窗口A輸入Ctrl+c,可推出cat命令。環(huán)境設(shè)置完畢??蛇M(jìn)入下面的代碼編輯、編譯、執(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桌面空白處點(diǎn)擊右鍵,新建一個(gè)終端,執(zhí)行下述命令:9 cat /dev/ttyS1/注意,是大寫的S,用于接收發(fā)送端發(fā)送的字符串然后切換回剛才的編譯窗口,執(zhí)行下述命令:10 ./ttySend/發(fā)送字符串顯示如下:此時(shí),在接收的終端窗口,應(yīng)顯示如下:按ctrl+C可退出接收程序的等待循環(huán)三、ttySend程序發(fā)送,ttyReceive程序接收步驟一是用ttySend程序發(fā)送,用cat命令直接在另一個(gè)終端接收了串口的輸出。本步驟在步驟一的基礎(chǔ)上,用ttySend程序發(fā)送,用ttyReceive程序接收。在步驟一的接收窗口,按ctrl+C退出cat接收命令,并執(zhí)行下述命令:11 cd /home/src/進(jìn)入工作目錄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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于人工智能的裝卸搬運(yùn)方案優(yōu)化研究-洞察闡釋
- 低延遲高可靠性5G網(wǎng)絡(luò)切片編排與優(yōu)化研究-洞察闡釋
- 雙模態(tài)情感交互研究-洞察闡釋
- 國際會(huì)議同聲傳譯室租賃與多語種翻譯保障協(xié)議
- 網(wǎng)紅奶茶加盟連鎖區(qū)域代理權(quán)授權(quán)使用合同
- 宏定義物聯(lián)網(wǎng)與工業(yè)互聯(lián)網(wǎng)的融合與應(yīng)用-洞察闡釋
- 新能源汽車零部件終身質(zhì)保及維修服務(wù)合同
- 高級(jí)機(jī)電工程師駐場(chǎng)技術(shù)支持合同
- 網(wǎng)絡(luò)直播平臺(tái)數(shù)字調(diào)音臺(tái)租賃及音頻后期制作合同
- 虛擬游戲角色財(cái)產(chǎn)交接與虛擬財(cái)產(chǎn)保護(hù)協(xié)議
- Unit8GreenLiving單元教學(xué)設(shè)計(jì)高中英語北師大版
- 籃球競(jìng)賽組織編排
- 扁桃體切除術(shù)后出血原因及預(yù)防處理
- 2024年重慶江北國際機(jī)場(chǎng)有限公司招聘筆試參考題庫含答案解析
- 數(shù)獨(dú)題目大全與答案
- 2024年安徽合肥通航控股有限公司招聘筆試參考題庫含答案解析
- 兒童超聲心動(dòng)圖操作指南與標(biāo)準(zhǔn)課件
- 刑事案件模擬法庭劇本完整版五篇
- 2022年高考全國I卷數(shù)學(xué)高考真題(原卷版)
- 東風(fēng)EQ1092F型汽車分動(dòng)器的設(shè)計(jì)
- 小主持人社團(tuán)教案
評(píng)論
0/150
提交評(píng)論