第一篇:實驗一簡單的異步串行通信實驗報告
實驗一 簡單的異步串行通信實驗
一、實驗目的及要求
1、了解掌握RS-232接口標準以及 DB9的主要引腳功能;
2、了解掌握串口通信的基本原理;
3、學習掌握RS-232電纜的制作和測試方法;
4、學習掌握使用串口調試程序進行串口之間的通信實驗。
二、實驗原理
1、異步串行通信原理
在計算機系統(tǒng)中,每個字符一般使用一個 8 位二進制代碼表示。在數(shù)據(jù)通信中,通常將 傳送的每個字符的二進制代碼按照由低位到高位的順序依次發(fā)送的方式稱為串行通信。圖 2-1 是串行通信的示意圖。由于串行通信只需在發(fā)送方和接收方之間建立一條通信信道,因 此可以減小通信系統(tǒng)的造價。在遠程通信中,一般采用串行通信方式。
圖 1-1 串行通信示意圖
同步是數(shù)據(jù)通信中必須解決的一個重要問題。所謂同步就是要求通信的收發(fā)雙方在時間基準上保持一致。在串行通信中,“異步”是同步收發(fā)雙方通信的重要方式。在異步串行通信中,每個字符作為一個獨立的整體進行發(fā)送,字符之間的時間間隔可以是任意的。為了實現(xiàn)同步,需要在每個字符的第一位前加 1 位起始符(邏輯 1),并在字符的最后一位后加 1位、1.5 位或 2 位停止位(邏輯 0)。異步串行傳輸?shù)谋忍亓鹘Y構如圖 2-2所示。
圖 1-2 異步串行傳輸?shù)谋忍亓鹘Y構
常用的串行通信接口標準包括RS-232、RS-449、V.24、V.35等。其中,RS-232是最常 用的串行通信標準之一。個人計算機及終端系統(tǒng)中配備的串行接口幾乎都符合 RS-232 標準。
2、RS-232 接口標準
串行口是一種最基本的通信接口,基本上所有的個人計算機及通信終端設備都配有這種接口。RS-232 的主要內容就 是定義數(shù)據(jù)終端設備DTE(data terminal equipment)和數(shù)據(jù)通信設備DCE(data circuit equipment)之間的接口標準。RS-232 是美國電子工業(yè)協(xié)會 EIA 推薦使用的串行通信標準。其初衷是為了促進利用電話網(wǎng)進行數(shù)據(jù)通信應用的發(fā)展,現(xiàn)在也普遍應用于各類計算機或終端設備之間的短距離連接。
RS-232 使用的連接器包括 DB-
25、DB-15 和 DB-9 等幾種類型,不同類型連接器使用的引腳定義也各不相同。
計算機 RS-232 串行通信的基本過程。圖 1-4 異步串行通信實驗總體結構示意圖
三、實驗過程與實驗步驟
1、使用制作的 RS-232電纜將 2臺計算機的可用 COM 口連接起來。
2、復制串口調試助手到硬盤上。
3、直接雙擊 “串口調試助手 3.0”運行軟件。檢查串口線是否連接到計算機和設備上。確定串口(本機為com1)。在串口調試助手中打開串口:com1。
4、使用字符串收發(fā)
5、使用文件傳輸功能
使用文件傳輸功能,在 2 臺電腦上傳輸文件,這對于某些特定場合可以用到該功能。首先由接收一端在打開串口后,按下接收文件按鈕。
之后會彈出一個對話框,等待對方發(fā)送文件。
發(fā)送一端在打開串口后,先選擇發(fā)送文件(如下圖)
選擇文件后,按下發(fā)送按鈕,文件開始傳輸中,這時 2 端都可以看到發(fā)送的進度條。發(fā)送完畢后,軟件會提示!
四、實驗結果與分析:串口(com1)
1、正常發(fā)送:
(1)A機:波特率相同(9600)、校驗位相同(none)、數(shù)據(jù)位相同(8)、停止位相同(1)
B機:波特率相同(9600)、校驗位相同(none)、數(shù)據(jù)位相同(8)、停止位相同(1)結果:A機發(fā)“你好”,B機收“你好”,(圖1); B機發(fā)“哈哈”,A機收“哈哈”,(圖2);
圖1
圖2(2)、A機:波特率相同(19200)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(2)
B機:波特率相同(19200)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(2)結果:A機發(fā)“我很好”,B機收“我很好”;圖3); B機發(fā)“你呢”,A機收“你呢”;圖4);
圖3
圖4
2、波特率不同
A機:波特率相同(4800)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)B機:波特率相同(9600)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結果:A機發(fā)“01 02 03”,B機收“胉”;(圖5); B機發(fā)“yjw”,A機收“?”;(圖6); 分析: 圖6
圖5 波特率控制采樣時間間隔,波特率不相同,收發(fā)雙方在 相等時間內接收和發(fā)送數(shù)據(jù) 不一致。
3、數(shù)據(jù)位不同
A機:波特率相同(9600)、校驗位相同(ODD)、數(shù)據(jù)位相同(6)、停止位相同(1)B機:波特率相同(9600)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結果:A機發(fā)“040506”,B機收“?”,(圖7); B機發(fā)“l(fā)ys”,A機收“,9>”,(圖8); 分析:數(shù)據(jù)位不相同,收發(fā)雙方在相等時間內接收和發(fā)送數(shù)據(jù)不一致,所以結果不相同
圖7
圖8
4、奇偶校檢不同
(1)A機:波特率相同(9600)、校驗位相同(EVE)、數(shù)據(jù)位相同(8)、停止位相同(1)
B機:波特率相同(9600)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結果:A機發(fā)“54 85 96 75”,B機收“54 85 96 75”;(圖9)B機發(fā)“第五種”,A機收“第五種”;(圖10)分析:因為校驗位用于檢驗 接收和發(fā)送的數(shù)據(jù)的正確性的,在最終轉換時會去除校驗位,所以接收到的有效數(shù)據(jù)和發(fā)送的有效數(shù)據(jù)相同,發(fā)送與接收結果一樣。
圖9
圖10(2)A機:波特率相同(9600)、校驗位相同(NONE)、數(shù)據(jù)位相同(8)、停止位相同(1)
B機:波特率相同(9600)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位相同(1)結果:A機發(fā)“54 85 96 75”,B機收“
”;(圖11)
B機發(fā)“第六種”,A機收“第六種”;(圖12)
分析:由于A機無校驗位,B機有校驗位,所以B機在收到數(shù)據(jù)并校檢,后會自動去除校檢位以致發(fā)雙方的有校數(shù)據(jù)不一致,結果不一樣。
相反的。當A機為接收方時,雖然A機無檢驗位,但是因為A機已接收到8位數(shù)據(jù)故不接收B機發(fā)送的校檢位。結果一樣。
圖11
圖12
5、停止位不同
A機:波特率相同(9600)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位不同(1)B機:波特率相同(9600)、校驗位相同(ODD)、數(shù)據(jù)位相同(8)、停止位不同(2)
圖13
結果:A機發(fā)“B機收“B機發(fā)“
”,A機收“
”,”;(圖13)”;(圖14)
圖14 分析:
5、發(fā)送文件
A機:波特率相同(9600)、校驗位相同(NONE)、數(shù)據(jù)位相同(8)、停止位相同(2)B機:波特率相同(9600)、校驗位相同(NONE)、數(shù)據(jù)位相同(8)、停止位相同(2)結果分析:
當有校檢位時,不可以接收文件;波特率不同、校驗位不同、數(shù)據(jù)位同或停止位不同時,文件無法接收;即唯有當波特率相同、數(shù)據(jù)位相同、停止位相同且無校檢位時,方可以正確接收文件。
五、思考并回答以下問題:
(1)在本實驗中,RS—232 串口電纜處于 OSI 參考模型的什么位置?它的作用是什么?
答:處于OSI 參考模型的物理層,其作用是作為傳輸介質,連接通信的網(wǎng)絡節(jié)點,實現(xiàn)比特流的透明傳輸,為數(shù)據(jù)鏈路層提供數(shù)據(jù)傳輸服務。
(2)在本實驗中,數(shù)據(jù)和信號分別體現(xiàn)在 OSI參考模型的什么位置?兩者之間有何區(qū)別?
答:數(shù)據(jù)體現(xiàn)在數(shù)據(jù)鏈路層,信號體現(xiàn)在物理層。兩者區(qū)別在:數(shù)據(jù)鏈路層:為網(wǎng)絡層提供服務的,解決兩個相鄰結點之間的通信問題,傳送的協(xié)議數(shù)據(jù)單元稱為數(shù)據(jù)幀。物理層:OSI模型的最底層。它提出了網(wǎng)絡的物理特性,比如連接的電纜類型。這里是二進制值0和1的世界,也就是數(shù)據(jù)以信號的電特性(高低電平)來表示。
(3)什么是波特率?為何兩臺 PC 的波特率不同就不能正常通信?
答:波特率又稱調制速率、傳碼速率,記為Nbd,是指在數(shù)據(jù)通信系統(tǒng)中,每秒鐘傳輸信號碼元個數(shù),單位是波特。
在串口通信,一般包括起始位,數(shù)據(jù)位,校驗位(可無)和停止位。以起始位為標志,通信雙方進行同步,然后發(fā)送方以一個固定的時間間隔進行比特位的傳輸,接收方以一個固定的時間間隔進行比特位的接收,如果雙方的波特率不同,就意味著發(fā)送方和接收方所采用的時間間隔不相等,就可能導致接收數(shù)據(jù)的錯位。一般認為通信雙方的波特率相差2.5%以內可保證正常通信。
第二篇:單片機串行通信實驗
實驗四 單片機串行通信實驗
一、實驗目的
1、掌握單片機串行口工作方式的程序設計,及簡易三線式通訊的方法。
2、了解實現(xiàn)串行通訊的硬環(huán)境、數(shù)據(jù)格式的協(xié)議、數(shù)據(jù)交換的協(xié)議。
3、學習串口通訊的中斷方式的程序編寫方法
二、實驗說明
利用單片機串行口,實現(xiàn)兩個實驗臺之間的串行通訊。其中一個實驗臺作為發(fā)送方,另一側為接收方。發(fā)送方讀入按鍵值,并發(fā)送給接收方,接收方收到數(shù)據(jù)后在LED上顯示。
三、實驗儀器
計算機
偉福實驗箱(lab2000P)
四、實驗內容與軟件流程圖 1、8051的RXD、TXD接線柱在POD51/96仿真板上。
2、通訊雙方的RXD、TXD信號本應經(jīng)過電平轉換后再行交叉連接,本實驗中為減少連線可將電平轉換電路略去,而將雙方的RXD、TXD直接交叉連接。也可以將本機的TXD接到RXD上,這樣按下的鍵,就會在本機LED上顯示出來。
3、若想與標準的RS232設備通信,就要做電平轉換,輸出時要將TTL電平換成RS232電平,輸入時要將RS232電平換成TTL電平??梢詫⒎抡姘迳系腞XD、TXD信號接到實驗板上的“用戶串口接線”的相應RXD和TXD端,經(jīng)過電平轉換,通過“用戶串口”接到外部的RS232設備??梢杂脤嶒瀮x上的邏輯分析儀采樣串口通信的波形
4、軟件流程圖
5、實驗電路連接方式
①雙機串行通信方式。TXD腳和RXD腳分別用于發(fā)送和接收數(shù)據(jù)。
②單機通信的情況下,只需將自己的TXD腳與RXD腳連接就可以,不用公地操作。
五、思考題
1、接收到的數(shù)據(jù)加1顯示出來;
2、保存前一個接收到的數(shù)據(jù),數(shù)據(jù)向前推動顯示。
六、源程序修改原理及其仿真結果 實驗結果圖 源程序:
加1顯示:
接收到的數(shù)據(jù)先前推送:
七、心得體會
通過這次實驗,我掌握了單片機串行口工作方式的程序設計,及簡易三線式通訊的方法。了解了實現(xiàn)串行通訊的硬環(huán)境、數(shù)據(jù)格式的協(xié)議、數(shù)據(jù)交換的協(xié)議。學習了串口通訊的中斷方式的程序編寫方法。
第三篇:南郵通信技術實驗報告實驗一
南京郵電大學通達學院
課程實驗報告
題 目: IP網(wǎng)絡中的TCP-UDP通信實驗
學 院 通達學院 學 生 姓 名 王偉慧 班 級 學 號 10005002 指 導 教 師 王珺 開 課 學 院 通信與信息工程學院 日 期 2013.5
一,實驗目的
了解局域網(wǎng)TCP消息通信過程的機制;
1,了解局域網(wǎng)UDP消息通信過程的特點; 2,熟悉最簡單的Socket類的操作和使用;
3,實現(xiàn)字符串通信、文件(ASCII文件)傳輸、Socket局域網(wǎng)電話的實現(xiàn);
二 實驗設備及軟件環(huán)境
答:一臺或兩臺裝有VC++的帶有網(wǎng)卡的PC機(或工控機)。
以太網(wǎng)TCP通信UDP通信服務器端10.10.9.1客戶端10.10.9.210.10.9.3710.10.9.15
三 實驗步驟
內容一:基于TCP協(xié)議的Socket消息發(fā)送和接收
說明:事例程序包括“TCP聊天服務器” 與“TCP聊天客戶端”。1,運行示例程序“TCP聊天服務器”設置端口號:1001,2,點擊“服務器開啟服務”
3,運行示例程序“TCP聊天客戶端”,設置端口號一定要與“TCP聊天服務器”設置的一致。如果在同一臺機器上運行,輸入服務器IP地址:127.0.0.1,如果不在同一臺機器上,輸入局域網(wǎng)上服務器所在機器的IP地址(當然首先確保局域網(wǎng)通暢)4,點擊“連接”
在客戶端輸入文字消息,可以看到服務器端能顯示出客戶機的名稱、IP地址、以及通過Socket消息發(fā)送過來的文字內容。內容二,基于UDP的SOCKET消息 1,(必須是在兩臺機器上,說明書上示意為10.10.9.37和10.10.9.15兩個IP地址)均運行程序“UDP客戶端”,運行界面如圖1.5,注意此時已經(jīng)沒有明確的“服務器”“客戶端”之說,“服務器名”輸入對端IP地址,端口號必須一致。2,分別點擊“打開端口”,連接上服務器后,可以互發(fā)消息
四.實驗內容及實驗結果
TCP通信
UDP通信
五.實驗體會
實驗過程中,雖然有很多的困難,但經(jīng)過老師和同學的知道,最終都順利解決了,實驗之后,對TCP、UDP的通信連接有了更加深刻的認識,增長了有關通信技術方面的知識,對以后的學習生活,都會有很大的幫助。
六.思考題
3,如果現(xiàn)在要傳送一個TXT文本,應如何實現(xiàn),寫出編程思路?(1)打開文本 將內容讀入 緩沖區(qū)(2)與 另一臺機器建立 socket連接(3)發(fā)送
(4)另一臺機器 保存接收到的內容
5,TCP本機通信時可以使用哪些IP地址來進行訪問? 答:1.本機設定的IP 2.環(huán)回地址,以127.開頭的IP地址如127.0.0.1 6.TCP通信時如果服務器一方改變端口號,客戶端應做怎樣的處理?
答:因為客戶端一般情況下不設置端口號,因此在調用SOCKET()創(chuàng)建套接口后,直接調用CONNECT()函數(shù)連接到目標主機,這中情況下客戶端的端口是系統(tǒng)分配的,如果你想自己指定客戶端的端口,那么就象服務端一樣,在SOCKET()創(chuàng)建套接口后,調用一下BIND()函數(shù)綁定本機端口,然后再調用CONNECT()函數(shù)。
第四篇:串行通信的工作方式
串行通信的工作方式?數(shù)據(jù)按時間順序(分時)先后一位一位地通過單通信通路傳送的通信方式。
①從通信距離上看:并行通信適宜于近距離的數(shù)據(jù)傳送,通常小于30米。而串行通信適宜于遠距離傳送,可以從幾米到數(shù)千公里。
②從通信速率上看:在短距離內,并行接口的數(shù)據(jù)傳輸速率顯然比串行接口的傳輸速率高得多,但遠距離串行數(shù)據(jù)傳送速率比并行數(shù)據(jù)傳送速率易于提高。由于串行通信的通信時鐘頻率較并行通信容易提高,因此許多高速外部設備如數(shù)字攝像機與計算機之間的通信也往往使用串行通信方式。
③從抗干擾性能上看:串行通信由于只有少數(shù)幾根信號線,信號間的互相干擾比較小。
④從設備和費用上看:隨著大規(guī)模和超大規(guī)模集成電路的發(fā)展,邏輯器件價格趨低,而通信線路費用趨高,因此對遠距離通信而言,串行通信的費用顯然會低得多。另一方面串行通信還可利用現(xiàn)有的電話網(wǎng)絡來實現(xiàn)遠程通信,降低了通信費用。
第五篇:實驗一 實驗報告
網(wǎng) 絡 程 序 設 實驗報告
實驗名稱:Winsock編程接口實驗 實驗類型: 驗 證 型
計
一、實驗目的
? 掌握Winsock的啟動和初始化;
? 掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查詢函數(shù)的使用。
二、實驗設計
實驗內容:
1、編寫程序能同時實現(xiàn)對多個域名的解析。比如在控制臺輸入:getip www.004km.cn對應的IP地址列表。
2、編寫程序獲取并輸出本地主機的所有適配器的IP地址,子網(wǎng)掩碼,默認網(wǎng)關,MAC地址。
根據(jù)實驗內容編寫程序:
1、對相關域名進行解析,利用gethostbyname()完成解析,用到的結構體為:
struct hostent{ char FAR*
h_name;char FAR* FAR* h_aliases;short
h_addrtype;short
h_length;char FAR* FAR* h_addr_list;}
得到的IP地址列表由h_addr_list存儲;
2、利用GetAdaptersInfo()函數(shù)獲得本地主機的相關信息,通過IP_ADAPTER_INFO結構體返回所需信息。
IP_ADAPTER_INFO的定義如下: typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
三、實驗過程(包含實驗結果)
1、分析題目,編寫程序;
2、將編寫的程序進行編譯、運行,輸入題目給定的內容,完成題目要求; 結果如下:
第1題:
第2題:
四、討論與分析
思考題:
1、Winsock初始化的作用:只有調用了WSAStartup()進行初始化之后,應用程 序才能調用其他Windows Sockets API函數(shù),實現(xiàn)網(wǎng)絡通信;
2、函數(shù)原型為:
DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo,//接受數(shù)據(jù)的緩沖區(qū)
PULONG pOutBufLen
// 數(shù)據(jù)的長度大小);
3、域名解析時出現(xiàn)域名對應多個IP,原因:該域名存在于多個服務器。
五、實驗者自評
通過本次實驗,我掌握了Winsock的啟動和初始化以及gethostname(),gethostbyname(),GetAdaptersInfo()等函數(shù)查詢的使用,加深了以前對課本知識的認識程度。
六、附錄:關鍵代碼(給出適當注釋,可讀性高)
第1題代碼:
////////////////////////////////////////////////// // GetAllIps.cpp文件
//#include “../common/InitSock.h” #include
using namespace std;
#pragma comment(lib, “WS2_32”)// 鏈接到WS2_32.lib //CInitSock initSock;// 初始化Winsock庫
void main(){
char szMessage[256];// 取得本地主機名稱
// 初始化
WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2), &wsaData)!= 0){
exit(0);}
// 通過主機名得到地址信息
printf(“ Get IP::”);gets(szMessage);
// 獲取主機信息
hostent *pHost = ::gethostbyname(szMessage);
// 打印出所有IP地址
in_addr addr;for(int i = 0;;i++){
char *p = pHost->h_addr_list[i];
if(p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(“ 服務器 %s IP地址:%s n ”,szMessage, szIp);
printf(“服務器名字: %s n”,pHost->h_name);}
/////////////////////////// ::WSACleanup();
}
第2題代碼:
// 獲取并輸出本地主機的所有適配器的IP地址,子網(wǎng)掩碼,默認網(wǎng)關,MAC地址
#include
void main(){ // 定義變量
IP_ADAPTER_INFO *pAdapterInfo;ULONG ulOutBufLen;DWORD dwRetVal;PIP_ADAPTER_INFO pAdapter;
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));ulOutBufLen = sizeof(IP_ADAPTER_INFO);// 第一次獲取適配器信息,得到ulOutBufLen的實際大小
if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
free(pAdapterInfo);
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(ulOutBufLen);} // 第二次獲取適配器信息,獲得了pAdapterInfo信息
if(dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
cout<<“GetAdapterInfo Error!”< // 打印MAC地址信息、子網(wǎng)掩碼以及網(wǎng)關 pAdapter = pAdapterInfo;while(pAdapter){ cout<<“MAC Address: ”; for(int i=0;i AddressLength;i++) { if(i ==(pAdapter->AddressLength-1)) { cout< } else { cout< } } cout< cout<<“IP 地址:”< IpAddressList.IpAddress.String< cout<<“子網(wǎng)掩碼 :”< IpAddressList.IpMask.String< cout<<“網(wǎng)關 :”< IpAddressList.IpAddress.String< cout<<“****************************************”< pAdapter = pAdapter->Next;} // 釋放資源 if(pAdapterInfo){ free(pAdapterInfo);} cout< }