基于51单片机的Modbus通讯代码示例

基于51单片机的Modbus通讯代码示例缩略图

以下是基于51单片机的Modbus通讯代码示例,代码中使用了Keil C编译器和STC89C52单片机:

基于51单片机的Modbus通讯代码示例概述

#include <reg52.h>

#define SlaveAddress 1      // 从机地址
#define FunctionCode 3      // 功能码
#define RegisterAddress 0   // 寄存器地址
#define RegisterLength 1    // 寄存器长度

sbit RS485_EN = P2^7;       // RS485芯片使能控制引脚

void delay(unsigned int i)  // 延时函数
{
    while(i--);
}

void UART_Init()            // 串口初始化函数
{
    SCON = 0x50;
    TMOD = 0x20;
    TH1 = 0xFD;
    TL1 = 0xFD;
    TR1 = 1;
}

void SendByte(unsigned char dat)  // 发送一个字节
{
    SBUF = dat;
    while(TI == 0);
    TI = 0;
}

void SendPacket(unsigned char address, unsigned char function, unsigned char* pData, unsigned char length) // 发送数据包
{
    unsigned char i, crcHi, crcLo;
    crcHi = 0xFF;
    crcLo = 0xFF;
    SendByte(0xFF);
    SendByte(0xFF);
    SendByte(address);
    SendByte(function);
    SendByte(RegisterAddress / 256);
    SendByte(RegisterAddress % 256);
    SendByte(RegisterLength / 256);
    SendByte(RegisterLength % 256);
    for(i = 0; i < length; i++)
    {
        SendByte(pData[i]);
        crcHi ^= pData[i];
        for(j = 0; j < 8; j++)
        {
            if(crcHi & 0x01)
            {
                crcHi >>= 1;
                crcHi ^= 0xA0;
            }
            else
            {
                crcHi >>= 1;
            }
        }
    }
    SendByte(crcHi);
    SendByte(crcLo);
}

void Modbus() // Modbus主函数
{
    unsigned char data[2] = {0, 0};
    SendPacket(SlaveAddress, FunctionCode, data, RegisterLength);
}

void main()
{
    UART_Init();
    while(1)
    {
        RS485_EN = 0;
        delay(1000);
        Modbus();
        delay(1000);
        RS485_EN = 1;
        delay(1000);
    }
}

注:该代码仅为示例,仅供参考,具体实现需要根据实际需求进行调整。

技术术语(共 4 个)—— 点击展开
RS485工业常用的差分串行通信标准,支持多点通信
功能码Modbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
串口计算机与外部设备进行串行通信的物理接口
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 Modbus编程开发 字数 1154 字 · 阅读约 3 分钟 更新 2023-02-11 永久链接 https://www.modbus.cn/ji-yu-51-dan-pian-ji-de-modbus-tong-xun-dai-ma-shi-li/
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

VIP会员专享

解锁全部Modbus技术资源

5169+工程师已加入VIP,享受无限制工具使用、专属技术文章、优先技术支持等权益

✓ 高级工具无限制使用
✓ VIP专属技术文章+视频教程
✓ 下载资源无限制
✓ 优先工单技术支持
了解VIP权益 低至¥0.3/天 | 支持微信/支付宝 | 随时取消

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

voidSendByte(un