没有合适的资源?快使用搜索试试~ 我知道了~
51单片机实现的RS485通讯程序 #ifndef __485_C__ #define __485_C__ #include <reg51.h> #include <string.h> #define unsigned char uchar #define unsigned int uint /* 通信命令 */ #define __ACTIVE_ 0x01 // 主机询问从机是否存在 #define __GETDATA_ 0x02 // 主机发送读设备请求 #define __OK_ 0x03 // 从机应答 #define __STATUS_ 0x04 // 从机发送设备状态信息
资源推荐
资源详情
资源评论
单片机实现的 通讯程序
通信命令
!"#"$$$主机询问从机是否存在
%!&"#"'$$$主机发送读设备请求
()"#"*$$$从机应答
+,+"#"$$$从机发送设备状态信息
-.+/!"#"$$$缓冲区长度
!001!2'$$$任何通信帧长度超过 ' 则表示出错
34-.+/!56$$$该缓冲区用于保存设备状态信息
76$$$该字节用于保存本机设备号
3-&!89:"6$$$驱动器使能, 有效
3-0!89:6$$$接收器使能," 有效
7;<=6$$$调用该函数获得设备状态信息,函数代码未给出
7;<>?@@3=6$$$发送数据帧
37A<>?=6$$$接收主机命令,主机请求仅包含命令信息
7;3><=6$$$该函数发送一帧数据中的一个字节,由
<=函数调用
7;A<=
B
>?6
6
系统初始化
98"#C6$$$读取本机设备号
78<9'=6
-(&8"#'"6定时器 使用工作方式 '
D8'"6$$$设置初值
18'"6
086$$$开始计时
9(28"#"6$$$+-(&8
+(28"#"6工作方式 ,波特率 EF""3?,允许接收
!+8"6$$$关闭串口中断
"8"6$$$外部中断 " 使用电平触发模式
!."86$$$开启外部中断 "
!86$$$开启中断
主程序流程
G<=$$$主循环
B
$$<7A<H>?=88"=$$$发生帧错误或帧地址与本机地址不符,丢弃当前帧
后返回
$$$;6
$$G<>?=
$$B
$$$ !I$$$主机询问从机是否存在
$$$$<()@"@3=6$$$发送应答信息,这里 3 的内容并未用到
$$$$3J6
$$$%!&I
$$$$8<3=6
$$$$<+,+@@3=6$$$发送设备状态信息
$$$$3J6
$$$I
$$$$3J6$$$命令类型错误,丢弃当前帧后返回
$$K
K
K
7;0!&+,+<=?"$$$产生外部中断 " 时表示设备状态发
生改变,该函数使用寄存器组
B
<=6$$$获得设备状态信息,并将其存入 3 指向的存储区,数据最后一字
节置 " 表示数据结束
K
该函数接收一帧数据并进行检测,无论该帧是否错误,函数均会返回
函数参数 >? 保存接收到的命令字
当接收到数据帧错误或其地址位不为 " 时(非主机发送帧),函数返回 ",反之返回
37A<>?=
B
338"6$$$当接收到的上一个字节为 "#3 时,该位置位
3"8"6$$$当接收到的上一个字节为 "#" 时,该位置位
34!001!256$$$保存接收到的帧
A?6
8"6
6
-&!8"6$$$置发送禁止,接收允许
-0!8"6
接收一帧数据
8"6
G<L"=$$$循环直至帧接收完毕
B
$$08"6
$$G<L0=6
$$A?8+M,N6
$$08"6
$$<388=$$$接收到的上一个字节为 "#3
$$B
$$$G<A?=
$$$B
$$$$"#I
$$$$$3458"#36$$$"#3 表示 "#3
$$$$$8:"#36
$$$$$38"6
剩余24页未读,继续阅读
资源评论
stevenmail
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功