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; // 读取本机设备号

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]; // 保存接收到的帧

51单片机c语言485通讯案例,485通讯协议程序怎么写(51单片机的485通信程序案例)...相关推荐

  1. 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt

    单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...

  2. 51单片机c语言电子钟(已加入调时 '整点报时功能1),51单片机c语言电子钟(已加入调时、闹铃、整点报时功能1)万年历2...

    51单片机c语言电子钟(已加入调时.闹铃.整点报时功能1)万年历2 51单片机c语言电子钟(已加入调时.闹铃.整点报时功能1)万年历1 ·一个固定数组 ·时钟,秒表,日历,闹钟 */ #include ...

  3. 单片机c语言1ms 2ms 4ms方波,第4章 7~10节 单片机C语言.ppt

    第4章 7~10节 单片机C语言 4.7 函 数;4.7.2函数的定义无参函数的定义: 返回值类型 函数名 ( ) {函数体语句} 如果函数没有返回值,可以将返回值类型设为void 函数以&qu ...

  4. 手把手教你学51单片机-c语言版期末考试,手把手从零教你学51单片机

    课程简介: 51单片机的教程及开发板真的很多,我曾经也从零学单片机,看过的视频教程及玩过的开发板也比较多,但很多都是为了卖发板而做视频教程.从头到尾的就每个模块做些例子,或者就送些例子,而例子中所涉及 ...

  5. 0809连接单片机c语言,adc0809引脚图及功能详解,adc0809与51单片机连接电路分析

    描述 adc0809是采样频率为8位的.以逐次逼近原理进行模-数转换的器件.其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换. 1.主要特性 ...

  6. 51单片机c语言16进制数转换10进制数,51单片机C语言里 怎样将16进制 直接化成 10进制...

    满意答案 xzwyq 2013.10.13 采纳率:44%    等级:12 已帮助:16962人 我这儿有一个进制转换的程序,你可以参考一下: #include #include #include ...

  7. 单片机光敏电阻c语言程序怎么写,STC12C5A60S2 单片机,光敏电阻,步进电机,制作寻光器,始终指向光源...

    光纤传感专业的我转行做了嵌入式软件,可是心系光学专业啊.下班回来发现个 stc 的 51 单片机最小系统,是我之前做的,好久没碰了.正好手边有两个光敏电阻,结合着步进电机,琢磨着做一个寻光器玩玩,让箭 ...

  8. c语言看门狗的作用,51单片机 c语言看门狗程序怎么写

    51单片机 c语言看门狗程序怎么写 51单片机 c语言看门狗程序怎么写 看门狗在51单片机电路里的作用是防止程序 "跑飞"."死机"后,系统不动作,而采取复位的 ...

  9. 单片机c语言程序设计中可以不分大小写,单片机考试复习题及答案

    选择题 1.主频为12MHz的单片机他的机器周期为(c). A.1/12微秒 B.0.5微秒 C.1微秒 D.2微秒 2.MCS-51系列单片机是属于(C)体系结构. A.冯诺依曼 B.普林斯顿 C. ...

  10. c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

    原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...

最新文章

  1. android如何查看方法属于哪个类,Android Studio查看类中所有方法和属性
  2. 【mybatis】插入操作更新id
  3. 最新Angular2案例rebirth开源
  4. CodeForces - 617E XOR and Favorite Number(莫队)
  5. JAVA中整数类型数据溢出问题研究
  6. Python+pandas时间序列对象常用操作
  7. Spring mvc 组件
  8. pencv candy边缘检测
  9. java正则表达式 后顾,正则表达式:从Copy到手写
  10. 一名靠谱的JavaScript程序员应备的素质
  11. gpu内存大小 android,Android性能测试(内存、cpu、fps、流量、GPU、电量)——adb篇...
  12. c:\windows\ ntdetect failed
  13. 狗狗自带餐具能有多可爱
  14. 4G(LTE)背后的技术和利益纠结——VoIP,VoLTE,SIP,IMS的前世今生
  15. 汉字拼音的一个解决方法(初具使用价值)
  16. labelme标记数据后,批量处理json文件,生成标签
  17. Windows10指纹识别设置
  18. Sql Server REPLACE函数的使用;SQL中 patindex函数的用法
  19. 如果只能从市面上的Python入门书中选择一本送给你,那我一定会选这本……
  20. 公司用户画像项目总结

热门文章

  1. 红米k40在什么地方取消HD(教程分享)
  2. MEION:QAM编解码判决方法
  3. Pyecharts sankey桑葚图如何修改颜色
  4. 医院住院管理系统(Java+Web+JSP+MySQL)
  5. 二次回路图都懂了吗?3分钟帮你搞清楚!
  6. 专题---自定义实体类
  7. ChatGPT的N种用法(持续更新中。。。)
  8. cdsn博客使用超链接
  9. 折戟IPO,Soul遭遇了什么?
  10. 通过JAVA实现OTP验证-下