用VC++.NET实现C167CR单片机与PC的串行通信_第1页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用vc+.net实现c167cr单片机与pc的串行通信 pc与构成的上位机、下位机分布式控制系统是一种频繁的工业控制系统,单片机作为下位机可举行现场数据采集和就地控制,并可将采集到的数据或者状态 信息传送到上位pc机,以做进一步的分析处理。在实际应用中,上位机与下位机的通信问题是首要解决的问题之一,串行通信以其高效率、牢靠、标准统一的优点 成为重要的通信手段,本文即在windows xp环境下,用法visual c+.net中的mscomm控件实现c167cr单片机与pc之间的串行通信,其通信线路通过rs232衔接(距离小于15m)。 2 c167cr单片机串行接口简介c167cr单片机是德国

2、infineon公司(前西门子部)开发的一种16位单片机,属于单片机中的高端产品,片内有16通道10位a/d转换 器、9个定时器、2个串行接口以及15个报文的can接口等功能模块。c167cr单片机有两种类型的串行接口:异步/同步串行接口(asc0)和高速同 步串行接口(ssc),下面介绍异步/同步串行接口(asc0)。asc0的接口功能是通过设置几个专用寄存器来予以确定。2.1 异步/同步串行接口(asc0)16位控制寄存器s0con的各位定义1所示。数据接收由接收使能位s0ren来控制,惟独当波特率生成器启动位s0r置为“1”时,才干举行串行数据的发送和接收。2.2 asc0波特率寄存器s

3、0bg寄存器s0bg具有双重功能,可用作波特率生成器和重载寄存器,它具有13位的重载能力,不同的重载值对应不同的波特率。读sobg时,返回的是定时器的内容(1513位返回为0),写sobg时,将更改重载寄存器的值(1513位无效)。2.3 缓存寄存器串行口asc0有两个缓存寄存器:接收缓存寄存器s0rbuf和发送缓存寄存器s0tbuf。发送时只要发送器空闲,装载到s0tbuf中的数据将立刻转送到发送移位寄存器举行发送。将s0r 和s0ren置位,可挺直从接收缓存寄存器s0rbuf读取数据。2.4 中断寄存器串行口asc0有4个可位寻址的中断控制寄存器,发送中断寄存器s0tic,发送缓存器中断寄

4、存器s0tbic,接收中断寄存器s0ric,串行口asc0错误中断寄存器s0eic。惟独当总中断允许位ien置“1”时,这些中断寄存器才干举行控制。3 visual c+.net串行通信控件mscomm介绍在windows环境下,用户不能挺直对pc的串行端口举行操作。visual c+.net中,通过用法微软公司提供的microsoft comm control控件(简称mscomm),可以便利地实现pc与外部设备之间的串行通信,编程工作量相对较少。注重visual c+.net中控件mscomm的函数与visual c+6.0中的控件函数有所不同。mscomm有二十多个属性,其中主要的属性有

5、:commport:设置和返回通信端口号,commport1即用法串行端口com1。portopen:打开或关闭通信端口。inbuffersize:设置接收缓冲区大小。outbuffersize:设置发送缓冲区大小。input:读取并删除缓存区中的数据。output:将数据写入发送缓存区。settings:设置波特率、奇偶校验、数据位和停止位参数,默认值为“9600,n,8,1”,即波特率9600b/s、不举行奇偶校验、8个数据位、1个停止位。inputlen:设置每次从缓存区读取的字节数。inputmode:设置和返回数据类型,设置为0时读取的数据为文本形式,设置为1时读取的数据为二进制数据

6、。pc与单片机通信时,inputmode属性常设置为二进制数据形式。rthreshold:设置oncomm大事发生前,接收缓存区可以接收的字符数。若设置为0,则不产生oncomm大事。串行通信控件mscomm有二种处理通信的工作方式:大事驱动方式和查询工作方式。大事驱动方式是指:当串行端口接收或发送完指定数量数据以及发生通信错 误等状况时,mscomm控件触发oncomm大事,作出相应处理。查询工作方式是指:通过查询控件的某些属性值(如inbuffercount属性)来 作出进一步的处理。以下的程序实例采纳大事驱动方式来接收数据。4 串行通信程序实例41程序功能本程序是在windows xp环

7、境下举行数据的发送和接收,pc一次性向c167cr单片机发送12字节(ascii字符)的数据,单片机接收完数据后,再返回所接收到的全部数据,通过比较pc发送和接收到的数据,验证串行通信的牢靠性。42 pc通信程序设计421 实现步骤第一步:启动“visual studio.net”,挑选新建项目,在项目类型窗口中挑选“visual c+项目”,模板窗口挑选“mfc应用程序”。输入项目名称,单击“确定”按钮。“应用程序类型”挑选“基于对话框”,其他设置皆为默认值,单击“完成”按钮。其次步:挑选“工具”菜单下子菜单“自定义工具箱”中com组件中的“microsoft communication c

8、ontrol,version6.0”,单击“确定”按钮,插入mscomm控件。这与visual c+6.0的插入办法不同。第三步:删去应用程序主对话框中的静态文本和“确定”按钮,将“取消”按钮改为“退出程序”。添加两个静态文本“发送数据”和“接受数据”,以及两个编辑框、一个按钮“开头通信”和一个mscomm控件。第四步:添加变量和大事处理程序。因为visual c+.net没有classwizard,添加办法与visual c+6.0不同。右键单击控件,通过子菜单“添加变量”和“添加大事处理程序”实现此步骤。为两个编辑框分离添加cstring型全局变量m_send 和m_receive,并为“

9、开头通信”按钮添加bn_clicked大事处理函数onsenddata(),为mscomm控件添加cmscomm型变 量m_com和oncomm大事处理函数oncommmscomm()。其中函数onsenddata()用来发送数据,函数oncommmscomm ()用来接收数据。窗体界面2所示。422 visual c+.net程序代码在oninit()函数中举行串行口初始化bool cserialdlg:oninitdialog()/省略自动生成的代码/ todo:在此添加额外的初始化代码m_com.put_commport(1); /设置串口为com1m_com.put_inbuffers

10、ize(1024); /设置输入缓存区的大小,bytesm_com.put_outbuffersize(512); /设置发送缓存区的大小,bytesm_com.put_portopen(true); / 打开串口m_com.put_inputmode(1); /以二进制方式接收数据m_com.put_settings(“9600,n,8,1”); /设置数据传输速率等参数m_com.put_rthreshold(12); /表示收到12个字符引发一个oncomm大事m_com.put_inputlen(0); /一次读出接收缓存区的字符m_com.get_input(); /清空接收缓存区r

11、eturn true; / 除非设置了控件的焦点,否则返回 true数据发送程序代码void cserialdlg:onsenddata() / todo: 在此添加控件通知处理程序代码if(!m_com.get_portopen() m_com.put_portopen(true); /若没打开串口,则打开updatedata(true); /将编辑框中的数据传递给变量m_com.put_output(colevariant(m_send) ; /将编辑框中的字符串数据转换variant类型,并发送出去数据接收程序代码void cserialdlg:oncommmscomm() / todo

12、: 在此添加消息处理程序代码variant vreceive;colesafearray sreceivearray;long k , i;byte breceive1024;cstring str;m_receive=""k=m_com.get_commevent();switch(k)case 2: /接收到rthreshold个数据vreceive=m_com.get_input(); /读取缓存区内的数据sreceivearray=vreceive; /将数据由variant型转换为safearray型for(i=0;i12;i+)sreceivearray.get

13、element(&i,breceive+i); /将数据转换为btye型数组for (i=0;i5;i+) char a=*(char*)(breceive+i);str.format("%c",a);m_receive+=str; /将数据转换为cstring型,传递给变量m_receiveupdatedata(false); /更新编辑框内容break;default: break;程序中的put_output()函数要求variant型数据作为参数,可以调用类colevariant的构造函数将多种类型数据(如cstring,int等)转换为variant类型数

14、据。同时数据接收函数get_input()接收到的数据为variant类型,可通过一系列转换,转换为所要求的类型予以显示。43 c167cr单片机通信程序设计c167cr单片机串行通信程序实行8位数据异步发送工作方式,接收数据用法中断方式,接收完12字节数据后再将所有数据发送出去。详细程序如下。初始化程序:include reg167.hvoid init(void) p3 |= 0x0400; /*设置输入、输出引脚*/dp3 |= 0x0400;dp3 &= 0xf7ff;s0bg = 0x40; /*设置波特率为9600*/s0con = 0x8011; /*设置串行口状态:8位数据异步工作方式,1位停止位等*/s0ric=0x0044; /*设置中断允许位、中断优先级*/ien=1; /*中断全局使能*/主程序:include reg167.hextern void init(void);static unsigned int i=0;static unsigned char c;unsigned

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论