基于89C51单片机的远程数据采集系统设计
89C51通信程序
通讯程序编写中首先在项目头文件中嵌入MSComm控件的头文件MSComm.h及实现文件MSComm.cpp,其次,为了用该控件控制一个串口的通讯操作,还必须在相应程序中插入该控件。为此,设计在某对话框中插入MSComm控件,其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
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)