当前位置:首页 > 物联网 > 网络协议
[导读] RS-485总线接口是一种常用的串口,具有网络连接方便、抗干扰性能好、传输距离远等优点。RS-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; // 读取本机设备号

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单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对51单片机的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 51单片机

工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。

关键字: Modbus 通讯协议 工业控制

在嵌入式系统开发中,单片机是不可或缺的重要组成部分。其中,STM32单片机和51单片机是两种常见的单片机芯片。本文将对比分析这两种单片机的区别,并探讨STM32单片机的优势。

关键字: stm32单片 51单片机

485通讯协议的特点有:RS-485的数据最高传输速率为10Mbps;RS-485接口强,即抗噪声干扰性好。

关键字: modbus 通讯协议 485通信

Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的一种工业控制总线协议,是全球第一个真正用于工业现场的总线协议。

关键字: Modbus 通讯协议 总线协议

51单片机是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了许多品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基...

关键字: 51单片机 串行通信

RS485是一种常见的通信接口标准,广泛应用于工业自动化、智能家居等领域。它采用差分信号传输方式,具有传输距离远、抗干扰能力强、数据传输速率高等特点。

关键字: rs485 RS232

51单片机是一种常见的微控制器,它具有串行通信接口(Serial Communication Interface,SCI)。通过串口通信接口,51单片机可以与其他设备或系统进行串行通信,实现数据传输和控制。

关键字: 51单片机 串口通信

Pic单片机和51单片机是两种应用广泛的微控制器,它们各自具有不同的特点和优势,选择哪种单片机取决于具体应用需求。下面将对Pic单片机和51单片机进行详细的介绍和对比。

关键字: PIC单片机 51单片机 单片机

随着电子信息技术的快速发展,串行通信在各种应用中得到了广泛的应用。其中,51单片机作为一种常见的嵌入式系统,具有低功耗、高性能、易于编程等特点,常用于各种自动化控制、数据采集等系统中。而PC机具有强大的数据处理能力和丰富...

关键字: 51单片机 PC机 串行通信
关闭
关闭