51单片机c语言485通讯案例,485通讯协议程序怎么写(51单片机的485通信程序...
51单⽚机c语⾔485通讯案例,485通讯协议程序怎么写(51单
⽚机的485通信程序案例)...
RS-485总线接⼝是⼀种常⽤的串⼝,具有⽹络连接⽅便、抗⼲扰性能好、传输距离远等优点。RS-485收发器采⽤平衡发送和差分接收,因此具有抑制共模⼲扰的能⼒,加上收发器具有⾼的灵敏度,能检测到低达200mv的电压,可靠通信的传输距离可达数千⽶。使⽤RS-485总线组⽹,只需⼀对双绞线就可实现多系统联⽹构成分布式系统、设备简单、价格低廉、通信距离长。
51单⽚机的485通信程序
#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 // 从机发送设备状态信息
#define __MAXSIZE 0x08 // 缓冲区长度
#define __ERRLEN 12 // 任何通信帧长度超过12则表⽰出错
uchar dbuf[__MAXSIZE]; // 该缓冲区⽤于保存设备状态信息
uchar dev; // 该字节⽤于保存本机设备号
sbit M_DE = P1^0; // 驱动器使能,1有效
sbit M_RE = P1^1; // 接收器使能,0有效
void get_status(); // 调⽤该函数获得设备状态信息,函数代码未给出
void send_data(uchar type, uchar len, uchar *buf); // 发送数据帧
bit recv_cmd(uchar *type); // 接收主机命令,主机请求仅包含命令信息
void send_byte(uchar da); // 该函数发送⼀帧数据中的⼀个字节,由send_data()函数调⽤
void main() {
uchar type; uchar len;
/* 系统初始化 */
P1 = 0xff; // 读取本机设备号
asl是什么意思dev = (P1》》2);
TMOD = 0x20; // 定时器T1使⽤⼯作⽅式2
TH1 = 250; // 设置初值
TL1 = 250;
TR1 = 1; // 开始计时
PCON = 0x80; // SMOD = 1
SCON = 0x50; // ⼯作⽅式1,波特率9600bps,允许接收
长城历史ES = 0; // 关闭串⼝中断
IT0 = 0; // 外部中断0使⽤电平触发模式 EX0 = 1; // 开启外部中断0 EA = 1; // 开启中断
顶级厨师/* 主程序流程 */
while(1) // 主循环 {
if(recv_cmd(&type) == 0) // 发⽣帧错误或帧地址与本机地址不符,丢弃当前帧后返回
大湾区conTInue; switch(type) {
case __ACTIVE_: // 主机询问从机是否存在
send_data(__OK_, 0, dbuf); // 发送应答信息,这⾥buf的内容并未⽤到
break;
case __GETDATA_: len = strlen(dbuf);
send_data(__STATUS_, len, dbuf); // 发送设备状态信息
break; default:
break; // 命令类型错误,丢弃当前帧后返回
}
}
}
void READSTATUS() interrupt 0 using 1 // 产⽣外部中断0时表⽰设备状态发⽣改变,该函数使⽤寄存器组1 {胡冰卿杨洋>电脑不出声音怎么办
get_status(); // 获得设备状态信息,并将其存⼊dbuf指向的存储区,数据最后⼀字节置0表⽰数据结束
}
/* 该函数接收⼀帧数据并进⾏检测,⽆论该帧是否错误,函数均会返回 * 函数参数type保存接收到的命令字
* 当接收到数据帧错误或其地址位不为0时(⾮主机发送帧),函数返回0,反之返回1 */
bit recv_cmd(uchar *type) {
bit db = 0; // 当接收到的上⼀个字节为0xdb时,该位置位bit c0 = 0; // 当接收到的上⼀个字节为0xc0时,该位置位uchar data_buf[__ERRLEN]; // 保存接收到的帧

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。