新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于89C51单片机的远程数据采集系统设计

基于89C51单片机的远程数据采集系统设计

作者: 时间:2012-02-04 来源:网络 收藏

  系统上电即执行初始化程序。当操作员按下采样键时执行数据采样模块。从00~07通道间隔每秒采集每个通道的5个值,调用滤波子程序得到准确值,再通过数据转换子程序分别送到6116数据区及8155RAM区,通过字形显示子程序显示各通道检测的数据。每采集完一个周期后,89C51通过 MAX232接口PC机查询有无通信命令,有则响应,无则继续采集数据。该程序一直按框图流程循环执行,直至意外掉电或强迫复位后,才能终止

2.3 故障诊断模块

  过程中,若出现故障会直接影响采样结果,所得到的错误数据不允许存档,并应该记录故障原因及持续时间。故障诊断模块主要是89C51外围芯片 MAX691的电源监控以及掉电保护电路检测到硬件故障后向发出中断请求INT0所执行的外部中断服务子程序。该程序主要功能是在累加数据保存完毕后,置位89C51内部的特殊功能寄存器PCON中的PD,使RAM进入掉电模式,保护数据不变,同时显示故障类型和发生的时间。若为软件死循环引起的故障,则MAX691的“看门狗”电路自动使程序跳出陷阱,强迫系统复位。

2.4 数据通信模块

  分通信程序和PC机通信程序。

2.4.1 单片机通信程序

  流程图如图4所示。 

   

  

2.4.2 Win98下PC机与89C51通信程序

  通讯程序编写中首先在项目头文件中嵌入的头文件MSComm.h及实现文件MSComm.cpp,其次,为了用该控件控制一个串口的通讯操作,还必须在相应程序中插入该控件。为此,设计在某对话框中插入,其ID为IDC_MSComm1,并利用ClassWizard 为其添加变量CCMSComm m_Com1,通讯程序中对串口的所有操作都可以通过m_Com1来实现。

  89C51通过中断方式采集和传递数据。当其数据缓冲区满时,向CPU发出中断申请,若CPU响应并经与PC机握手后便可发送数据。因此PC机采用查询的通讯方式。设计中将PC机串口每接收一帧数据设置成串口要响应的事件EV_RXFLAG事件,通过此事件激活消息处理函数OnComm(),在OnComm()中加入处理代码,判断是否是所需的数据,再作出相应的显示、存盘等处理。

  下面简要给出用事件驱动方式接收89C51单片机发送数据的程序源代码。通讯时PC机串口与89C51串口参数的设置必须一致,否则两者无法进行通讯。设置PC机串口参数的初始化程序如下:
If(!m_Com1.getportOpen())

m_Com1.SetPortOpen(TRUE);//打开串口 
  m_Com1.SetSettings("9600,n,11,1");
//串口参数设置 
  m_Com1.InputMode(1);
//建立1024字节输入队列 
  SetCommEvent(m_Com1,EV_RXFLAG);
//设置串口要响应的事件EV_RXFLAG 
  m_Com1.SetRThreshold(200);
//每接收200帧激活OnComm()事件 ………

3 结束语

  本文通过PC机与89C51单片机组成一简单的多机系统,通过串行通信实现了远程系统的基本功能。在硬件连接上,为提高传输距离,采用了RS- 232C/RS-422A转换电路,以差分传输、差分接受的形式解决了这一问题。在软件编制上,采用流行的VC++6.0下的Active X控件,通过对控件相关属性及代码的编写,实现了Windows 98环境下PC机与89C51单片机的远程通信。该方法也可以用于类似的工业场合中。

参 考 文 献

1 何立民.单片机应用系统设计.北京:航空航天大学出版社,1998
2 赵仕健.VC++6.0编程与实例解析.北京:科学出版社,2000


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭