基于单片机的点对点数据传输系统设计.docx

上传人:b****6 文档编号:7949537 上传时间:2023-05-12 格式:DOCX 页数:19 大小:234.05KB
下载 相关 举报
基于单片机的点对点数据传输系统设计.docx_第1页
第1页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第2页
第2页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第3页
第3页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第4页
第4页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第5页
第5页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第6页
第6页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第7页
第7页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第8页
第8页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第9页
第9页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第10页
第10页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第11页
第11页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第12页
第12页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第13页
第13页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第14页
第14页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第15页
第15页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第16页
第16页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第17页
第17页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第18页
第18页 / 共19页
基于单片机的点对点数据传输系统设计.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的点对点数据传输系统设计.docx

《基于单片机的点对点数据传输系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的点对点数据传输系统设计.docx(19页珍藏版)》请在冰点文库上搜索。

基于单片机的点对点数据传输系统设计.docx

基于单片机的点对点数据传输系统设计

 

基于单片机实现点对点对点数据传输

 

摘要

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2