ROBOT & AI

首页 | 新闻 | 产品 | 竞赛 | 学苑 | 读书 | 硬件 | 软件 | 智能 | 制作 | 项目 | 资源 | 论坛
 您的位置:首页 >> 软件 >> 机器人编程 >> 正文
站内搜索:   

用VC++.NET实现C167CR单片机与PC的串行通信

来源:www.gjwtech.com  林阔 于浪 殳伟群 字体:[ ]  2007-01-08

关键词:VC

摘 要:本文介绍了C167CR单片机的串行接口ASC0的特征以及Visual C++.NET中的串行通信控件MSComm,并通过串行通信的程序实例,说明C167CR单片机与PC之间串行通信的实现方法。

关键词:C167CR单片机;串行通信;PC机;Visual C++.NET
 

1 引言

  PC与单片机构成的上位机、下位机分布式控制系统是一种常见的工业控制系统,单片机作为下位机可进行现场数据采集和就地控制,并可将采集到的数据或者状态 信息传送到上位PC机,以做进一步的分析处理。在实际应用中,上位机与下位机的通信问题是首要解决的问题之一,串行通信以其高效率、可靠、标准统一的优点 成为重要的通信手段,本文即在WINDOWS XP环境下,使用Visual C++.NET中的MSComm控件实现C167CR单片机与PC之间的串行通信,其通信线路通过RS232连接(距离小于15m)。

2 C167CR单片机串行接口简介

   C167CR单片机是德国Infineon公司(前西门子半导体部)开发的一种16位单片机,属于单片机中的高端产品,片内有16通道10A/D转换 器、9个定时器、2个串行接口以及15个报文的CAN接口等功能模块。C167CR单片机有两种类型的串行接口:异步/同步串行接口(ASC0)和高速同 步串行接口(SSC),下面介绍异步/同步串行接口(ASC0)。ASC0的接口功能是通过设置几个专用寄存器来予以确定。
2.1
异步/同步串行接口(ASC0
16
位控制寄存器S0CON的各位定义如图1所示。
数据接收由接收使能位S0REN来控制,只有当波特率生成器启动位S0R置为1”时,才能进行串行数据的发送和接收。
2.2 ASC0
波特率寄存器S0BG
寄存器S0BG具有双重功能,可用作波特率生成器和重载寄存器,它具有13位的重载能力,不同的重载值对应不同的波特率。读SOBG时,返回的是定时器的内容(1513位返回为0),写SOBG时,将更改重载寄存器的值(1513位无效)。
2.3
缓存寄存器
串行口ASC0有两个缓存寄存器:接收缓存寄存器S0RBUF和发送缓存寄存器S0TBUF。发送时只要发送器空闲,装载到S0TBUF中的数据将立即转送到发送移位寄存器进行发送。将S0R S0REN置位,可直接从接收缓存寄存器S0RBUF读取数据。
2.4
中断寄存器
串行口ASC04个可位寻址的中断控制寄存器,发送中断寄存器S0TIC,发送缓存器中断寄存器S0TBIC,接收中断寄存器S0RIC,串行口ASC0错误中断寄存器S0EIC。只有当总中断允许位IEN1”时,这些中断寄存器才能进行控制。

3 Visual C++.NET串行通信控件

MSComm介绍
WINDOWS环境下,用户不能直接对PC的串行端口进行操作。Visual C++.NET中,通过使用微软公司提供的Microsoft Comm Control控件(简称MSComm),可以方便地实现PC与外部设备之间的串行通信,编程工作量相对较少。注意Visual C++.NET中控件MSComm的函数与Visual C++6.0中的控件函数有所不同。MSComm有二十多个属性,其中主要的属性有:
CommPort
:设置和返回通信端口号,CommPort1即使用串行端口Com1
PortOpen
:打开或关闭通信端口。
InBufferSize
:设置接收缓冲区大小。
OutBufferSize
:设置发送缓冲区大小。
Input
:读取并删除缓存区中的数据。
Output
:将数据写入发送缓存区。
Settings
:设置波特率、奇偶校验、数据位和停止位参数,默认值为“9600,N,8,1”,即波特率9600b/s、不进行奇偶校验、8个数据位、1个停止位。
InputLen
:设置每次从缓存区读取的字节数。
InputMode
:设置和返回数据类型,设置为0时读取的数据为文本形式,设置为1时读取的数据为二进制数据。PC与单片机通信时,InputMode属性常设置为二进制数据形式。
Rthreshold
:设置OnComm事件发生前,接收缓存区可以接收的字符数。若设置为0,则不产生OnComm事件。
串行通信控件MSComm有二种处理通信的工作方式:事件驱动方式和查询工作方式。事件驱动方式是指:当串行端口接收或发送完指定数量数据以及发生通信错 误等情况时,MSComm控件触发OnComm事件,作出相应处理。查询工作方式是指:通过查询控件的某些属性值(如InBufferCount属性)来 作出进一步的处理。以下的程序实例采用事件驱动方式来接收数据。

4 串行通信程序实例

41程序功能
本程序是在WINDOWS XP环境下进行数据的发送和接收,PC一次性向C167CR单片机发送12字节(ASCII字符)的数据,单片机接收完数据后,再返回所接收到的所有数据,通过比较PC发送和接收到的数据,验证串行通信的可靠性。
4
2 PC通信程序设计
4
21 实现步骤

第一步:启动“Visual Studio.NET”,选择新建项目,在项目类型窗口中选择“Visual C++项目,模板窗口选择“MFC应用程序。输入项目名称,单击确定按钮。应用程序类型选择基于对话框,其他设置皆为默认值,单击完成按钮。
第二步:选择工具菜单下子菜单自定义工具箱COM组件中的“Microsoft Communication ControlVersion6.0”,单击确定按钮,插入MSComm控件。这与Visual C++6.0的插入方法不同。
第三步:删去应用程序主对话框中的静态文本和确定按钮,将取消按钮改为退出程序。添加两个静态文本发送数据接受数据,以及两个编辑框、一个按钮开始通信和一个MSComm控件。
第四步:添加变量和事件处理程序。由于Visual C++.NET没有ClassWizard,添加方法与Visual C++6.0不同。右键单击控件,通过子菜单添加变量添加事件处理程序实现此步骤。为两个编辑框分别添加CString型全局变量m_Send m_Receive,并为开始通信按钮添加BN_CLICKED事件处理函数OnSendData(),为MSComm控件添加CMSComm型变 量m_ComOnComm事件处理函数OnCommMscomm()。其中函数OnSendData()用来发送数据,函数OnCommMscomm ()用来接收数据。
窗体界面如图2所示。


2页 [1] [2] 下一页 

录入:master 点击:

[发表评论] [打印文章] [关闭窗口]  

原创文章属本站所有,转载请注明来源:Robotain.com  
相关文章

 网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

发表评论 昵称:

  

  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
最新推荐
热门文章
论坛精华
网站简介设为首页 加入收藏在线留言友情链接联系我们 - 广告服务 - 版权申明

Copyright © Robotain.com  all rights reserved  浙ICP备07003355号

版权所有 机器与智能网