微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MCS251单片机和PC机间的串口通信

MCS251单片机和PC机间的串口通信

时间:01-25 来源:互联网 点击:

  随着计算机技术的快速发展和广泛应用,上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于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所示。

图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.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top