电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

51单片机实现RS485

51单片机实现RS485_第1页
1/23
51单片机实现RS485_第2页
2/23
51单片机实现RS485_第3页
3/23
51 单片机实现的485 通讯程序 #ifndef __485_C__ #define __485_C__ #include #include #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; // 读取本机设备号 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、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

51单片机实现RS485

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部