软件设计:
程序的说明:
本程序为从站程序。完成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,以4MHZ,8Tosc为例,就是88us
3.缓冲区数据是变换后3个一组存入的,如何保证数据不会发生错位
4.中断程序用到了变量fsr,count,temp0,temp1等
解决:将count改为int_count,不用保护
fsr保存于fsr_temp
temp0,temp1仅中断程序用到,不用保护
其他并无需要保护的变量
5.本结构流图并未考虑广播地址及对站点地址的修改,地址查询命令等功能。
6.如果发送AD命令及发送数据请求命令,而AD未有启动,这是启动AD,即启动定时器。
7.各中断标志的变化
8.掉电复位功能还未禁用
扩展:
加入对站点地址的修改
加入初始化时地址的查询命令