c语言与通讯数据处理实验报告a

上传人:第*** 文档编号:32684291 上传时间:2018-02-12 格式:DOCX 页数:14 大小:223.71KB
返回 下载 相关 举报
c语言与通讯数据处理实验报告a_第1页
第1页 / 共14页
c语言与通讯数据处理实验报告a_第2页
第2页 / 共14页
c语言与通讯数据处理实验报告a_第3页
第3页 / 共14页
c语言与通讯数据处理实验报告a_第4页
第4页 / 共14页
c语言与通讯数据处理实验报告a_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《c语言与通讯数据处理实验报告a》由会员分享,可在线阅读,更多相关《c语言与通讯数据处理实验报告a(14页珍藏版)》请在金锄头文库上搜索。

1、 C 语言与通讯数据处理实验报告一、 实验目的1、熟悉 c 语言的编译,链接和运行过程2、掌握 c 语言的数据类型,熟悉整型,实型,字符型变量的定义方式与赋值,掌握不同类型数据之间赋值规则和赋值方法3、掌握数组的定义,赋值引用及输入输出方法,并正确用字符数组储存字符串,学会字符串的使用4、掌握结构体变量的定义和使用5、掌握指针变量和指向指针的指针变量的定义及使用6、熟悉通讯数据的处理规则及不同处理方法的优缺点7、掌握 VS 中简单的界面编辑能力及编辑框的关联变量的定义二、 实验平台:Microsoft Visual Studio 2010三、 实验内容1、编写界面,在预先给定的对话框中添加静态

2、文本框和编辑框,设置静态文本框内容和编辑框的关联变量,变量保存在 ComDateProcessDlg.h 文件中2、按钮编辑1) 、发送按钮将不同格式数据赋给预先定义的对应格式的变量之中2) 、接收按钮将发送按钮中已赋值的变量中数据赋值给界面编辑框相对应的关联变量3、调试程序四、 实验步骤1、了解通讯协议数据格式如下:地址码 长度状态量无符号整数符号整数无符号长整数符号长整数无符号定点小数浮点数双精度数校验码1 字节1 字节2 字节2 字节2 字节4 字节4 字节2 字节 4 字节8 字节1 字节说明:1) 、状态量定义如下:15 14 13 12 11 10 9 8 7 6 5 4 3 2

3、1 0状态码 保留开关7开关6开关5开关4开关3开关2开关12) 、无符号定点小数定义如下:高 9 位:整数,低 7 位:小数3) 、校验码:为校验码之前所有字节的求和。2、界面编辑在界面添加静态文本框以及编辑框,编辑文本框内容与编辑框将显示的数据一一对应,并为每个编辑框添加对应的关联变量,优化界面。3、发送和接收数据处理:打开 ComDataProcessDlg,cpp 文件对按钮进行编译1) 、首先定义中间变量,即通讯数据的储存变量unsigned short *pishort;float *pf;unsigned long *pulong;long *plong;2) 、运用指针变量进行

4、赋值:sendbuf0=0x01;/地址号sendbuf1=31;/数据帧长度pishort=(unsigned short *)(sendbuf+2);*pishort=0xf03e;/状态码pishort=(unsigned short *)(sendbuf+4);*pishort=255;-3) 、状态量处理:状态量前五位为状态码,后为七位开关变量,中间四位保留首先定义变量unsigned char sw1,sw2,sw7;unsigned char statecode;unsigned short statecode16;/16 位临时状态变量unsigned short status

5、;/前面定义的状态变量状态码及开关的获取:用关系运算符“&”来选择位置,并用移位运算符“”将高位数字移至最低位statecode16= status/1111 1000 0000 0000statecode= (unsigned char)(statecode1611);statecode16= status/0000 0000 0100 0000sw7= (unsigned char)(statecode166);4) 、定点小数的转化:在给中间变量赋值时,先给定点小数赋一个无符号整形变量,在编写接收按钮时除以 2n 确定小数点的位置,即将小数点前移 n 位m_fixeddecimal(fl

6、oat ) (16 utmp)128.0f5) 、方法缺陷:由于使用了数组指针进行赋值,对每个变量的位置和长度也就固定了下来,所以对于数据类型的修改会比较困难4、了解并应用通讯协议的数据结构针对上述问题,可使用结构变量进行优化 1) 、结构的重要特征: (1) 、数据集中存放 (2) 、数据按定义的先后顺序存放2) 、结构体字节对齐规则(1) 、结构体成员按低地址到高地址的顺序储存在内存,即按声明的顺序储存(2) 、每个成员的地址必须满足:是 sizeof(该成员)的整数倍(3) 、总的字节数是最大内置(就是基本类型)成员所占字节的整数倍为满足以上规则,通讯协议改进如下:地址码 长度状态量无符

7、号整数符号整数无符号长整数符号长整数双精度数浮点数无符号定点小数校验码1 字节1 字节2 字节2 字节2 字节4 字节4 字节8 字节 4 字节2 字节1 字节3) 、首先,新建一个头文件”struct.h”,在文件中定义结构体:-struct Comm_Dataunsigned char addr;unsigned char len;STATE_BITS states;unsigned short uishort;short ishort;unsigned long uilong;long ilong;double dtmp;float ftmp;unsigned short uffix;u

8、nsigned char check;-4) 、在 ComDataProcessDlg.h文件开头加入” #include”struct.h” ”以调用struct.h文件中的内容,增加两个用于发送和接收的全局变量Comm_Data_Unioncomm_data_Send和Comm_Data_Unioncomm_data_Rcv。打开omDataProcessDlg.cpp 文件对发送和接收按钮进行编写:comm_data_S_data.addr=2;comm_data_S_data.len=30;-m_addr=comm_data_R_data.addr;m_length=comm_data

9、_R_data.len;-注:对于定点小数的处理同上,不再重复说明5、实验结果及分析本次试验运用了两种方法进行通讯数据处理。第一种方法因为用了指针,发送和接收按钮变量赋值都有顺序要求,第二种由于定义结构体时已有顺序,所以赋值时没有这个要求;第一种状态码的开关要用&控制赋值,第二种所有变量都可以直接赋值;第一种对于协议的数据类型顺序没有要求,第二种结构体变量要满足字节对齐规则的要求。/ ComDataProcessDlg.h : header file/#includestruct.h#pragmaonce/ CComDataProcessDlg dialogclassCComDataProce

10、ssDlg : publicCDialogEx/ Constructionpublic:/-请在这里定义变量和函数-unsignedcharsendbuf1024;/发送缓冲区unsignedcharrecvbuf1024;/接收缓冲区unsignedcharGetCheckSum(unsignedchar *pStartPos,int length);/生成一?个?字?节的校验码?-求和Comm_Data_Unioncomm_data_Send;Comm_Data_Unioncomm_data_RCV;/-定义变量和函数结束-CComDataProcessDlg(CWnd* pParent

11、= NULL); / standard constructor/ Dialog Dataenum IDD = IDD_COMDATAPROCESS_DIALOG ;protected:virtualvoidDoDataExchange(CDataExchange* pDX); / DDX/DDV support/ Implementationprotected:HICON m_hIcon;/ Generated message map functionsvirtual BOOL OnInitDialog();afx_msgvoidOnSysCommand(UINT nID, LPARAM lP

12、aram);afx_msgvoidOnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msgvoidOnBnClickedButtonSend();afx_msgvoidOnBnClickedButtonReceive();CStringm_SendString;BYTE m_addr;/界?面?上显示地址”的变量BYTE m_len;/界?面?上显?示长度”的变量doublem_double;/界?面?上显?示双精?度数的变量floatm_fixeddecimal;/界?面?上显?示无T符号?

13、定点小?数的变量floatm_float;/界?面?上显?示浮?点数的变量longm_long;/界?面?上显?示符号?长整?数的变量DWORD m_ulong;/界?面?上显?示无T符号?长整?数的变量shortm_unsignedint;/界?面?上显?示无T符号?整?数的变量shortm_short;/界?面?上显示符号?整?数的变量BYTE m_state;/界?面?上显?示状态码的变量BYTE m_SW1;/界?面?上显?示开a关?1”的变量BYTE m_SW2;/界?面?上显?示开a关的变量BYTE m_SW3;/界?面?上显?示开a关的变量BYTE m_SW4;/界?面?上显?示

14、开a关的变量BYTE m_SW5;/界?面?上显?示开a关的变量BYTE m_SW6;/界?面?上显?示开a关的变量BYTE m_SW7;/界?面?上显?示开a关的变量BYTE m_check;/界?面?上显?示校验码的变量;#define TotalLen 31/定义通讯数据总长度struct STATE_BITS unsignedshort SW1:1;unsignedshort SW2:1;unsignedshort SW3:1;unsignedshort SW4:1;unsignedshort SW5:1;unsignedshort SW6:1;unsignedshort SW7:1;

15、unsignedshort reserved:4;unsignedshort statecode:5; 自建的头文件;struct Comm_Dataunsignedchar addr;unsignedchar len;STATE_BITS states;unsignedshort uishort;short ishort;unsignedlong uilong;long ilong;double dtmp;float ftmp;unsignedshort uffix;unsignedchar check;union Comm_Data_UnionComm_Data com_data;unsignedchar bufTotalLen;发送按钮/-发送按钮消?息响应|函数y-void CComDataProcessDlg:OnBnClickedButtonSend()/ TODO: Add

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号