c51单片机双机通信通信中,如何用单根线实现200米距离的双向通信?


选择擅长的领域继续答题?
{@each tagList as item}
${item.tagName}
{@/each}
手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部这个主要是通过单片机的通讯模块具备的接收中断和DMA功能实现的,在没有通讯外设模块使用时,也可以使用软件模拟多种通讯端口的信号,如SPI,I2C,UART等。',getTip:function(t,e){return t.renderTip(e.getAttribute(t.triangularSign),e.getAttribute("jubao"))},getILeft:function(t,e){return t.left+e.offsetWidth/2-e.tip.offsetWidth/2},getSHtml:function(t,e,n){return t.tpl.replace(/\{\{#href\}\}/g,e).replace(/\{\{#jubao\}\}/g,n)}},baobiao:{triangularSign:"data-baobiao",tpl:'{{#baobiao_text}}',getTip:function(t,e){return t.renderTip(e.getAttribute(t.triangularSign))},getILeft:function(t,e){return t.left-21},getSHtml:function(t,e,n){return t.tpl.replace(/\{\{#baobiao_text\}\}/g,e)}}};function l(t){return this.type=t.type
"defaultTip",this.objTip=u[this.type],this.containerId="c-tips-container",this.advertContainerClass=t.adSelector,this.triangularSign=this.objTip.triangularSign,this.delaySeconds=200,this.adventContainer="",this.triangulars=[],this.motherContainer=a("div"),this.oTipContainer=i(this.containerId),this.tip="",this.tpl=this.objTip.tpl,this.init()}l.prototype={constructor:l,arrInit:function(){for(var t=0;t0}});else{var t=window.document;n.prototype.THROTTLE_TIMEOUT=100,n.prototype.POLL_INTERVAL=null,n.prototype.USE_MUTATION_OBSERVER=!0,n.prototype.observe=function(t){if(!this._observationTargets.some((function(e){return e.element==t}))){if(!t
1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},n.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter((function(e){return e.element!=t})),this._observationTargets.length
(this._unmonitorIntersections(),this._unregisterInstance())},n.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},n.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},n.prototype._initThresholds=function(t){var e=t
[0];return Array.isArray(e)
(e=[e]),e.sort().filter((function(t,e,n){if("number"!=typeof t
isNaN(t)
t1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==n[e-1]}))},n.prototype._parseRootMargin=function(t){var e=(t
"0px").split(/\s+/).map((function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}}));return e[1]=e[1]
e[0],e[2]=e[2]
e[0],e[3]=e[3]
e[1],e},n.prototype._monitorIntersections=function(){this._monitoringIntersections
(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(r(window,"resize",this._checkForIntersections,!0),r(t,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in window&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(t,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},n.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,i(window,"resize",this._checkForIntersections,!0),i(t,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},n.prototype._checkForIntersections=function(){var t=this._rootIsInDom(),n=t?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};this._observationTargets.forEach((function(r){var i=r.element,a=o(i),c=this._rootContainsTarget(i),s=r.entry,u=t&&c&&this._computeTargetAndRootIntersection(i,n),l=r.entry=new e({time:window.performance&&performance.now&&performance.now(),target:i,boundingClientRect:a,rootBounds:n,intersectionRect:u});s?t&&c?this._hasCrossedThreshold(s,l)&&this._queuedEntries.push(l):s&&s.isIntersecting&&this._queuedEntries.push(l):this._queuedEntries.push(l)}),this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},n.prototype._computeTargetAndRootIntersection=function(e,n){if("none"!=window.getComputedStyle(e).display){for(var r,i,a,s,u,l,f,h,p=o(e),d=c(e),v=!1;!v;){var g=null,m=1==d.nodeType?window.getComputedStyle(d):{};if("none"==m.display)return;if(d==this.root
d==t?(v=!0,g=n):d!=t.body&&d!=t.documentElement&&"visible"!=m.overflow&&(g=o(d)),g&&(r=g,i=p,a=void 0,s=void 0,u=void 0,l=void 0,f=void 0,h=void 0,a=Math.max(r.top,i.top),s=Math.min(r.bottom,i.bottom),u=Math.max(r.left,i.left),l=Math.min(r.right,i.right),h=s-a,!(p=(f=l-u)>=0&&h>=0&&{top:a,bottom:s,left:u,right:l,width:f,height:h})))break;d=c(d)}return p}},n.prototype._getRootRect=function(){var e;if(this.root)e=o(this.root);else{var n=t.documentElement,r=t.body;e={top:0,left:0,right:n.clientWidth
r.clientWidth,width:n.clientWidth
r.clientWidth,bottom:n.clientHeight
r.clientHeight,height:n.clientHeight
r.clientHeight}}return this._expandRectByRootMargin(e)},n.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map((function(e,n){return"px"==e.unit?e.value:e.value*(n%2?t.width:t.height)/100})),n={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},n.prototype._hasCrossedThreshold=function(t,e){var n=t&&t.isIntersecting?t.intersectionRatio
0:-1,r=e.isIntersecting?e.intersectionRatio
0:-1;if(n!==r)for(var i=0;i0&&function(t,e,n,r){var i=document.getElementsByClassName(t);if(i.length>0)for(var o=0;o推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
为你推荐:
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...
技术应用>网络通信>
文章>使用DS232A实现基于VB的PC与单片机远距离菊花链通信使用DS232A实现基于VB的PC与单片机远距离菊花链通信时间:02-25 10:12 阅读:1859次*温馨提示:点击图片可以放大观看高清大图
简介:本文介绍了使用DS232A芯片组成的菊花链实现基于VB的PC与单片机之间远离的通信方法,讲述了系统的硬件构成,通信的原理、通信协议、软件设计思想。
1引言在分散测控系统中,使用单片机常常需要进行通信,这种通信常常建立在RS232上,但是RS232初衷是为了点对点通信而设计的,串行通信距离在15~25 m以内时,通信效果较好,当距离较远时,会使通信波特率降低,并且通信出错,不能很好地完成远距离的通信任务。原因是:通信距离较远时,信号的损失会使到达目的地时信号幅度达不到最低的RS232的识别电平标准,另外信号线较长时分布电容超过了2 500 pF(RS232规定负载电容要小于2 500 pF)。VisualBasic(VB)是Windows操作系统环境下的一种可视化、面向对象、事件驱动的结构化高级程序设计语言。其开发环境被称为是最受开发者青睐的开发环境,得到了程序开发者广泛的关注和应用。其面向对象的应用开发、OLE和DLL等技术使不同开发人员采用不同开发工具开发的程序可以很方便地集成在一个系统中,使用他可以编制出快速、高效、功能强大、画面丰富的应用程序系统。基于VB的PC之间的通信在国内不乏资料可查,但基于VB的PC与单片机之间的通信更是人们所需,他充分利用了基于VB的PC的丰富多彩,处理能力强,文件的创建、存取、显示、打印功能强的优势,又能发挥单片机控制灵活、接口简单的特点。2硬件2.1硬件组成系统硬件组成框图如图1所示。他利用了DS232A芯片内的2套收发器来进行电平的转换与转发。从图1可知,基于VB的PC与多台单片机通信系统仍然是主从式通信系统,PC是主机,单片机是从机。主机发出的信息可以被各从机接受,而从机只能对主机发送信息,从机间不能够相互通信。主机先送从机收到地址后,将地址与本机地址相比较,如果相符合,则读取后面的数据和命令,并进行相应的处理;如果不相符,则不去理会这些接收信息。主机对从机发送过来的数据进行存储、计算、显示、打印等处理操作。2.2DS232A芯片及菊花链的组成形式 DS232A的内部结构如图2所示。他的内部2套收发器中,第1套用于连接前面的DS232A传递过来的RS232信号,并将其转换为TTL电平,供本通信点的89C52收发通信;第2套用于将第1套传递过来的TTL电平再转换为RS232电平传递至下一通信点。DS232A芯片的2套收发器的这种接力式连接方式构成了所谓的菊花链。因此只要2个单片机通信点之间的距离不超过RS232的通信距离(15~25 m),就可以在这种菊花链上实现通信,从而解决了较远距离通信的问题。3PC与单片机之间的通信3.1通信原理PC机利用VB 6.0提供的串行通信控件MSComm(Microsoft CommControl6.0),实现与单片机之间的通信。通过对VB6.0的MSComm控件的标准事件处理函数、过程的使用,并通过对其属性的设置和修改来设置PC的UART口的工作状态,可以很容易地解决串行口通信问题。89C52内部也具有结构完整的异步串行通信功能部件,可以同时发送、接收数据,可以进行多机的通信。两者的异步通信机制的电平不兼容,PC的串行口输出的是标准的RS232电平,他用负逻辑电平来表示数据:“1”用-3~15 V表示,“0”用+3~+15 V来表示;而单片机的串行通信口只能以TTL电平工作,这与PC的电平规定不同。所以将他们连接成通信系统,必须要将TTL电平转换为RS232信号电平。本系统使用DS232A电路(其内部结构及使用连线如图2所示)来完成电平转换功能。由于DS232A内部有2个电荷泵(Charge Pump)能够将+5 V电压转换为±10 V电压供收发器电路使用,故他不需要额外的电源就可以方便地将TTL电平转换为RS232电平。本系统在通信时,仅使用3根线,即:信号地线:SG;数据发送线:TXD;数据接收线:RXD。3.2软件设计3.2.1对串行口初始化对串行口初始化常常是对其属性进行设置,下面程序就是对与通信有关的属性设置例子:3.2.2OnComm事件处理程序设计OnComm事件是MSComm控件提供的惟一事件,当他被触发时,表示串行口有通信事件发生了,需要计算机去做后续的处理,该事件能否触发有赖于Sthreshold和Rthreshold两个初始化属性的设置。他们的缺省设置为0,是不能触发Oncomm事件的,可对他们按下述方面进行设置:当SThreshold=N(N≠0)时,即表示当发送缓冲区的字符数小于N时,OnComm事件就会被触发;当Rthreshold=N(N≠0)时,即表示当接收缓41冲区的字符数达到N个字符时触发OnComm事件。下面为一响应OnComm事件的代码片段:3.2.3通信协议PC与单片机之间的协议要根据具体情况来制定,设以数据文件方式(对应每个单片机均应安排收发的数据文件)传送,PC向系统内各单片机查询进行通信,协议规定:(1)PC与各单片机通信的波特率为9 600 b/s。(2)单片机既可接收数据(上电时,单片机均设置为接收状态),也可以发送数据,单片机设置为工作方式3。当他发送数据时,必须等到PC查询到他(向单片机发送其地址和查询命令),待接到查询命令后,单片机向PC发出请求发送信号,并得到PC的允许发送命令。单片机发送的第1个字节应为其地址,待单片机发送完毕后再发送“发送结束”信号(在这里将这些命令略去),然后转入接收状态。如果PC发现通信有误(如校验错),则向发送的单片机发出“重发”命令。(3)通信帧格式通信的帧格式如图3所示,两者的帧格式中,只有第9位不相同,PC的第9位是按奇偶校验来设定的,而单片机要利用第9位来判别是地址帧还是数据帧。因此我们要使用PC的奇偶校验位作为单片机接收时来区分是地址还是数据传送。将其设为偶校验(Settings设置为“E”)时,作为地址发送和接收的标志;将其设为奇校验(Settings=“N”)时,作为数据发送与接收的标志。这样PC在发送地址帧时,先必须设为“E”,发送后,立即设为“N”,准备发送数据帧。如此反复,即可实现多机的通信。4结语利用菊花链构成的单片机机通信系统,可以突破RS232规定的通信距离,使用基于VB6.0作为主机与单片机进行通信使得用户界面丰富多彩,编程容易,本文所述的通信系统将两者结合起来,可以较好地适应工程控制、测量、测试系统的需要。通过实验证明,菊花链的节点长度不要过长,在20个以通信点以内较为适宜,多了会影响通信波特率。不过20个的节点数也能满足一般的应用需要。本通信系统中通信线的断裂是一个主要问题,例如发生在从机1和2之间的断裂将使得所有后续设备不能发送和接收数据,使用中应尽量保证电线的可靠性。参考文献[1]Harold Davis.VisualBasic 6奥秘[M].童新海,等译.北京:电子工业出版社,1999.[2]潘小轰.Visual Basic 5.0开发应用者必读[M].北京:海潮出版社,1999.[3]希望图书创作室.中文VisualBasic 6.0教程[M].北京:北京希望电子出版社,1999.[4]中国机械工业教育协会.单片机原理与应用[M].北京:机械工业出版社,2001.

我要回帖

更多关于 c51单片机双机通信 的文章

 

随机推荐