资 源 简 介
题目:基于51单片机的RS485从机系统设计
单片机接口资源配置:
1. 上电复位电路;
2. 晶振电路采用11.0592Mhz晶振;
3. 485接口电路(P3.7用于485芯片的收发控制,收发管脚接单片机的rxd和txd);
4. P2口通过外部跳线接相应的高低电平,配置从机地址为组号;
5. P3.6外接一发光二极管(注意串联电阻进行限流);
6. P3.2外接一按键,断开高电平,按下低电平;
7. 按键检测采用外部中断方式,下跳沿触发;
8. 单片机定时器0以模式1(16位模式)工作,产生50ms的定时中断,并在此基础上设计一单片机内部时钟(24小时制,能计数时、分、秒、50ms值);
9. 单片机串行通信采用模式1非多机通信方式,采用9600波特率以串行中断方式进行数据的收发通信,主机地址为0xF0,广播地址为0xFF。
系统功能需求:
1. 系统配置和自检功能:
l 从机上电后进行初始化,通过读取P2口进行从机地址配置;
l 发光二极管以每秒一次的频率闪烁(亮0.5秒,灭0.5秒);
l 检测到一次按键按下操作后,熄灭发光二极管。
2. 数据接收和按键计时功能:
l 从机接收主机程序(PC机上的串口调试程序)的按键允许命令帧并进行校验;
l 校验正确并且目的地址是广播地址或者本从机的地址,通过发光二极管长亮指示,并允许按键操作;
l 按键按下后,尽可能准确记录按键的动作时点(定时器的低8位、定时器的高8位、50ms值、秒、分、小时);
l 按键操作只能响应一次,重复按键操作不响应;
l 按键的动作时点记录后,发光二极管以每秒一次的频率闪烁(亮0.5秒,灭0.5秒)。
3. 数据发送功能:
l 从机接收主机程序发来的时钟数据搜索命令帧并进行校验;
l 如果校验正确并且数据帧的目的地址是本从机的地址,从机将前面记录的按键动作时点数据(定时器的低8位、定时器的高8位、50ms值、秒、分、小时)按附录中的时钟数据返回帧的帧格式回传给主机;
l 时钟数据返回帧回传结束后,熄灭发光二极管。
4. 校验和生成和检测功能:
l 发送数据帧时能自动生成数据帧校验和;
l 每帧数据在发送帧尾前,发送一字节的当前帧数据的校验和;
l 接收数据帧时能检测校验和并判断接收数据是否正确。
附录:帧定义
校验和的计算:除去帧头和帧尾后将帧中的其他数据求和并取低8位;
帧长:不计帧头、帧尾和校验和字节。
按键允许命令帧:
帧头
帧长
目的地址
源地址
命令字
校验和
帧尾
AA
04
FF
F0
01
F4
66
时钟数据搜索命令帧:
帧头
帧长
目的地址
源地址
命令字
保留字
校验和
帧尾
AA
05
01
F0
03
00
F9
66
时钟数据返回帧:
帧头
帧长
目的地址
源地址
命令字
TL0
TH0
50ms
秒
分
时
校验和
帧尾
AA
0A
F0
01
07
01
B6
09
03
00
00
C5
66
帧结构头文件frame.h(内容如下)
//帧格式定义
#define
FRAME_HEAD 0xAA //帧头
#define
FRAME_FOOT 0x66 //帧尾
#define
FRAME_LEN 0x00 //帧长
#define
FRAME_DST_ADR 0x01 //目的地址
#define
FRAME_SRC_ADR 0x02 //源地址
#define
FRAME_CMD 0x03 //命令字
#define
FRAME_DATA 0x04 //帧数据起始
//帧命令定义
#define
READY 0x01 //按键允许命令
#define
TIME_SERCH 0x03 //时钟数据轮询命令
#define
TIME_BACK 0x07 //时钟数据返回命令
//地址定义
#define
BROAD_ADR 0xFF //广播地址
#define
MASTER_ADR 0xF0 //主机地址