登陆
|
注册
|
搜索
|
最近新帖
发帖子
|
共享我的资料
|
精华帖子
|
热门话题
导航:
老古网
→
老古论坛
→
XMOS公共讨论区
→
XMOS开源项目区
→
单片机程序设计
→
嵌入式系统
→
广告区域
→
→闲聊:提个问题供大家各述高见[寄存器]
*第1616篇: 闲聊:提个问题供大家各述高见
楼 主:
寄存器
2001年12月21日11:52
闲聊:提个问题供大家各述高见
一个PC的RS232接了200个51的RS232,书上讲的是由PC发地址去查询每个51,地址吻合的51
应答PC。组成了一种查询方式的主从系统。51给PC的数据都是突发的。
问题:现在不用PC发地址码查询,51自己给PC发数据,如何做?
第
2
楼:
sonicss
2001年12月21日12:28
那就每次51发送数据时把自己的特征码(比如0~199)发过去让PC判断
第
3
楼:
CHY
2001年12月21日12:45
200个一起发时不会有冲突?
第
4
楼:
sonicss
2001年12月21日12:59
主要看怎么实现了
所以通讯时只能一个一个通讯,PC机每次空闲等待单片机请求时开始只读取第一个字节(特
征码)发送命令给其余的单片机说明现在忙,并得到其余单片机的响应,清空接收缓冲区
(把其余单片机的数据清掉),再发送命令字给这台单片机表示可以发送数据了,传输完毕
后再发命令给所有单片机表示现在空闲
效率是很慢,不然的话,大家一起发,接收缓冲区都容不下啦
第
5
楼:
寄存器
2001年12月21日13:07
因为特征码是必须的,否则PC无法识别是谁的数据。51给PC的数据是随机的肯定会冲突,问题的关键是如何解决冲突。
第
6
楼:
CHY
2001年12月21日13:24
做一个主机巡检51,如51要发数据,通过主机发
第
7
楼:
寄存器
2001年12月21日13:35
主机巡检和PC巡检没有区别
第
8
楼:
CHY
2001年12月21日14:07
主机也由51做,200个51为从机,PC也是从机处于接受状态.否则就有200个主机.EaStar1110的考虑有洞,如果其中有一51坏了呢?
第
9
楼:
EaStar1110
2001年12月21日13:42
能不能这样考虑?
使用一个空闲传递包,包信息中包含接收方地址,51接收这个包,如果是本机地址,并且有
数据需要发送的话,就发送数据到主机,如果没有数据,或者已将数据发送到主机,就发送
一个空闲传递包给下一台51,如此反复。不过由于网络数据量增大,所以最好将波特率提
高。
第
10
楼:
寄存器
2001年12月21日15:12
这种方法就是标准的多机通讯模式,和我前面讲的传统方法是一样的。我们可不可以试着寻找第二中方法呢?
第
11
楼:
CHY
2001年12月21日13:34
你的pc是怎么带200个51的RS232?
第
12
楼:
寄存器
2001年12月21日13:36
51的书上都有介绍多机通讯的,最多可以带256个
第
13
楼:
寄存器
2001年12月21日15:41
讨论该问题的价值
传统的多机通讯像EaStar1110先生讲的那样,这种方法存在一个缺点:就是PC要轮检一圈才可以
把所有的数据送上来。200个是夸张的讲法,在我们平时的工程中很难遇到。有一种情况传统的方
法无法处理:200个51中始终只有2-3个51和PC通讯,但51没有外挂缓存数据流较长,而且速率较
高,数据流的出现是突发的。那么传统的方法因为返回的空包太多在加上询问,占用了大量的资
源,就不能保证数据不丢失。
第
14
楼:
victory53
2001年12月21日16:47
可以这样
200个51排址为1到200,每个51中设置两个标识符以判断有无其他的51在向pc发数据,如
无,发自己的地址,pc收到地址后把此地址发给所有的51,51们保存此值到标识位。但是与
自己地址相等的51清零标识位后就可发数据了,如有两个以上的51发请求信号,则返回的地
址就是随机的,此时,51们在中断中判断到返回的值与自己的地址相符但又不是发数据的
51,则他发出一个表示出错的值,让pc重发00;具体怎样设标识与控制那要看通信协议了
第
15
楼:
寄存器
2001年12月21日17:25
但串口上只要有两个51向线上发送数据就已竞争了。
>>>>>>对该主题发表你的看法
本主题贴数
15
,分页:
[第1页]
[上一篇主题]:
硬件:老古,请教一下,如果将P0口作I/O口用,是否加上拉电阻?
[下一篇主题]:
AVR单片机:求助 有谁用过ak2345 ctcss 我送数送不进&n