注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

易拉罐的博客

心静自然凉

 
 
 

日志

 
 

转 rs485通信设计  

2010-03-26 22:25:54|  分类: 串行通信 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

rs485通信设计

物理层:rs485半双工

 

通信方式:传感器网络的拓扑结构采用总线方式。传送数据采用主从站方式。PC 机作主站,网络传感器(微处理器) 作从站。主站启动并控制网上的每一次通信。每个网络传感器都有一个识别地址(由从站寄存器保存)。只要当某一传感器被寻址时,该传感器才同主站应答数据(包括信号传送以及传感器远程标定)。

每次数据的传送采用帧格式。其中数据值为0-127,大于127的用于控制。

 

帧格式:

包括控制状态帧和数据帧

 

帧头     地址      帧类型       长度      数据1 ??数据N    帧尾

1B        1B         1B          1B          nB             1B

FFH      0-127       0-127      0-127       0-127           FEH

 

10位AD采样的数据转换为三个字节发送,10位由低位起每四位加30H变为一个字节,高两位为一个字节。如:1ffHà31H 3fH 3fH。因此采样的数据在30H――3fH之间,另外再限制地址,帧类型,长度等的第八位为0,使7f以上的数据用于控制(如帧头,帧尾)传送。

 

主机功能:地址为0

1.初始化串口,获得从机数,能够设定从站地址

2.向从机发送数据请求

3.保存各从机数据

4.用不同颜色曲线显示数据

5.异常处理

 

从机功能:地址从1-126,127为广播地址

1.地址从1依次开始且各从机地址固定,用寄存器保存

2.AD,按固定周期采样转换,存在缓冲区

3.响应主机请求,发送缓冲区所有数据(最多5组)

4.异常处理

 

 

异常处理:

1.从机缓冲区空,从机发送状态,主机接受到后请求下一主机。

2.缓冲区满,直接覆盖以前数据

3.从机未响应(故障或者忙),主机延时一定时间(???),请求重发,最多重发一次,否则转向请求下一从机。

 

 

数据采集系统从站设计

软件设计:

程序的说明:

本程序为从站程序。完成AD,接受命令,并发送数据等功能,以及实现主从式485协议(rs485)中的从站功能。

1.该程序有以下功能:初始化,AD,定时器,串口接受,串口发送

2.主程序完成初始化。之后不断查询是否有接受数据,并作出相应处理:启动AD,发送数据,状态等。从而实现了主从式rs485的从站功能。

3.AD采用中断方式,且不使用中断嵌套

 

数据变量:

本机站点地址:     lcl_adr   RAM:20H               EEPROM固化:00H

本机状态:         lcl_status   21H

总线状态:         bus_status   22H

接受到的主机命令:  host_cmd        23H

保存status reg: 24H         status_temp

w reg    25H , a5H   并且能从体3,体4映射过来即所有体的该单元定义为w_temp

fsr_temp       equ 26H

缓冲区队列变量:     计数:2aH 对头:2bH 对尾:2cH   队列:50H---7fH

发送,接受数据用到变量:   起与30H

rc_data1   equ 30H      ;用于存rcreg

      rc_count   equ 31H      ;接受计数器

tx_count   equ 32H      ;发送计数器,一次最多发送5组,15 byte数据

tx_data1   equ 33H      ;发送暂存数据

暂存AD结果变量, 中间变量:起与40H

ad_resl    equ 40H      ;暂存ad结果,这三个单元必须连续

ad_resl1   equ 41H

ad_resh    equ 42H

temp0      equ 46H      ;中间变量

temp1      equ 47H

count      equ 48H      ;循环计数器

int_count  equ 49H      ;中断程序中用到计数器,避免中断保护

 

本机状态:lcl_status            21H

bit 7

Bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit0

 

 

 

 

 

 

 

ad_start

 

总线状态:bus_status            22H

bit 7

Bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

 

 

 

 

 

Broadcast

is_adr

Lcl_data

 

 

接受到的主机命令:host_cmd          23H

00H  数据帧标志

01H  启动AD

02H  关闭AD

03H,请求数据

04H,请求重发

05H  广播设置分站地址

06H  查询地址

 

 

 

问题及说明:

1.查询方式是否能及时接受,也即当接受处理一个字节的数据时,下一个数据是否能及时接受。

解决:接受一个字节数据需要时间,只要处理时间在这个时间范围内就可以及时接受。以19.2K为例,这个时间至少为:10/19.2ms=0.52ms

关键是从机发送一帧数据时间较长,但是主机发送两帧数据之间有很长时间的间隔,因此,如果是本机数据,则接收完一帧再做相应处理。即使是发送一帧数据也足以完成

 

2.AD包括采样时间20us和转换时间11TAD,以4MHZ8Tosc为例,就是88us

 

3.缓冲区数据是变换后3个一组存入的,如何保证数据不会发生错位

 

4.中断程序用到了变量fsrcount,temp0,temp1

解决:将count改为int_count,不用保护

      fsr保存于fsr_temp

      temp0temp1仅中断程序用到,不用保护

      其他并无需要保护的变量

 

5.本结构流图并未考虑广播地址及对站点地址的修改,地址查询命令等功能。

 

6.如果发送AD命令及发送数据请求命令,而AD未有启动,这是启动AD,即启动定时器。

 

7.各中断标志的变化

 

8.掉电复位功能还未禁用

 

扩展:

加入对站点地址的修改

加入初始化时地址的查询命令

  评论这张
 
阅读(223)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017