单位文秘网 2021-10-24 08:12:55 点击: 次
摘要:本文给出了一种基于51单片机串口连接的多路采集系统设计方案,介绍了多路采集系统的完整结构、串口电路设计方法,详细描述了主、从机工作流程和自行设计的串口数据通信协议。
关键词:多路采集;51单片机;串口;协议
中图分类号:TP274.2 文献标识码:A文章编号:1007-9599(2012)01-0000-02
Multi-channel Acquisition System Based on the Serial Communication 51 MCU
Liu Peng
(College of Computer Science,Yangtze University,Jingzhou434023,China)
Abstract:This paper presents a method of the multi-channel acquisition system based on 51 MCU serial port,introduces the multi-channel acquisition system structure,and the design method of serial port circuit,a detailed description of the host and slave working process and design of serial data communication protocol.
Keywords:Multi-channel acquisition;51 MCU;serial port;protocol.
一、多路采集系统结构
多路采集系统是由上位机和各个采集节点组成,都采用RS232串行通信标准。系统采用一台单片机作为主机,各个采集结点作为从机的“一对多”数据传输方式。主机的RXD端和所有从机的TXD端相连,主机的TXD端和所有从机的RXD端相连。主机发出的信号可以被所有从机接收,从机发出的信号只能被主机接收,从机间不能相互通信。主机轮流查询从机采集的数据,通过液晶屏实时显示,并可根据设定实现异常情况报警提示等功能。作为从机的各个采集节点则是由单片机、信号采集部分和串口通讯三部分组成部分。只要选用不同的传感器和相应的信号处理电路,就可以适合不同信号的采集。
二、主、从机通讯接口设计
主、从机中都使用美国ATMEL公司生产的低电压,高性能CMOS 8位单片机AT89C51,片内含4K可反复擦写Flash,128×8bit内部RAM,32个双向I/O口线,3个16位可编程定时/计数器中断,片机自带看门狗、双数据指针,8个中断源,全双工可编程UART串行通道。由于主、从机之间通讯采用RS232串行通信标准,所以它们的通信接口部分都采用相同的硬件设计。通讯接口采用标准的RS232接口,使用MAX232进行电平转换。单片机及串口通讯电路原理图如图1所示。
二、串口通信协议设计
图2 主、从机工作流程 图1 单片机及串口通讯电路
(一)主机工作流程。主机的工作流程如图2所示。在主机初始化阶段需要完成串口设置,串口采用中断工作方式,波特率为9600,建立从机地址表,。主机接收数据采用轮循方式,当正确接收到一个从机数据后,主机再给下一从机发送数据请求帧。数据校验不正确或数据帧中数据不是有效数据,都会向从机发送请求重发帧,并将该从机当作错误节点进行处理。(二)从机工作流程。从机的工作流程如图2所示。从机初始化阶段也将串口设置为中断工作方式,波特率为9600。从机将采集数据存放在发送缓冲区,并一直处于被叫状态,当接收到主机发送的请求数据帧后或请求重发帧,才发送数据帧。只有接收到主机的确认帧后,从机才清除发送缓冲区数据,启动下一次采集。(三)串口数据通信协议。根据数据传输的需要,自行设计了串口数据通信协议,将数据组帧后发送。利用此协议发送数据时,采用请求发送/发送/确认/重发方式。即发送一数据帧,一个确认,在指定时间内没有收到确认信息,则从机重发数据帧。数据帧定义如下:
其中,帧头固定为0xABH;主、从机地址长度为一个字节,主机默认地址为0xFFH ,从机地址从0x00H顺序编码,最多有255个。采用和校验方式,保证数据正确传输。累加发送或接受的数据,当和的值大于0xFF时,将和值置0继续和运算。帧类型定义及相应帧数据格式如下表所示:
从机接收到主机发送的数据帧后判断和发送的部分程序代码如下:
void read_buffer()
{
unsigned char RECEIVE_buffer;/*得到本机编号*/
if(RI)/*清除接收中断*/
{ RI=0;
RECEIVE_buffer=SBUF;/*接收串口数据*/
if(point==0)
{ if(RECEIVE_buffer=0xAB) /*判断是否为帧首*/
{buffer[point++]=RECEIVE_buffer; } /*将接收到的数据放到接收缓冲区中*/
else
point=0;/*不是帧头,等待起始标志*/
}
else if(point==1) /*判断是否为本机地址接收的帧*/
{if(getnum==buffer[1])
{buffer[point++]=RECEIVE_buffer; } /*将接收到的数据放到接收缓冲区中*/
else
point=0; /*不是本机要接收的帧,放弃,等待起始标志*/
}
else if(point==3)/*根据帧的类型来作出相应判断*/
{ buffer[3]=RECEIVE_buffer;
if(buffer[3]==0x00)/*接收到的是请求发送数据帧*/
Com_Send(5,buffer[1]);/*该从机给主机发送数据*/
else if(buffer[3]==0x01)/*接收到的是确认帧*/
Init_Salver();/*收到确认帧,清空缓冲区*/
else if(buffer[3]==0x02) /*接收到是的请求重发数据帧*/
Com_Send(4,buffer[1]); /*重发数据帧*/
else if(buffer[3]==0x03) /*接收到的是重发的数据帧*/
buffer[point++]=RECEIVE_buffer;/*如果接收到的是重发的数据帧,从缓冲区里面读取数据*/
else if(buffer[3]==0x04)/*接收到的是数据帧*/
buffer[point++]=RECEIVE_buffer;/*同接收到重发数据帧一样,从缓冲区里面读取数据*/
}
else if(point==4)
{ buffer[4]=RECEIVE_buffer; } /*读取发送的数据帧的长度*/
else if(point>4 && point { buffer[point++]=RECEIVE_buffer; unsigned char num=Sum_checkdata(RECEIVE_buffer); } /*对接收到的数据进行校验*/ else if(point==j+4)/*接收到校验位*/ {buffer[point++]=RECEIVE_buffer; if(buffer[j+4]!=num) /*如果接收到校验值和本机对数据进行校验 Com_send(3,buffer[2]); 的值不相等,发送请求重发数据帧*/ else Com_send(1,buffer[2]+0x01); /*向下一从机发送请求发送数据帧*/ } else point=0;/*等待接收其始标志*/ } } 三、结束语 本设计利用51单片机的串口连接主机和多个采集节点,使用自行设计的串口数据通信协议,实现了“一对多”的数据传输。整个系统结构简单、可靠性高,可任意扩充采集节点数量,实际运行效果较好,具有一定的实用价值。 参考文献: [1]戴佳.51单片机C语言应用程序设计实例精讲(第二版)[M].电子工业出版社,2008 [2]穆兰.单片微型计算机原理及接口技术[M].机械工业出版社,1996 [3]刘辉.基于8051单片机的数据采集与通信接口设计[J].软件导刊.2008(12)
地址:https://www.kgf8887.com/show-125-96750-1.html
下一篇:日照市集中供暖热网的远程控制概述
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用