第一篇:实验一简单的异步串行通信实验报告
实验一 简单的异步串行通信实验
一、实验目的及要求
1、了解掌握RS-232接口标准以及 DB9的主要引脚功能;
2、了解掌握串口通信的基本原理;
3、学习掌握RS-232电缆的制作和测试方法;
4、学习掌握使用串口调试程序进行串口之间的通信实验。
二、实验原理
1、异步串行通信原理
在计算机系统中,每个字符一般使用一个 8 位二进制代码表示。在数据通信中,通常将 传送的每个字符的二进制代码按照由低位到高位的顺序依次发送的方式称为串行通信。图 2-1 是串行通信的示意图。由于串行通信只需在发送方和接收方之间建立一条通信信道,因 此可以减小通信系统的造价。在远程通信中,一般采用串行通信方式。
图 1-1 串行通信示意图
同步是数据通信中必须解决的一个重要问题。所谓同步就是要求通信的收发双方在时间基准上保持一致。在串行通信中,“异步”是同步收发双方通信的重要方式。在异步串行通信中,每个字符作为一个独立的整体进行发送,字符之间的时间间隔可以是任意的。为了实现同步,需要在每个字符的第一位前加 1 位起始符(逻辑 1),并在字符的最后一位后加 1位、1.5 位或 2 位停止位(逻辑 0)。异步串行传输的比特流结构如图 2-2所示。
图 1-2 异步串行传输的比特流结构
常用的串行通信接口标准包括RS-232、RS-449、V.24、V.35等。其中,RS-232是最常 用的串行通信标准之一。个人计算机及终端系统中配备的串行接口几乎都符合 RS-232 标准。
2、RS-232 接口标准
串行口是一种最基本的通信接口,基本上所有的个人计算机及通信终端设备都配有这种接口。RS-232 的主要内容就 是定义数据终端设备DTE(data terminal equipment)和数据通信设备DCE(data circuit equipment)之间的接口标准。RS-232 是美国电子工业协会 EIA 推荐使用的串行通信标准。其初衷是为了促进利用电话网进行数据通信应用的发展,现在也普遍应用于各类计算机或终端设备之间的短距离连接。
RS-232 使用的连接器包括 DB-
25、DB-15 和 DB-9 等几种类型,不同类型连接器使用的引脚定义也各不相同。
计算机 RS-232 串行通信的基本过程。图 1-4 异步串行通信实验总体结构示意图
三、实验过程与实验步骤
1、使用制作的 RS-232电缆将 2台计算机的可用 COM 口连接起来。
2、复制串口调试助手到硬盘上。
3、直接双击 “串口调试助手 3.0”运行软件。检查串口线是否连接到计算机和设备上。确定串口(本机为com1)。在串口调试助手中打开串口:com1。
4、使用字符串收发
5、使用文件传输功能
使用文件传输功能,在 2 台电脑上传输文件,这对于某些特定场合可以用到该功能。首先由接收一端在打开串口后,按下接收文件按钮。
之后会弹出一个对话框,等待对方发送文件。
发送一端在打开串口后,先选择发送文件(如下图)
选择文件后,按下发送按钮,文件开始传输中,这时 2 端都可以看到发送的进度条。发送完毕后,软件会提示!
四、实验结果与分析:串口(com1)
1、正常发送:
(1)A机:波特率相同(9600)、校验位相同(none)、数据位相同(8)、停止位相同(1)
B机:波特率相同(9600)、校验位相同(none)、数据位相同(8)、停止位相同(1)结果:A机发“你好”,B机收“你好”,(图1); B机发“哈哈”,A机收“哈哈”,(图2);
图1
图2(2)、A机:波特率相同(19200)、校验位相同(ODD)、数据位相同(8)、停止位相同(2)
B机:波特率相同(19200)、校验位相同(ODD)、数据位相同(8)、停止位相同(2)结果:A机发“我很好”,B机收“我很好”;图3); B机发“你呢”,A机收“你呢”;图4);
图3
图4
2、波特率不同
A机:波特率相同(4800)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“01 02 03”,B机收“胉”;(图5); B机发“yjw”,A机收“?”;(图6); 分析: 图6
图5 波特率控制采样时间间隔,波特率不相同,收发双方在 相等时间内接收和发送数据 不一致。
3、数据位不同
A机:波特率相同(9600)、校验位相同(ODD)、数据位相同(6)、停止位相同(1)B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“040506”,B机收“?”,(图7); B机发“lys”,A机收“,9>”,(图8); 分析:数据位不相同,收发双方在相等时间内接收和发送数据不一致,所以结果不相同
图7
图8
4、奇偶校检不同
(1)A机:波特率相同(9600)、校验位相同(EVE)、数据位相同(8)、停止位相同(1)
B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“54 85 96 75”,B机收“54 85 96 75”;(图9)B机发“第五种”,A机收“第五种”;(图10)分析:因为校验位用于检验 接收和发送的数据的正确性的,在最终转换时会去除校验位,所以接收到的有效数据和发送的有效数据相同,发送与接收结果一样。
图9
图10(2)A机:波特率相同(9600)、校验位相同(NONE)、数据位相同(8)、停止位相同(1)
B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位相同(1)结果:A机发“54 85 96 75”,B机收“
”;(图11)
B机发“第六种”,A机收“第六种”;(图12)
分析:由于A机无校验位,B机有校验位,所以B机在收到数据并校检,后会自动去除校检位以致发双方的有校数据不一致,结果不一样。
相反的。当A机为接收方时,虽然A机无检验位,但是因为A机已接收到8位数据故不接收B机发送的校检位。结果一样。
图11
图12
5、停止位不同
A机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位不同(1)B机:波特率相同(9600)、校验位相同(ODD)、数据位相同(8)、停止位不同(2)
图13
结果:A机发“B机收“B机发“
”,A机收“
”,”;(图13)”;(图14)
图14 分析:
5、发送文件
A机:波特率相同(9600)、校验位相同(NONE)、数据位相同(8)、停止位相同(2)B机:波特率相同(9600)、校验位相同(NONE)、数据位相同(8)、停止位相同(2)结果分析:
当有校检位时,不可以接收文件;波特率不同、校验位不同、数据位同或停止位不同时,文件无法接收;即唯有当波特率相同、数据位相同、停止位相同且无校检位时,方可以正确接收文件。
五、思考并回答以下问题:
(1)在本实验中,RS—232 串口电缆处于 OSI 参考模型的什么位置?它的作用是什么?
答:处于OSI 参考模型的物理层,其作用是作为传输介质,连接通信的网络节点,实现比特流的透明传输,为数据链路层提供数据传输服务。
(2)在本实验中,数据和信号分别体现在 OSI参考模型的什么位置?两者之间有何区别?
答:数据体现在数据链路层,信号体现在物理层。两者区别在:数据链路层:为网络层提供服务的,解决两个相邻结点之间的通信问题,传送的协议数据单元称为数据帧。物理层:OSI模型的最底层。它提出了网络的物理特性,比如连接的电缆类型。这里是二进制值0和1的世界,也就是数据以信号的电特性(高低电平)来表示。
(3)什么是波特率?为何两台 PC 的波特率不同就不能正常通信?
答:波特率又称调制速率、传码速率,记为Nbd,是指在数据通信系统中,每秒钟传输信号码元个数,单位是波特。
在串口通信,一般包括起始位,数据位,校验位(可无)和停止位。以起始位为标志,通信双方进行同步,然后发送方以一个固定的时间间隔进行比特位的传输,接收方以一个固定的时间间隔进行比特位的接收,如果双方的波特率不同,就意味着发送方和接收方所采用的时间间隔不相等,就可能导致接收数据的错位。一般认为通信双方的波特率相差2.5%以内可保证正常通信。
第二篇:单片机串行通信实验
实验四 单片机串行通信实验
一、实验目的
1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串口通讯的中断方式的程序编写方法
二、实验说明
利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示。
三、实验仪器
计算机
伟福实验箱(lab2000P)
四、实验内容与软件流程图 1、8051的RXD、TXD接线柱在POD51/96仿真板上。
2、通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上,这样按下的键,就会在本机LED上显示出来。
3、若想与标准的RS232设备通信,就要做电平转换,输出时要将TTL电平换成RS232电平,输入时要将RS232电平换成TTL电平。可以将仿真板上的RXD、TXD信号接到实验板上的“用户串口接线”的相应RXD和TXD端,经过电平转换,通过“用户串口”接到外部的RS232设备。可以用实验仪上的逻辑分析仪采样串口通信的波形
4、软件流程图
5、实验电路连接方式
①双机串行通信方式。TXD脚和RXD脚分别用于发送和接收数据。
②单机通信的情况下,只需将自己的TXD脚与RXD脚连接就可以,不用公地操作。
五、思考题
1、接收到的数据加1显示出来;
2、保存前一个接收到的数据,数据向前推动显示。
六、源程序修改原理及其仿真结果 实验结果图 源程序:
加1显示:
接收到的数据先前推送:
七、心得体会
通过这次实验,我掌握了单片机串行口工作方式的程序设计,及简易三线式通讯的方法。了解了实现串行通讯的硬环境、数据格式的协议、数据交换的协议。学习了串口通讯的中断方式的程序编写方法。
第三篇:南邮通信技术实验报告实验一
南京邮电大学通达学院
课程实验报告
题 目: IP网络中的TCP-UDP通信实验
学 院 通达学院 学 生 姓 名 王伟慧 班 级 学 号 10005002 指 导 教 师 王珺 开 课 学 院 通信与信息工程学院 日 期 2013.5
一,实验目的
了解局域网TCP消息通信过程的机制;
1,了解局域网UDP消息通信过程的特点; 2,熟悉最简单的Socket类的操作和使用;
3,实现字符串通信、文件(ASCII文件)传输、Socket局域网电话的实现;
二 实验设备及软件环境
答:一台或两台装有VC++的带有网卡的PC机(或工控机)。
以太网TCP通信UDP通信服务器端10.10.9.1客户端10.10.9.210.10.9.3710.10.9.15
三 实验步骤
内容一:基于TCP协议的Socket消息发送和接收
说明:事例程序包括“TCP聊天服务器” 与“TCP聊天客户端”。1,运行示例程序“TCP聊天服务器”设置端口号:1001,2,点击“服务器开启服务”
3,运行示例程序“TCP聊天客户端”,设置端口号一定要与“TCP聊天服务器”设置的一致。如果在同一台机器上运行,输入服务器IP地址:127.0.0.1,如果不在同一台机器上,输入局域网上服务器所在机器的IP地址(当然首先确保局域网通畅)4,点击“连接”
在客户端输入文字消息,可以看到服务器端能显示出客户机的名称、IP地址、以及通过Socket消息发送过来的文字内容。内容二,基于UDP的SOCKET消息 1,(必须是在两台机器上,说明书上示意为10.10.9.37和10.10.9.15两个IP地址)均运行程序“UDP客户端”,运行界面如图1.5,注意此时已经没有明确的“服务器”“客户端”之说,“服务器名”输入对端IP地址,端口号必须一致。2,分别点击“打开端口”,连接上服务器后,可以互发消息
四.实验内容及实验结果
TCP通信
UDP通信
五.实验体会
实验过程中,虽然有很多的困难,但经过老师和同学的知道,最终都顺利解决了,实验之后,对TCP、UDP的通信连接有了更加深刻的认识,增长了有关通信技术方面的知识,对以后的学习生活,都会有很大的帮助。
六.思考题
3,如果现在要传送一个TXT文本,应如何实现,写出编程思路?(1)打开文本 将内容读入 缓冲区(2)与 另一台机器建立 socket连接(3)发送
(4)另一台机器 保存接收到的内容
5,TCP本机通信时可以使用哪些IP地址来进行访问? 答:1.本机设定的IP 2.环回地址,以127.开头的IP地址如127.0.0.1 6.TCP通信时如果服务器一方改变端口号,客户端应做怎样的处理?
答:因为客户端一般情况下不设置端口号,因此在调用SOCKET()创建套接口后,直接调用CONNECT()函数连接到目标主机,这中情况下客户端的端口是系统分配的,如果你想自己指定客户端的端口,那么就象服务端一样,在SOCKET()创建套接口后,调用一下BIND()函数绑定本机端口,然后再调用CONNECT()函数。
第四篇:串行通信的工作方式
串行通信的工作方式数据按时间顺序(分时)先后一位一位地通过单通信通路传送的通信方式。
①从通信距离上看:并行通信适宜于近距离的数据传送,通常小于30米。而串行通信适宜于远距离传送,可以从几米到数千公里。
②从通信速率上看:在短距离内,并行接口的数据传输速率显然比串行接口的传输速率高得多,但远距离串行数据传送速率比并行数据传送速率易于提高。由于串行通信的通信时钟频率较并行通信容易提高,因此许多高速外部设备如数字摄像机与计算机之间的通信也往往使用串行通信方式。
③从抗干扰性能上看:串行通信由于只有少数几根信号线,信号间的互相干扰比较小。
④从设备和费用上看:随着大规模和超大规模集成电路的发展,逻辑器件价格趋低,而通信线路费用趋高,因此对远距离通信而言,串行通信的费用显然会低得多。另一方面串行通信还可利用现有的电话网络来实现远程通信,降低了通信费用。
第五篇:实验一 实验报告
网 络 程 序 设 实验报告
实验名称:Winsock编程接口实验 实验类型: 验 证 型
计
一、实验目的
掌握Winsock的启动和初始化;
掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。
二、实验设计
实验内容:
1、编写程序能同时实现对多个域名的解析。比如在控制台输入:getip www.xiexiebang.com对应的IP地址列表。
2、编写程序获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC地址。
根据实验内容编写程序:
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()函数获得本地主机的相关信息,通过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函数,实现网络通信;
2、函数原型为:
DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo,//接受数据的缓冲区
PULONG pOutBufLen
// 数据的长度大小);
3、域名解析时出现域名对应多个IP,原因:该域名存在于多个服务器。
五、实验者自评
通过本次实验,我掌握了Winsock的启动和初始化以及gethostname(),gethostbyname(),GetAdaptersInfo()等函数查询的使用,加深了以前对课本知识的认识程度。
六、附录:关键代码(给出适当注释,可读性高)
第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地址,子网掩码,默认网关,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地址信息、子网掩码以及网关 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<<“子网掩码 :”< IpAddressList.IpMask.String< cout<<“网关 :”< IpAddressList.IpAddress.String< cout<<“****************************************”< pAdapter = pAdapter->Next;} // 释放资源 if(pAdapterInfo){ free(pAdapterInfo);} cout< }