基于单片机的点对点数据传输系统设计.docx
《基于单片机的点对点数据传输系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的点对点数据传输系统设计.docx(19页珍藏版)》请在冰点文库上搜索。
基于单片机的点对点数据传输系统设计
基于单片机实现点对点对点数据传输
摘要
C语言进行8051单片机程序设计是单片机开发与应用的必然趋势。
采用C语言可以很容易地进行单片机的程序移植工作,有利于产品中的单片机的重新选型。
其开发速度、软件质量、结构严谨、程序坚固等方面,C语言的完美绝非是汇编语言编程所能比拟的。
文章给出了采用C语言编程实现双机通信的具体实现方法。
双机通信也称点对点的通信,用于单片机和单片机之间交换信息,也用于单片机和通用微机间的信息交流。
在整个系统中,主要采用串行通信方式进行数据传输。
8051单片机自备串行接口,为机间通信提供了极为便利的条件。
利用主机和从机间配备RS-232C、RS-422或RS-485等
关键词:
单片机串行通信双机通信MAX3232
Abstract
TheClanguagecarrieson8051monolithicintegratedcircuitprogrammingisthemonolithicintegratedcircuitdevelopmentandtheapplicationinevitabletrend.UsestheClanguagetobepossibletocarryonmonolithicintegratedcircuit'sproceduretransplantworkveryeasily,isadvantageousintheproductmonolithicintegratedcircuit'sshapingagain.Itsdevelopmentspeed,thesoftwarequality,thestructurearerigorous,theprocedurefirmandsoonaspects,theClanguageperfectmustbetheassemblylanguageprogrammingbeablecertainlytocompare.ThearticlegavehasusedtheClanguageprogrammingtorealizethecorrespondencetorealizethemethodspecifically.Ofthecorrespondencealsosaidthatthepoint-to-pointcorrespondence,usesbetweenthemonolithicintegratedcircuitandthemonolithicintegratedcircuitexchangestheinformation,alsousesincommunicationbetweenthemonolithicintegratedcircuitandthegeneralmicrocomputer's.Intheoverallsystem,mainlyselectstheserialcommunicationmethodtocarryonthedatatransmission.8051monolithicintegratedcircuitssupplyforoneselftheserialinterface,formachinecorrespondedhasprovidedtheextremelyconvenientcondition.UsingthemainengineandfrommachineprovidesRS-232C,RS-422orRS-485andsoon.
Keywords:
MonolithicintegratedcircuitSerialcommunicationCorrespondenceMAX3232
第一章绪论
第二章单片机基础
第一节单片机介绍
第二节单片机历史
第三章设计思路分析
第一节串行通信的基本原理
一、串行通信的原理
二、串行通信的特点
三、串行通信的方式
四、串行通信传送方式
第二节51单片机的串口是RS-232标准串口
一、RS-232标准介绍
二、与RS-232C相匹配的连接器
第三节接口电平转换
第四章硬件电路设计
第一节结构框图
第二节主要器件
第三节电路原理图及说明
一、MAX3232实现的接口电平转换电路原理图
二、单片机部分电路原理图
第五章软件设计
第一节协议设计
第二节主机程序流程及代码
一、主机的程序流程图
二、主机的程序
第三节从机程序流程及代码
一、从机的程序流程图
二、从机的程序
第六章总结
第一章绪论
21世纪是全人类进入计算机时代的世纪,许多人不是在制造计算机便是在使用计算机。
在使用计算机的人们中,只有从事嵌入式系统应用的人才真正地进入到计算机系统的内部软、硬件体系中,才能真正领会计算机的智能化本质并掌握智能化设计的知识。
从学习单片机应用技术入手是当今培养计算机应用软、硬件技术人才的最佳道路之一。
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线对讲机等。
51单片机在控制本地的外围器件时,信息的交互是通过8位并行数据线进行的,但是在较大规模的现代控制系统中,单片机还需要控制远端的设备,需要实现单片机的通信。
使用51单片机自带的串行通信模块,可以方便的实现单片机的串行通信。
51单片机自身具有一个串行口,单片机之间的数据可以通过此串口实现。
数据传输过程的本质是通信过程,是通信过程就需要通信协议。
而应用单片机实现数据的传输,协议较为简单,较容易实现。
两个单片机应用系统之间距离很短,那么可以采用两个80c51的串口直接实现相连的方法,而对于远距离的数据传输,我们可以采用RS-232接口实现,应用RS-232来延长数据的传输距离。
第二章单片机基础
第一节单片机介绍
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
第二节单片机历史
单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。
(一)SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。
“
(二)MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:
不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。
Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。
因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。
(三)单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。
第三章设计思路分析
第一节串行通信的基本原理
通过两个单片机之间的并行口实现数据的传输,首先要了解串行通信的基本原理。
一、串行通信的原理
在通信领域内,有两种数据通信方式:
并行通信和串行通信。
随着计算机网络化和微机分级分布式应用系统的发展,通信的功能越来越重要。
通信是指计算机与外界的信息传输,既包括计算机与计算机之间的传输,也包括计算机与外部设备,如终端、打印机和磁盘等设备之间的传输。
串行通信是指通信双方的数据一位一位地依次传输的通信方式。
每一位数据占据一个固定的时间长度。
其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。
二、串行通信的特点
数据在单条一位宽的传输线上,一比特接一比特地按顺序传送的方式称为串行通信。
一位接一位地顺序传送。
这样一个字节的数据要分8次由低位到高位按顺序一位位地传送。
由此可见,串行通信的特点如下:
(一)节省传输线,这是显而易见的。
尤其是在远程通信时,此特点尤为重要。
这也是串行通信的主要优点。
(二)数据传送效率低。
与并行通信比,这也这是显而易见的。
这也是串行通信的主要缺点。
三、串行通信的方式
串行通信的通信方式按照信号传送方向与时间的关系,可以分为单工、半双工和全双工三种方式。
(一)单工
单工通信只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向,如图2-1-7所示。
为保证正确传送数据信号,接收端要对接收的数据进行校验,若校验出错,则通过监控信道发送请求重发的信号。
例如曾经风靡一时而现在又被淡化的寻呼机。
(二)半双工
半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。
因此,半双工通信实际上是一种可切换方向的单工通信,如图2-1-8所示。
传统的对讲机使用的就是半双工通信方式。
(三)全双工
全双工通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输,如图2-1-9所示。
全双工通信是两个单工通信方式的结合,要求收发双方都有独立的接收和发送能力。
全双工通信效率高,控制简单,但造价高。
计算机之间的通信是全双工方式。
例如电话线就是一个全双工的信道。
四、串行通信传送方式
串行通信又可分为同步通信和异步通信两种方式。
(一)所谓异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。
异步串行通信的特点可以概括为:
(二)所谓同步通信,是指数据传送是以数据块(一组字符)为单位,字符与字符之间、字符内部的位与位之间都同步。
同步串行通信的特点可以概括为:
第二节51单片机的串口是RS-232标准串口
一、RS-232标准介绍
RS-232C是由美国电子工业协会(EIA)正式公布的,在异步串行通信中应用最广泛的标准总线。
RS-232C标准最初是远程通信连接数据终端设备DTE(DataTerminalEquipment)与数据通信设备DCE(DataCommunicationEquipment)而制定的。
RS-232C标准(协议)的全称是EIA-RS-232标准,232是标识符,C代表RS-232的最新一次修改(1969年),在这之前,有过RS-232A、RS-232B标准,它规定连接电缆和机械、电气特性、信号功能及传送过程。
现在,计算机上的串行通信端口(RS-232)是标准配置端口,已经得到广泛应用,计算机上一般都有1~2个标准RS-232串口,即通道COM1和COM2。
RS-232C接口最大传输速率为20Kbps,线缆最长为15米。
RS-232C接口通常被用于将电脑信号输入控制,当通信距离较近时,可不需要Modem,通信双方可以直接连接,这种情况下,只需使用少数几根信号线。
二、与RS-232C相匹配的连接器
与RS-232C相匹配的连接器又DB-25、DB-15和DB-9三种。
RS-232C有20跟线,使用DB-25连接器实现,其中除了用于全双工串行的两根信号外,标准还定义了若干捂手线,如DTR、RTS、CTS等,实际应用中这些捂手线都不必使用。
后来为了简化的9芯DB-9连接器,如图所示:
其引脚功能如表:
引脚
简写
功能说明
1
CD
载波侦测
2
RXD
接收数据
3
TXD
发送数据
4
DTR
数据终端设备
5
GND
地线
6
DSR
数据准备好
7
RTS
请求发送
8
CTS
清除发送
9
RI
振铃指示
在串行数据传输过程中,由于传输距离、现场状况等诸多可能出现的因素,传输数据常常会发生无法预测的错误。
为了使系统能够可靠,有效的保证数据的传输,防止错误带来的影响,通常在通信时,采取数据校验的方法。
常用的数据校验的方法有奇偶校验和CRC等方法。
第三节接口电平转换
如果连个51单片机系统之间的距离很短,可以通过将他们的自带串口直接相连的方法实现双机的通信,连接时注意要将一方的TXD和另一方的RXD引脚连接,如图
如果通信距离较远,可以利用RS-232C接口延长通信距离。
由于RS-232C标准规定的逻辑电平与TTL等数字电路的逻辑电平不兼容,因此二者之间必须将单片机的TTL电平和RS-232C标准电平转换。
这需要在双方的单片机接口部分增加RS-232C电气转换接口。
能够实现RS-232C电平转换的芯片有多种,这里就选用Maxim公司的MAX3232集成芯片。
MAX3232是一款可以实现EIA-232接口的低功耗电平转换芯片。
他有两路收发器,数据传输速率可保证在150kbps,具有较强的静电保护能力。
第四章硬件电路设计
本设计的硬件电路很简单,就是51单片机的接口电平转换。
第一节结构框图
第二节主要器件
本设计的核心部件是单片机芯片和接口电平转换芯片。
单片机芯片选用Atmel公司的AT89C52,接口电平转换芯片选用Maxim公司的MAX3232,其引脚的分布如图:
引脚功能如下:
C1+、C1-、(1、3):
电压加倍充电电泵电容的正负端;
V+、V-(2、6脚):
充电泵产生的+5.5V、-5.5V;
C2+、C2-、(4、5)转换充电泵电容正负端;
T2OUT、T1OUT(7、14脚):
RS-232发送器输出;
R2IN、R1IN(8、13脚):
RS-232接收器输入;
T2IN、T1IN(10、11脚):
TTL/CMOS发送器输入;
GND(15脚):
接地端;
VCC(16脚):
电源端,3.0~5.5。
第三节电路原理图及说明
一、MAX3232实现的接口电平转换电路原理图
本设计要实现单片机双方的数据传输。
MAX3232具有两路收发器,这里只用了一路,其R1OUT、T1IN分别和单片机的RXD(P3.0)、TXD(P3.1)连接,而T1OUT和R1IN则通过DB-9连接器和数据传输的另一方连接。
需要注意的是,是方在连接时,是依法的T1OUT和另一方的R1IN相连。
即双方DB-9连接器的2.、3脚交叉连接。
二、单片机部分电路原理图
图中单片机芯片AT89C52,它工作于11.059MHz,此时钟决定了串口输波特率的装置。
单片机RXD和TXD和电平转换芯片MAX3232连接,他们是单片机的串行输入、输出信号。
就实现点对点数据传输,这样的电路连接就可以完成要求了,但从整体考虑,还增加了P0端口的使用。
其端口作用又两个:
对于发送端,P0端口用于主机的数据采集。
通过读取P0口的内容完成对发生数据的缓冲区的初始化,每隔100ms扫描一次,当扫描到00H,则表明读取完了。
对于接收端,P0端口用于判断从机是否在工作状态,当扫描到P0端口为BB时,认为当前从机忙,向主机发送15H。
第五章软件设计
通信协议的设计是软件设计的重点。
在实际应用中,很多时候单机片之间的通信环境都是比较好的,协议不是很复杂。
第一节协议设计
一、规定协议内容如下:
(一)数据成熟的双方均使用9600kbps的速率传输数据,使用主从通信,主机发数据,从机接收数据,双方在发送数据和接收数据时使用查询方式。
(二)双机开始数据传输时,主机发送呼叫信号24H启动握手过程,询问从机是否可以接收数据。
(三)从机接收到握手信号后,如果同意接收数据则应当信号00H,表示可以接收,否则发应答信号15H,表示暂时不能接收数据。
(四)主机在发送呼叫信号后等待,直接接收从机的应答信号00H,才确认完成握手协议过程,开始发送数据,否则,主机继续发送呼叫信号。
(五)从机在接收完数据后,将根据最后的检验结果判断接收是否正确,正确就向主机发送2AH,表示接收成功,发送F0H,表示错误,要求重发。
(六)主机接收到2AH字节,则表示通信结束,否则主机重发这组数据。
二、握手信号定义
握手信号
说明
0x24
主机开始数据传输时发送的呼叫信号
0x15
从机忙应答,表示无法接收数据
0x00
从机准备好,表示从机可以接收数据
0x2A
数据传送成功
0Xf0
数据传输错误
数据长度字节的值为由主机向从机发送的数据字节的个数N,数据帧最后一个字节为接哦校验位。
设计采用最简单的奇偶校验方法。
主机将待发送的数据的长度字节和N个数据字节共N+1个字节相异或。
然后将异或的结果作为数据帧的最后一个字节向从机发送,在接收端,从机将接收到的数据帧的长度字节和N字节数据工N+1个字节进行异或,见异或后的结果与接收的数据帧的最后一字节比较来进行误码判断。
第二节主机程序流程及代码
一、主机的程序流程图
二、主机的程序
主机程序代码及其说明
#ifndef_PPDATAR_H//防止PPDataT.h被重复引用
#define_PPDATAR_H
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*握手信号宏定义*/
#defineCALL0x24//主机呼叫
#defineBUSY0x15//从机忙
#defineOK0x00//从机准备好
#defineSUCC0x2A//接收成功
#defineERR0xF0//接收错误
#defineMAXLEN64//缓冲区最大长度
ucharbuf[MAXLEN];
#endif
/*延时t毫秒*/
voiddelay(uintt)
{
uinti;
while(t--)
{
/*对于11.0592M时钟,约延时1ms*/
for(i=0;i<125;i++)
{}
}
}
/*发送数据函数*/
voidsenddata(uchar*buf)
{
uchari;
ucharlen;//保存数据长度
ucharecc;//保存校验字节
len=strlen(buf);//计算要发送数据的长度
ecc=len;//开始进行校验字节计算
/*发送数据长度*/
TI=0;
SBUF=len;//发送长度
while(!
TI);
TI=0;
/*发送数据*/
for(i=0;i{ecc=ecc^(*buf);//异或运算
SBUF=*buf;
buf++;
while(!
TI);
TI=0;
}
/*发送校验字节*/
SBUF=ecc;
while(!
TI);
TI=0;
}
/*串口初始化函数*/
voidinit_serial()
{
TMOD=0x20;//定时器T1使用工作方式2
TH1=250;
TL1=250;
TR1=1;//开始计时
PCON=0x80;//SMOD=1
SCON=0x50;//工作方式1,波特率9600kbit/s,允许接收
}
/*主程序*/
voidmain()
{uchari=0;
uchartmp;
/*为缓冲区赋初值*/
P0=0xff;
while(P1!
=0)//每隔100ms从P0口读取,读取到0表示数据采集结束
{
*(buf+i)=P0;
delay(100);//延时100ms
P0=0xff;
i++;}
*(buf+i)=0;//缓冲区最后一个字节为0表示数据结束
init_serial();//串口初始化
EA=0;//关闭所有中断
/*发送呼叫信号CALL并接收应答信息,如果没有接收到从机准备好的信号,则重新发送呼叫帧*/
tmp=BUSY;
while(tmp!
=OK)
{/*发送呼叫信号CALL*/
TI=0;
SBUF=CALL;
while(!
TI);
TI=0;/*接收从机应答*/
RI=0;
while(!
RI);
tmp=SBUF;
RI=0;}
/*发送数据并接收校验信息,如果接收到SUCC,表示从机接收成功,否则将重新发送该组数据*/
tmp=ERR;
while(tmp!
=SUCC)
{
senddata(buf);//发送数据
RI=0;
while(!
RI);
tmp=SBUF;
RI=0;
}
}
第三节从机程序流程及代码
一、从机的程序流程图
二、从机的程序
#ifndef_PPDATAR_H//防止PPDataT.h被重复引用
#define_PPDATAR_H
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*握手信号宏定义*/
#defineCALL0x24//主机呼叫
#defineBUSY0x15//从机忙
#defineOK0x00//从机准备好
#defineSUCC0x2A//接收成功
#defineERR0xF0//接收错误
#defineMAXLEN64//缓冲区最大长度
ucharbuf[MAXLEN];
#endif
/*发送数据函数*/
ucharrecvdata(uchar*buf)
{uchari,tmp;
ucharlen;//保存数据长度
ucharecc;//保存校验字节
/*接收数据长度字节*/
RI=0;
while(!
RI);
len=SBUF;
RI=0;
/*使用len的值为校验字节ecc赋初值*/
ecc=len;
/*接收数据*/
for(i=0;i{
while(!
RI);
*buf=SBUF;
ecc=ecc^(*buf);//进行字节校验
RI=0;
buf++;}
*b