用单片机实现一主三从式多机通信包括论文.docx
- 文档编号:4752775
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:21
- 大小:275.21KB
用单片机实现一主三从式多机通信包括论文.docx
《用单片机实现一主三从式多机通信包括论文.docx》由会员分享,可在线阅读,更多相关《用单片机实现一主三从式多机通信包括论文.docx(21页珍藏版)》请在冰豆网上搜索。
用单片机实现一主三从式多机通信包括论文
一、题目要求与功能分析
1.1题目要求
本小组的试验题目如下:
一、任务:
设计实现多台单片机系统之间的串行通信
二、基本要求(难度系数0.8):
(1)设计一个主从式多机通信系统,包含1台主机和3台从机,主机和从机全部为单片机;
(2)选择合适总线接口芯片,正确连接主机和从机;
(3)编程实现分布式数据采集功能,主机可以获取各分机当前AD转换结果,并显示。
三、发挥部分:
(1)完善通信功能。
(根据完成情况加分,上限+0.2)
1.2功能及整体模块分析
随着工业化要求提高,分布式系统发展以及控制设备与监控设备之间通讯需要,多机通信系统设计的监控系统逐步普及。
此多机通信系统具有友好的人机操作界面、强大的IO设备端口驱动能力,可与各种PLC、智能仪表、智能模块、板卡、变频器等实时通讯。
在检测大量模拟量的工业现场使用相似的多机通讯系统;单片机接口丰富,与A/D转换模块组合可以完成相同的工作,并且系统可靠、成本低。
本次实验的目的是就是应用单片机的串口通信功能实现一个分布式采集系统。
整个系统中包含一片主机和三片从机,主机的任务是实现对三片从机的AD转换结果的采集并在数码管上显示之。
这样从硬件的角度上将整个系统分为两个模块—主机模块和从机模块。
主机模块中包含单片机模块、数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。
就本次实验而言硬件电路的设计难点在于串口电平转换芯片MAX485的连接,而软件的设计在于串口通信协议的设定及其相互通信的过程。
二方案论证
2.1设计目的
(1)进一步掌握串行接口控制寄存器SCON及波特率选择、工作方式的设置方法。
(2)理解串行接口的多机通信系统的原理和异步串行通信标准接口RS-485的使用。
(3)进一步掌握C语言程序调试的的方法。
(4)熟悉多机通信设置从机地址来识别从机的一种方法。
2.2设计思路
2.2.1原理分析和讨论
单片机构成的多机系统常采用总线型主从式结构。
所谓主从式,即在数个单片机中,有一个是主机,其余的是从机,从机要服从主机的调度、支配。
80C51单片机的串行口方式2和方式3适于这种主从式的通信结构。
当然采用不同的通信标准时,还需进行相应的电平转换,有时还要对信号进行光电隔离。
在实际的多机应用系统中,常采用RS-485串行标准总线进行数据传输。
图1多机通信的主从式示意图
所有从机的SM2位置1,处于接收地址帧状态。
主机发送一地址帧,其中8位是地址,第9位为地址/数据的区分标志,该位置1表示该帧为地址帧。
所有从机收到地址帧后,都将接收的地址与本机的地址比较。
对于地址相符的从机,使自己的SM2位置0(以接收主机随后发来的数据帧),并把本站地址发回主机作为应答;对于地址不符的从机,仍保持SM2=1,对主机随后发来的数据帧不予理睬。
从机发送数据结束后,要发送一帧校验和,并置第9位(TB8)为1,作为从机数据传送结束的标志。
主机接收数据时先判断数据接收标志(RB8),若RB8=1,表示数据传送结束,。
若接收帧的RB8=0,则存数据到缓冲区,并准备接收下帧信息。
主机收到从机应答地址后,确认地址是否相符,如果地址不符,发复位信号(数据帧中TB8=1);如果地址相符,则清TB8,开始发送数据。
从机收到复位命令后回到监听地址状态(SM2=1)。
否则开始接收数据和命令。
[1]
2.2.2题设分析
1.从机识别
给多点分别设置地址信息,在数据前加地址字段或直接在数据传输钱发送地址帧,主机通过不同的地址信息识别数据源。
首先,从机应处于只接受地址帧信息的状态;
然后主机发送一帧地址信息;
从机接收到地址帧后,将本机的地址与地址帧中的地址惊醒比较,如果地址相同,则准备接收数据,否则对其当前帧。
依然处于只接受地址帧状态;
主机发送地址帧后,相应的从机接收数据,数据传输完毕后,从机继续回到只接受地址帧的状态。
在这一过程中,其他从机不受影响;
当主机需要与其他从机进行数据传输时,可以再次发送地址帧呼叫主机,重复这一过程。
2.51单片机串口的多机通信功能
根据MCS-51串行口的多机通信能力,多机通信可以按照以下协议进行:
(1)首先使所有从机的SM2位置1处于只接收地址帧的状态。
(2)主机先发送一帧地址信息,其中8位地址,第9位为地址/数据信息的标志位,该位置1表示该帧为地址信息。
(3)从机接收到地址帧后,各自将接收的地址与本机的地址比较。
对于地址相符的那个从机,使SM2位清零,以接收主机随后发来的所有信息;对于地址不符的从机,仍保持SM2=1,对主机随后发来的数据不予理睬,直至发送新的地址帧。
(4)当从机发送数据结束后,发送一帧校验和,并置第9位(TB8)为1,作为从机数据传送结束标志。
(5)主机接收数据时先判断数据结束标志(RB8),若RB8=1,表示数据传送结束,并比较此帧校验和,若正确,则会送正确信号00H,此信号令该从机复位(即重新等待地址帧);若校验和出错,则发送0FFH,令该从机重发数据。
若接收帧的RB8=0,则原数据到缓冲区,并准备接收下帧信息。
(6)若主机向从机发送数据,从机在第(3)步中比较地址相符后,从机令SM2=0,同时把本站地址发回主机。
作为应答之后才能收到主机发送来的数据。
其它从机(SM2=1),无法收到数据。
(7)主机收到从机的应答地址后,确认地址是否相符。
如果地址不符,发复位信号(数据帧中TB8=1);如果地址相符,则清TB8,开始发送数据。
(8)从机接收到复位命令后回到监听地址状态(SM2=1)。
否则开始接收数据和命令。
[2]
三、电路设计
3.1整体功能框架设计
本设计是将各分机当前AD转换结果传送给主机,实际应用中为实现分布式数据采集功能即主机(一般为PC机)对各个不同的地点的环境进行实时测量,主机间隔的发送地址呼叫各个从机,从机进行地址验证后启动AD转换,由AD转换芯片将电压值转换成数字量,最后把当前AD转换结果由串口MAX485传送给主机,主机经过处理在发送给PC机显示。
分析可知硬件电分为主机模块和从机模块。
主机模块中包含单片机子模块、LED数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。
在主模块中由AT89S51单片机担任主机,六个LED数码管担任显示设备和一片MAX485担任串口的电平转换。
在整个主机系统中有三个从机模块三个从机模块结构一样,有一片AT89S51单片机担任从机外接一片ADC0809转换芯片和一片MAX485担任串口的电平转换。
串口采用单工及异步通信方式。
设计大体思路流程图程如下:
图2多机通信的分布式数据采集功能应用示意图
3.2硬件电路设计
本设计是实现包含1台主机和3台从机主从式多机通信系统,所以硬件电路也分为主机电路和从机电路。
主机和从机的电路原理图基本一致,都是由单片机电路和接口电平转换电路,只是从机电路中需要增加有关本机地址的设置电路。
主机的电路的搭建采用主CPU板、键盘显示接口板各一块。
照实验原理图将主CPU板的P0口接到键盘显示接口板的位码接口,P1口接到键盘显示接口板的段码的接口。
从机的电路由CPU板和ADDA转换板构成。
其次是电平转换电路的焊接。
电平转换的路的实现是通过自己搭建电路完成。
电平转换的电路主要有四块MAX485和两个100Ω电阻构成。
四块MAX485采用总线方式连接,每个芯片分别引出三个引脚用于单片的连接。
最后将各个模块的按照原理图连接起来。
图3多机通信整体模块电路连接图
3.2.1主机硬件电路设计
如图所示,U1为单片机芯片AT89S51,它工作于11.0592MHz时钟,此时钟决定了串口传输波特率的设置。
单片机的Rxd(P3.0)和TxD(P3.1)和电平转换芯片MAX485,他们是单片机的串行输入、输出信号。
其中P0的作用如下:
对于发端,P0口用于主机的数据采集,通过读取P0口的内容完成对发送数据区的初始化,每隔定时读取一次,如果读到00H,则表明数据读取完毕。
对于收端,P0口用于判断从机是否处于忙状态。
当读到P0口为BBH时,认为当前从机忙,需要向主机发送忙应答。
主机部分的连接示意图:
PORT端口部分为与从机的串行接口MAX485对应的A、B相连。
图4多机通信的主机部分电路设计
MAX485串口电平转换电路:
串口电平转换电路的电路图如图所示:
本实验中采用MAX485的电平转换芯片。
MAX485是一种RS-485标准接口的电平转换芯片。
RS-485采用差分式半双工通信方式,真正实现多点总线连接,具有传输距离远可靠性高的特点。
图5电平转换电路
MAX485接口芯片采用单一电源+5V工作,额定电流为300μA,采用半双工通讯方式。
它完成将TTL电平转换为RS-485电平的功能。
MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。
RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。
在与单片机连接时接线非常简单。
只需要一个信号控制MAX485的接收和发送即可。
同时将A和B端之间加匹配电阻,一般可选100Ω的电阻。
如下图是其芯片资料数据手册中的典型连接图:
图6MAX485接口芯片数据手册的典型连接图
LED数码管显示电路:
LED数码管显示电路如图2所示显示子模块由六个数码管和相应的启动芯片构成。
其中每路通道的采集值用量为数码管显示。
为了节约单片机的I/O口本题的数码管采用MAX7219芯片。
给芯片的优点在于可完成电路的刷新。
MAX7219芯片的SEGA-SEGDP为数码管段码接口,DIG0-DIG7为位码接口,CLK、DIN、LOAD分别与单片机P1.0、P1.1、P1.2连接。
单片机通过串行的方式将要显示的数据通过CLK、DIN、LOAD三个接口送入相应的显示寄存器内,MAX7219将自动完成对数码管的刷新工作。
具体的电路如图所示。
图7LED显示电路
3.2.2从机硬件电路设计
从机AT89S51的P1口的低四位用于本机的地址设定,其他的设置基本与主机相似。
通过跳线开关的闭合与打开的组合可以最多设定16种地址。
比如,四位开关全部断开时,对应的P0为1111,此时本机的地址即为1111H。
从机在开始加电工作前需要根据整个系统的要求设定自己的地址,也就是将开关状态设置好。
这样从机在开机自检时就可以获得本机的地址。
其中将模拟电压信号转换成数字量的AD转换芯片ADC0809的连接如图中,将数据选择三个控制端都设为低电平,即选择输入通道IN-0;然后将8位数据输出口D0-D8与从机8051的P2口相连,将ADC0809的CLOCK端与从机8051的ALE相连,将ADC0809的STATRT、ENABLE、ALE端分别与从机8051的P0口的P0-3相连;并加入设置参考电压。
从机部分的连接示意图:
两个PORT端口部分为与主机的串行接口MAX485对应的A、B相连,另一个PORT端U0为采集转变的电压信号。
根据设计要求绘制从机模块电路图如图所示。
图8多机通信的从机部分电路设计
其中AD转换芯片ADC0809与从机8051的连接具体如下:
图9ADC0809与8051连接图
ADC0809芯片为8位A/D转换器(28PIN)IN0-IN7:
8个模拟通道输入端。
ADDC、ADDB、ADDA:
通道地址线(000~111对应了8个通道)ALE:
地址锁存允许信号。
START:
启动转换信号。
EOC:
转换结束信号。
OE:
输出允许信号(允许读)。
CLK:
外部时钟脉冲输入端,典型值640K。
VREF(+)、VREF(-):
参考电压输入端。
Vcc:
+5V电源。
GND:
地。
转换公式为:
D=AIN*/Vref*(2^8-1)
3.3软件电路设计
3.3.1协议设计
数据传输的双方均使用9600kbps的数率进行传输,使用主从式通行,主、从机相互发送或接受数据,首先使所有从机的SM2位置1处于只接收地址帧的状态。
主机先发送一帧地址信息,从机接收到地址帧后,各自将接收的地址与本机的地址比较。
对于地址相符的那个从机,使SM2位清零,以接收主机随后发来的所有信息;对于地址不符的从机,仍保持SM2=1,对主机随后发来的数据不予理睬,直至发送新的地址帧。
当从机发送数据结束后,发送一帧校验和,并置第9位(TB8)为1,作为从机数据传送结束标志。
主机接收数据时先判断数据结束标志,若RB8=1,表示数据传送结束,并比较此帧校验和,若正确,则会送正确信号00H,此信号令该从机复位(即重新等待地址帧);若校验和出错,则发送0FFH,令该从机重发数据。
若接收帧的RB8=0,则原数据到缓冲区,并准备接收下帧信息。
若主机向从机发送数据,从机令SM2=0,同时把本站地址发回主机。
作为应答之后才能收到主机发送来的数据。
其它从机(SM2=1),无法收到数据。
主机收到从机的应答地址后,确认地址是否相符。
如果地址不符,发复位信号;如果地址相符,则清TB8,开始发送数据。
从机接收到复位命令后回到监听地址状态。
否则开始接收数据和命令。
设主机发送的地址联络信号00H,01H,02H为从机设备地址;
通常从机以中断方式控制和主机的通信。
程序可分成主机程序和从机程序,约定一次传送的数据为16个字节.[3]
3.3.2主机程序流程图设计
依据试验要求及相应的通信协议现绘制如下的主机程序流程图:
图10主机的程序流程图
主机的程序流程大致如上,首先将串口初始化,设置TMOD、PCON、SCON、TH1、TL1等参数;然后主机通过串口发送一个呼叫地址,等待并接收从机回答;若地址错,则发送发复位信号给从机。
如果地址相符,则清地址标志。
然后通过发命令来控制是主机发送数据给从机还是主机准备接收数据,等待从机的回复来确定接收状态。
如果是发送命令并且从机已经准备好接收,清校验和,主机发送一数据给从机。
主机发送校验和,从机根据校验和后回复接收是否正确,若接收不正确,则要求主机重新发送,并置地址标志。
3.3.3从机程序流程图设计
图11从机的程序流程图
从机的程序流程有很大一部分是和主机的流程一样的,从机首先再开机启动时通过P1口读取从机的本机地址,串口初始化:
TMOD、PCON、SCON等参数的设置和主机相同,首先将SM2设为1,只接收地址帧。
假定准备好发送和接收,当接收到本机发过来的地址时,如果非本机地址,继续等待;如果是本机地址则把本地址发回给主机。
如果是复位信号,则恢复SM2置一。
如果是接收命令,则是等待主机发送的数据,从机接收准备好发送数据的状态,然后清校验和,开始从主机接收数据,校验和相同发"00",校验和不同发"0FF",重新接收,接收数据完毕;如果是接收命令,则从机向主机发送数据,并等待发送,从机准备好发状态后,先清校验和,开始向主机发送数据,然后向主机发送校验和,等待主机回复,若主机接收不正确,则从机重新发送数据给主机,一直等到发送数据成功;如果主机判断命令非法,并回复从机重新回到发状态,最后从机恢复监听将SM2位置一。
本从机设计为首先通过将其转换的电压信号,再通过AD转换芯片ADC0809将其转变为数字量传送给从机。
从机在收到发送命令后,将此数据通过串口再发送给主机。
主机根据判断后,给从机发送控制命令。
四系统的调试与实现
对本课题的设计思路清晰之后,我们接下来所需要做的工作就是依据我们的方案编程实现功能。
本过程可以分为五个部分:
从机模块调试、LED显示模块调试、电平转换模块功能调试、主机模块功能调试、整体设计功能调试。
4.1主机模块功能调试
当主机发送地址帧呼叫从机时从机将接收到的内容与自己的地址比较,如若相同从机会向主机发送主机所需要的数据。
而主机接收到正确的数据,便会通过LED数码管显示出来,这样便会实现我们预想的主机模块功能。
当然主机部分程序包含上面调试好的LED显示模块程序。
此处将从机送来的数值通过调用LED显示模块子程序显示出来。
LED显示模块分为三个区域,从机0、从机1、从机2分别占用2个显示管。
4.2从机模块调试
从机部分实现的功能是针对主机发送来的地址进行对照,如果是自己的从机地址,就会发送AD转换结果。
为了检测此部分的功能是否能够实现,我们借助串口测试软件,发送预设的从机地址看看该从机是否会把AD转换的结果发送来。
此从机调试模块分为两个层次:
1、用一个简单的程序测试从机硬件部分是否能正常运行;2、在硬件良好的情况下测试编写的从机部分代码能否顺利实现功能。
该部分相比较而言简单一点,其实也可以归为主机模块调试的一部分。
LED功能就是用来显示DA转换的结果。
连接好电路之后,用个小程序测试LED显示功能良好的情况下显示从机发送来的数据。
4.3整体设计功能调试
各个模块程序功能调试好之后,将他们各就各位。
但此时我们又遇到一个难题:
从机送给主机的数据在经MAX485传递给主机时读出来的不是理想的结果,后经过示波器查看输出波形,经多次调试,将主机与从机时序调整一致才得以在主机收到从机发送来的数据。
图12系统的调试示意图
五总结与体会
一个星期的单片机课程设计就这么快的结束了,在这短暂的一个星期里我们学到了很多很多。
我们在课堂上掌握的仅仅是书面的理论知识,锻炼我们的实践能力,如何把我们所学的专业基础课理论知识运用到实践中去。
此次的课程设计就为我们提供了良好的实践平台。
在做本次课程设计的过程中,我感触最深的当属查阅大量的资料,无论是课本上的还是网上的我们都学习了不少,从中也借鉴了别人的思想,开阔了自己的思路。
做单片机课程设计,对设计者对软硬件的理解和掌握的要求比较高。
在设计程序之前,设计者必学对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,比如开始时硬件电路的连接,针对MAX485芯片匹配电阻的选择,从机与主机握手的过程等等,在大家仔细的思考和老师同学的帮助下顺利解决。
大家学会了一个重要的设计技巧,就是一步一个脚印,踏踏实实的编程,每编写好一个模块的程序后应及时检测是否正确。
一次性将所有程序编写好再进行测试,这样如若出现问题,但无法知道问题出在何处,这样会带来更大的麻烦,修改就无从下手。
总而言之,此次的单片机课程设计,无论是软件的使用还是对单片机内部资源硬件的了解,我们的认识都大大加深了。
同时感谢老师及同学们,感谢你们给予我们小组的指导和帮助!
参考文献
[1]蔡美琴,张为民等.MCS-51系列单片机系统及其应用[M].—2版.—北京:
高等教育出版社,2004.6
[2]于永,戴加,刘波等.51单片机C语言常用模块与综合系统实例精讲[M].—2版.—北京:
电子工业出版社,2008.10
[3]杨家新,李华军等.单片机程序设计及其应用-从基础到实践[M].—北京:
电子工业出版社,2006.3
附录
程序设计全部代码如下:
1.主机部分程序代码:
#include
#include
unsignedcharLED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
unsignedcharLED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20};
unsignedcharLED_buf[6]={0x00,0x00,0x00,0x00,0x00,0x00};
sbitEN=P3^4;
voiddelay(unsignedlongn)
{
unsignedinti;
for(i=1;i {;} } voidconvert(unsignedchara,unsignedcharj) { unsignedcharm,n,i; unsignedcharb=0; for(i=0;i<51;i++) { b=i*5; if(b>a) { break; } } m=i/10; n=i%10; //j=j*2; LED_buf[j]=LED_seg[n]; LED_buf[j+1]=LED_seg[m]+0x80; } voidsbuf_init(void) { SCON=0xd0;//工作方式3 PCON=0x00; TMOD=(TMOD&0xf)|0x20; TH1=0xfd; TL1=0xfd; TR1=1; } voidflash_led(void) {unsignedchari; for(i=0;i<6;i++) { P2=LED_buf[i]; P0=LED_bit[i]; delay(200); } P0=0x00; } voidmain(void) {unsignedcharADDR; unsignedchartmp; unsignedchara=0; unsignedchari=0; unsignedcharj=0; ADDR=P1&0x0f; while (1) {sbuf_init(); while (1) { tmp=ADDR+1; while(tmp! =ADDR) {/*发送从机地址*/ TI=0; TB8=1;//发送地址帧 EN=1;//发送使能 delay(20); SBUF=ADDR; while(! TI); TI=0; delay(20);/*接收从机应答*/ EN=0;//接受使能 delay(50); while(! RI); tmp=SBUF; RI=0; delay(10); } EN=0;//接受使能 delay(10); while(! RI); a=SBUF; RI=0; delay(20); j=0; if(i>=2) { i=0; ADDR=0x00; } convert(a,j); flash_led(); } } } 2.从机部分程序代码: #include"absacc.h" #include"reg51.h" #defineucharunsignedchar #defineIN0XBYTE[0x0000] #include sbitAD_BUSY=P3^3; sbitEN=P3^4; voiddelay(unsignedintn) { unsigne
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实现 一主三 式多机 通信 包括 论文