0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍了MCS251单片机和PC机间的串口通信原理与通信协议

电子设计 作者:电子设计 2018-11-09 08:13 次阅读

随着计算机技术的快速发展和广泛应用,上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于PC机分析能力强、处理速度更快及单片机使用灵活方便等特点,所以一般都将PC机作为上位机,单片机作为下位机,二者通过RS2232或者RS2485接收、发送数据和传送指令。单片机可单独处理数据和控制任务,同时也将数据传送给PC机,由PC机对这些数据进行处理或显示。

本文介绍PC机和单片机通信在一种基于C8051F单片机的波形发生器中的应用,在上位机上显示正弦波的幅值和频率,由上位机发送指令可以改变波形幅度及频率。

1 硬件电路的设计

MCS251 单片机有一个全双工的串行通讯口UART,利用其RXD和TXD与外界进行通信,其内部有2 个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。所以单片机和PC机之间可以方便地进行串口通讯。单片机串口有3条引线: TXD (发送数据) 、RXD (接收数据)和GND(信号地) .因此在通信距离较短时可采用零MO2DEM方式,简单三连线结构。IBM2PC机有两个标准的RS2232串行口,其电平采用的是E IA电平,而MCS251单片机的串行通信是由TXD (发送数据)和RXD (接收数据)来进行全双工通信的,它们的电平是TTL电平;为了PC机与MCS251机之间能可靠地进行串行通信,需要用电平转换芯片,我们采用了MAXIM公司生产的专用芯片MAX232 进行转换。

电路如图1所示。

介绍了MCS251单片机和PC机间的串口通信原理与通信协议

图1 转换芯片电路

2 系统软件设计

软件设计分上位机软件设计和下位机软件设计。这两部分虽然在不同的机器上编写和运行,但它们要做的工作是对应的:一个发送,另一个接收。

为了保证数据通信的可靠性,要制定通信协议,然后各自根据协议分别编制程序。现约定通信协议如下: PC机和单片机都可以发送和接收。上位机和下位机均采用查询方式发送控字符和数据、中断方式接收控制字符和数据。采用RS2232串口异步通信,1位起始位, 8位数据位, 1位停止位,无奇偶校验,波特率9 600 b / s.每次PC机向单片机发送数据时,先发送握手信号"FF",下位单片机收到握手信号则发送应答信号"EE"至PC机,上位PC机收到应答信号后即发送数据。同样,当单片机要向PC机发送数据时,也先向PC机发联络信号"EB90",PC机收到联络信号后发应答信号"EBOO",单片机收到应答信号后则发送数据。

2.1 上位机通信程序设计

PC机的串口都采用的是INS8250芯片。PC机中有2个异步通信口,一个是COM1,其端口地址范围是3F8H-3 FFH,另一个是COM2,其端口地址是2F8H-2FFH.其与MODEM配合可以实现远距离通信。其波特率是标准波特率(50-9 600) b / s。

8250内部有10个寄存器端口,其中有一个除数锁存器,可以通过编程除数的大小来确定异步通信的波特率。8250使用的频率是2 MHz的基准时钟输入信号,所以必须用分频的方法产生所需要的波特率(移位脉冲) .除数锁存器的值必须在8250初始化时设置, 即把通信线路控制器的最高位(DLAB)置1,然后分两次把除数锁存器的高8位和低8位分别写入端口地址3F8H和3F9H (COM1) ,8250传送或接收串行数据时使用的时钟信号的频率是数据传输波特率的16 倍,即波特率= 16 ×除数/1 843 200.

在Windows平台上的串行通信多使用其提供的AP I函数来实现,这种方法使用起来需要许多底层设置,因而较为繁琐,并且难以理解。Microsoft推出的ActiveX技术提供了另外一种实现串行通信的方法。这种方法不仅相对较为简单,而且非常实用。

尤其是Visual C + +这种可视化面向对象的编程环境中,可以真正把串口看作一个对象,编程时只需简单的设置,理解起来也很容易。本文上位机通信程序使用VC + +提供的串行通信控件MSComm (Mi2crosoft Communication Control) ,主要步骤如下:打开VC + + 610集成开发环境,选择菜单项File /New,在出现的对话框中选中Projects标签中的MFC App2Wizard ( exe) ,生成一个基于对话框的应用程序。选择菜单项Project/Add to p roject/Components andControls?,在弹出的对话框中选择Registered Ac2tiveX Controls文件夹下的Microsoft CommunicationsControl, 选择Registered ActiveX Controls 来注册MSComm,将该控件从工具箱中拉到对话框中即可实现控件的插入。选择ClassWizard为新创建的通信控件加入一个成员变量,将其命名为m_commute.

通过该成员变量便可以对串口属性进行设置。以下是通过设置控件属性对串口进行初始化:

BOOL CMyCOMMDlg: : OnlnitDialog( )

{

CDialog: : OnlnitDialog( ) ;

/ /此处为应用框架自动生成代码

m_commute. SetCommPort(1) ; / /使用串口1

m_commute. SetSettings("9600,N, 8, 1") ; / /波特率为9600,无奇偶校验, 8位数据位, 1位停止位

m_commute. SetRThreshold (10) ; / /每接收10个字符就触发1次接收事件

m_commute. SetSThreshold (0) ; / /不触发发送事件

m_commute. SetInputLen (10) ; / /每次读操作从缓冲区中取10个字符

m_commute. SetInputMode (1) ; / /二进制数据传输形式

m_commute. SetPortOpen ( TRUE) ; / /打开串口

return TRUE; / /返回

}

事件驱动是处理串行端口交互作用的一种非常有效的方法。OnComm 事件的CommEvent属性可以捕捉并检查通信事件和错误。发生通信事件或错误时,将触发OnComm 事件, CommEvent属性的值将被改变,应用程序检查CommEvent属性值并作出相应的反应。双击对话框中CMSComm控件,添加OnComm事件的代码:

if (m_commute. GetCommEvent( ) = = 2) / /判断comEvReceive事件发生否

{

shortm_size =m_commute. GetinBufferCount( ) ;

if (m_size = = 11) / /缓冲区为11个字符为满

{

m_commute. SetInputLen (L) ; / /读取接收到的数据

VAR IANT vRep ly =m_commute. GetInput ( ) ; / /处理接收到的数据

}

}

2.2 下位机通信程序设计

在上位机与多片单片机通信中,要保证主机与从机间可靠的通信,必须保证通信接口具有识别功能。而单片机串行口控制寄存器SCON中的控制位SM2就是为了满足这一要求而设置的。且SM2控制位只在MCS51单片机的串行工作方式2与方式3才起作用。在串行口以方式2或方式3接收时,若SM2 =1,表示置多机通信功能位,这时出现两种可能情况:接收到第9位数据为1时,数据才装入SBUF,并置R I = 1向CPU发出中断请求;如果接收到第9位数据为0时,则不发生中断,信息被掉失。若SM2=0,则接收到的第9位数据无论是0还是1都产生R I =1中断标志,接收到的数据装入SBUF中。根据上述情况MCS - 51多机通信过程安排如下:

(1)开始时设所有的从机SM2位为1 ,处于只接收地址帧的状态(串行帧的第9位为1 ) ,对数据帧(串行口的第9位为0)则不做响应。

(2)当从机接收到主机发来的地址帧后,将所接收的地址与本机地址相比较,若地址与本机地址相符,便使SM2清零以接收主机随后发来的数据,对于地址不相符合的从机,仍保持SM2 = 1状态,故不能接收主机随后发来的数据信息。

(3)当主机改为与另外从机联系时,可再发出地址帧来寻找其它从机。而先前被寻址过的从机在分析出主机是对其它从机寻址时,恢复其SM2 = 1,等待主机的再一次寻址。

(4)从机要呼叫主机时,可先发送握手信号,主机检测到有从机呼叫后,发出应答信号,从机接收到主机应答后,便可发送数据给主机。主机通过该信号来判断从机所处的状态,从而作出相应的反应。

设计单片机通信程序时,必须充分发挥单片机的效率。由于单片机多应用于实时性较强的控制场合,因此,应将及时响应和控制对象的动作放在优先考虑的位置,以尽量减少通信等辅助性操作所占用的CPU时间。基于上述考虑,笔者在设计单片机通信程序时,将通信程序分为接收中断处理程序、发送中断处理程序和通信处理程序3部分,并将这3部分程序巧妙地进行组合,从而构成整个单片机的通信程序。图2给出了接收中断处理子程序,图3给出了发送中断子程序。

介绍了MCS251单片机和PC机间的串口通信原理与通信协议

图2 接收中断处理程序

介绍了MCS251单片机和PC机间的串口通信原理与通信协议

图3 发送中断处理程序

3 结束语

本文给出了上位PC机与下位单片机之间进行异步串行通信的解决方案,上位机通过友好的用户界面,可给下位机发送控制指令。此方案在实际运行过程中,运行稳定,效果良好,从而较好地解决了上位机与下位机之间的通信问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44553

    浏览量

    634759
  • PC
    PC
    +关注

    关注

    9

    文章

    2078

    浏览量

    154156
  • 计算机
    +关注

    关注

    19

    文章

    7489

    浏览量

    87876
收藏 人收藏

    评论

    相关推荐

    MCS251PC串口通信电路设计

    本文介绍PC 单片机通信在一种基于C8051F 单片机的波形发生器中的应用,在上位机上显示正
    发表于 12-19 14:47 2035次阅读
    <b class='flag-5'>MCS251</b>和<b class='flag-5'>PC</b><b class='flag-5'>机</b><b class='flag-5'>间</b>的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>电路设计

    MCS251PC怎么实现串口通信电路?

    MCS251PC串口通信电路设计
    发表于 11-04 02:20

    51单片机串口通信协议的特点是什么

    介绍51单片机串口通信协议,以下简称串口
    发表于 02-23 07:46

    单片机串口通信协议的实现实例分享

    调试和做一些简单人机交互的一种重要的通信方式,其原理网上有一大堆,这里就不再赘述,下面主要和大家分享一种我在实际项目中经常用到的一个简单的串口通信协议和实现方式。下面以STM32F1
    发表于 01-20 07:35

    单片机PC串口通信编程

    单片机PC串口通信编程实验目的利用PROTUES仿真软件、串口调试助手、虚拟
    发表于 02-16 07:00

    基于MCS2-51单片机的PS/2模拟键盘接口的设计研究

    摘 要:本文通过对标准PS/2键盘协议的分析,用MCS251单片机模拟键盘通信时序,实现单片机通过PS/2键盘接口与
    发表于 07-15 11:52 169次下载

    PC与多MCS-51单片机的串行通信设计?

    【摘 要】 主要讲解了IBM-PCMCS-51单片机系统的通信原理,给出了其硬件接口框图
    发表于 05-16 19:43 1899次阅读
    <b class='flag-5'>PC</b><b class='flag-5'>机</b>与多<b class='flag-5'>MCS</b>-51<b class='flag-5'>单片机</b><b class='flag-5'>间</b>的串行<b class='flag-5'>通信</b>设计?

    PC键盘通信协议及其在单片机应用系统右的实现

    本文对标准键盘接口的通信协议及传输时序进行了研究,全面介绍键 盘扫描码、系统命令码及键盘响应码,解决单片机 系统中应用标准
    发表于 03-28 16:56 3次下载

    单片机PC串口通信显示

    单片机基础学习,串口学习。使单片机PC串口通信
    发表于 06-01 17:48 15次下载

    PC单片机串口通信协议

    PC单片机串口通信协议
    发表于 12-26 22:12 0次下载

    单片机C语言之串口通信协议

    本文首先介绍串口的基本结构,其次介绍串口通信方式
    发表于 05-22 12:37 4914次阅读
    <b class='flag-5'>单片机</b>C语言之<b class='flag-5'>串口</b><b class='flag-5'>通信协议</b>

    单片机:Modbus 通信协议介绍

    实用串口通信程序的时候,我们通过串口发给单片机三条指令,让单片机做了三件不同的事情,分别是“buzz on”、“buzz off”和“sho
    发表于 11-13 20:51 11次下载
    <b class='flag-5'>单片机</b>:Modbus <b class='flag-5'>通信协议</b><b class='flag-5'>介绍</b>

    制定通信协议,实现单片机PC通信

    单片机PC串口通信编程实验目的利用PROTUES仿真软件、串口调试助手、虚拟
    发表于 12-17 18:30 22次下载
    制定<b class='flag-5'>通信协议</b>,实现<b class='flag-5'>单片机</b>与<b class='flag-5'>PC</b><b class='flag-5'>机</b><b class='flag-5'>通信</b>

    如何利用MODBUS通信协议实现触摸屏与单片机通信和控制

    讲解如何利用MODBUS通信协议,实现触摸屏与单片机通信和控审I。详细介绍触摸屏与单片机的硬
    发表于 08-02 09:50 18次下载

    单片机通信协议有哪些 单片机和wifi模块怎么通信

    单片机和WiFi模块通信的方法有以下几种: 1. 串口通信:将单片机与WiFi模块通过串口连接,
    的头像 发表于 06-13 17:56 1.6w次阅读