




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
利用串口 传输各种 数值数据二、MCS-51单片机端设计1、通信协议为做演示说明我们仅发送3个数据顺序依次为:字符型数据、整型数据、浮点型数据,字符型数据、整型数据、浮点型数据在MCS-51单片机的C语言中分别占用1、2、4个字节。由于是采用周期性的数值数据发送方法,为使PC机端能准确接收所发送数据设计数据包如下:所有数据按发送顺序及占用字节数顺序排列,等待发送。数据包以两个字节的数据0XFF表示数据包结尾。当等待发送数据为0XFF时,插入转义字符0X27,避免发送数据中出现连续的两个0XFF,造成虚假的数据包结尾。插入的转义字符在接收时自动删除,为避免发送数据为0X27时被自动删除,在其后也插入转义字符0X27。2、单片机程序设计由于发送、接收双方距离较近,故波特率设置为9600bps、数据位数为8 位、没有奇偶校验位、1位停止位。系统的定时器/记数器T0、T1已另作它用,故选择T2做为波特率发生器。使用T2做为波特率发生器时不会产生通讯中断。单片机发送程序由两个子程序组成:串口初始化、数据发送。代码如下:voidinit232(void) /串口初始化子程序SCON=0x50;PCON=0x80;T2CON=0x34;RCAP2L = 0xb2;RCAP2H = 0xff;TL2 = 0xb2;TH2 = 0xff;TR2=1;voidsenddata()/数据发送子程序uchar data * data pd;uchar i;pd=&char_data; /send char data SBUF=*pd;while(TI=0); TI=0;if(*pd)=0xff) | (*pd)=0x27) SBUF=0x27; while(TI=0); TI=0;pd=&int_data; /send int data for(i=0;i2;i+) SBUF=*pd; while(TI=0); TI=0; if(*pd)=0xff) | (*pd)=0x27) SBUF=0x27; while(TI=0); TI=0; pd+;pd=&float_data; /send float data for(i=0;i4;i+) SBUF=*pd; while(TI=0); TI=0; if(*pd)=0xff) | (*pd)=0x27) SBUF=0x27; while(TI=0); TI=0; pd+;SBUF=0xff;/send end flagwhile(TI=0); TI=0;SBUF=0xff;while(TI=0); TI=0;数据发送子程序利用指针指向要发送数据,然后根据数据占用字节数,确定循环次数,在循环体内发送。由于我们定义的指针是字符型,在其指向整型数据、浮点型数据在内存的首地址时,编译器会给出WARNING性提示: “pointer to different objects”,它并不会影响程序的执行效果,可不予理会。要避免出现WARNING性提示,可采用计算机端的方法定义联合体型数据来解决,但代码会很长;另外编译器一般会按定义的次序顺序为变量分配内存,所以指针只要指向要发送的第一个数据,再根据全部数据占用字节数进行循环,可极大减少代码长度。三、计算机端设计Visual C+6.0是 Windows环境下的一种简单、高效的可视化编程语言开发系统 ,以其可视化界面设计风格和面向对象的程序设计等特点在工程实践中得到了广泛的应用 ,其简洁性和实用性已经受到了众多计算机用户和程序员的欢迎 ,尤其是其 6. 0版本 ,功能强大且易于掌握。它不但提供了良好的界面开发环境 ,而且具有功能强大的通信控件Microsoft Communications Control (MSComm)实用性强、功能完善 ,是实现计算机与外部设备数据交换的强有力工具 ,提供了很强的串口通信能力。计算机端设计过程如下:1、在程序中嵌入通讯控件启动VisualC+6.0,利用MFC的AppWizard新建一个项目文件,并命名为CommTe。在Appwizard第一步选择基于对话框的应用程序类型(Dialog based)。在第二步将ActiveX Controls 复选框选中,表示本程序支持ActiveX Controls控件。其他均接收缺省设置,AppWizard将自动生成一个以对话框为主窗口的应用程序。单击Progect菜单,从菜单中选Add to Project,再单击Commponents and Control,从弹出对话框中单击Registered ActiveX Controls,在列表框中选Microsoft Communications Control,单击OK。这时会询问你是否加入CMSComm类,单击OK,返回后看到控件工具条上添加了一个通讯控件(在图中用标有“电话”的方框表示),将其拖放到对话框中此时项目中增加一个类MSComm。2、设置通讯控件的属性值通过设置MSComm控件的属性对串口实例进行初始化,在OnInitDialog()中填入如下代码:m_comm.SetCommPort(1);/指定串口号m_comm.SetSettings(9600,n,8,1);/通信参数设置m_comm.SetInBufferSize(256);/指定接收缓冲区大小m_comm.InputMode( 1 );/设置数据获取方式m_comm.SetInputLen(1 );/每次读操作从缓冲区中取1个字符m_comm.SetRThreshold(1); /每接收1个字符就触发1次接收事件m_comm.SetSThreshold(0); /不触发发送事件m_comm.SetInBufferCount(0);/清空接收缓冲区m_comm.SetPortOpen(TRUE);/打开串口3、接收端数值的识别接收端数值的识别是方案实施的关键,接收端数值的识别分三种情况:字符型、整型数据、浮点型数据的识别。字符型数值的识别直接将接收的数据赋给字符型变量既可完成识别任务。浮点型数值的识别采取联合体进行数据转换,以使用普遍的keil C为例,其规定浮点型数据占四个字节,保存顺序是低位在前、高位在后;keil C的浮点型数据和Visual c+6.0基本一致。我们可以定义联合体,利用联合体全部成员占用同一个存储空间的性质完成数据转换,定义的联合体形式如下:unionfloat m_ok_f;/最终转换的浮点数structunsigned char m_m1;/接收的浮点数据unsigned char m_m2;unsigned char m_m3;unsigned char m_m4;m_m;m_ok;将接收到的四个字节的浮点型数据依次赋给m_ok .m_m .m_m41,后通过提取联合体数据成员m_ok . m_ok_f的数值完成浮点型数值转换。整型数值的识别有多种方法,其识别依据是整型数值在单片机内的表示形式。整型数值以使用普遍的keil C为例,其规定整型数值占两个字节,以16位补码形式保存,低位在前、高位在后;keil C的整型数据和Visual c+6.0不一致,Visual c+6.0的整型数据占四个字节。现介绍两个识别方法:方法1:在联合体中增加整型数据成员int m_ok_i,将接收到的两个字节的整型数据依次赋给m_ok .m_m .m_m43,判断m_ok .m_m .m_m4的值,如果大于0x80,则m_ok .m_m .m_m12赋值为0xFF,否则赋值0x00,后通过提取联合体的数据成员m_ok . m_ok_i的数值完成整型数值转换。方法2:接收到的两个字节的整型数据,如果第一个字节大于0x80说明是负数,否则说明是正数;对正数第一个字节乘256再加第二个字节即可;对负数第一个字节乘256加第二个字节再减0X10000即可。需要提起注意,不同编译器存放数据的方式不同,有采用高位在前、低位在后的;也有采用低位在前、高位在后的;在进行接收端数值识别时一定要搞清存储方式再进行。4、接收程序编制当有通讯事件发生时(如接收数据),就会触发OnComm事件,在该事件的处理函数中调用Get CommEvent()函数,通过返回值确定是哪类事件,再做出相应的处理。为显示接收数值和进行协议处理,需填加变量和控件,不在缀述。利用ClassWizard为MSCOMM控件填加消息响应的函数OnComm (),在该函数中添加代码,实现对串口事件的处理,函数GenInput()返回VARIANT型变量,经过COleSafeArray型变量转换为unsigned char型变量,后依次保存在unsigned char型数组buf(接收缓冲区)中,在保存过程中删除转义字符,同时判断是否出现数据包结尾字符,出现结尾标记时进行显示处理并清除接收缓冲区。代码如下:VARIANT variant_inp;COleSafeArray safearray_inp;BYTE rxdata256;long k,len;if(m_comm.GetCommEvent()=2)variant_inp = m_comm.GetInput();safearray_inp = variant_inp;len = safearray_inp.GetOneDimSize();for(k = 0;k 9) m_no=0;if(m_no1)if(bufm_no-2=0xff)&(bufm_no-1=0x27) | (bufm_no-2=0x27)&(bufm_no-1=0x27)m_no-;m_st=1;goto lp;if(bufm_no-2=0xff)&(bufm_no-1=0xff)&(m_st=0)if(m_no=9)/m_f1.Format(%d,buf0);/ 转换字符型数据if( buf1=0x80) /转换整型数据m_f2.Format(%d, buf1*256+ buf2-0x10000);elsem_f2.Format(%d, buf1*256+ buf2); m_ok.m_m.m_m1=buf6;/转换浮点型数据m_ok.m_m.m_m2=buf5;m_ok.m_m.m_m3=buf4;m_ok.m_m.m_m4=buf3;m_f3.Format(%f,m_ok.m_ok_f);m_no=0;UpdateData(FALSE);m_comm.SetPortOpen(false);/关串口m_comm.SetPortOpen(true);/开串口lp:;需要额外说明,接收程序在使用过程中,碰到仅接收显示第一数据包数值的情况,接收到的其后各包值等于第一包;重新执行接收程序后,可正确接收第一数据包值,其后各包值仍等于重新执行接收程序后第一包。在接收完每一数据包后,关、开串口方解决此情况。如果没有出现此情况,可去掉关、开串口两语句。四、结束语本文提出了一种利用MCS-51单片机C语言程序和Visual C+实现单片机与计算机串口通讯的程序设计思路, 在此基础上设计的通讯协议可以传送各种类型数值信息,解决串行通信仅能发送、接收字符型数据的难题,运行效果良好。以上方法, 只要稍加改动便可实现计算机与计算机、单片机与单片机间的直接数值传输。该方案简单实用、可靠性高 ,在实际应用中取得了满意的效果。参考文献:1、马忠梅等. 单片机的C语言应用程序设计,北京航空航天大学出版社,20032、刘景文. 用delphi开发多媒体教室系统J. 天津成人高等学校联合学报 , 2005,(02) 作者简介:刘景文 (1968 - ,)男,天津市人,天津滨海职业学院电子信息工程技术教研室主任,副教授,主要研究计算机技术、电子技术的系统应用。胥宝萍(1970 - ,)女,天津市人,天津滨海职业学院电气自动化教研室主任,副教授,主要研究电子技术应用。Transmit various type value with Serial Communication interfaceLIU Jing-wen Xu bao-ping(Tianjin Binhai Professional Institute; Tianjin 300451 China)Abstract The sended-received value protocol of non-response is introduced in this paper, and how to sended various type value base on msc-51 mcu, and how to received various type value using Communication-controller of MSComm depended on VC, the software design of sending-receiving data was described。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南快消品策划营销方案
- 咸宁团建活动策划方案公司
- 说明文知识总结
- 赣州税务筹划咨询方案
- 2025年营养师鉴定考试冲刺指南:实操技能强化与理论巩固试卷
- 城市智慧化发展案例分析
- 2025年度深基坑专项方案测试卷及答案
- 2024年水利设施管养人员练习题及参考答案详解(完整版)
- 2025年医师定期考核模考模拟试题及参考答案详解(突破训练)
- 2024年安全员考试通关考试题库含完整答案详解(各地真题)
- 《学术英语(综合)》课后答案
- 高中心理健康课程《人际关系-寝室篇》课件
- 水产微生物学
- 电力系统继电保护课程设计报告-三段式距离保护
- 香港永久性居民在内地所生中国籍子女赴香港定居申请表
- 部编人教版五年级上册小学道德与法治 第5课 协商决定班级事务 课件
- 跨境电商亚马逊运营实务完整版ppt课件-整套课件-最全教学教程
- GB∕T 31038-2014 高电压柴油发电机组通用技术条件
- 基层工会经费财务规范化建设
- 亚硒酸 MSDS危险化学品安全技术说明书
- 预防接种家长课堂(课堂PPT)
评论
0/150
提交评论