<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Embedded on 豆子技术站</title><link>https://blog.91demo.top/embedded/index.html</link><description>Recent content in Embedded on 豆子技术站</description><generator>Hugo -- 0.155.1</generator><language>zh-cn</language><lastBuildDate>Wed, 18 Mar 2026 08:05:33 +0000</lastBuildDate><atom:link href="https://blog.91demo.top/embedded/index.xml" rel="self" type="application/rss+xml"/><item><title>在51单片机实现 Modbus RTU 协议过程中的踩坑和思考</title><link>https://blog.91demo.top/embedded/sensemodbus.html</link><pubDate>Wed, 18 Mar 2026 08:05:33 +0000</pubDate><guid>https://blog.91demo.top/embedded/sensemodbus.html</guid><description>&lt;p&gt;在上篇原理文章介绍后，我开始实现代码，硬件使用现成的51开发板。原本以为只是简单的串口收发，结果却在 Modbus Poll 软件中疯狂循环 Checksum Error 和 Timeout。&lt;/p&gt;
&lt;p&gt;下面是我在普中科技 51 开发板上，使用STC89C52芯片接入工业标准的 Modbus RTU 协议，从最基础的串口打印到实现动态温度采集，并成功通过 Modbus 协议回传的完整过程。&lt;/p&gt;
&lt;h2 id="环境准备"&gt;环境准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;硬件： 普中 51-A2 开发板 (STC89C52RC)、DS18B20 温度传感器、USB 转串口线。&lt;/li&gt;
&lt;li&gt;软件： Keil uVision5、STC-ISP、Modbus Poll (主机仿真器)、SSCOM 串口调试助手。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="51开发板" loading="lazy" src="https://blog.91demo.top/images/embedded/51board.webp"&gt;&lt;/p&gt;
&lt;h2 id="核心挑战为什么-modbus-poll-总是报-checksum-error"&gt;核心挑战：为什么 Modbus Poll 总是报 Checksum Error？&lt;/h2&gt;
&lt;p&gt;这是我耗时最长的地方，也是我头疼的地方。如果你也遇到数据看着对但校验不过，请检查以下三点：&lt;/p&gt;
&lt;h3 id="查表法的陷阱"&gt;查表法的陷阱&lt;/h3&gt;
&lt;p&gt;因为51单片机的性能问题，我使用了查表法，CRC表中的数据是采摘网上教程的。在解决了之后，发现是自己设置的表中的数值不对。要知道Modbus 的 CRC16 校验非常严苛。为了方便以后的开发者，我把正确的CRC表和获取函数都贴出来。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 高位表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; code aucCRCHi[] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 低位表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; code aucCRCLo[] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x03&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x02&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC6&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x06&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x07&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x05&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC4&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x04&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0xCC&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x0C&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x0D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xCD&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x0F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xCF&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xCE&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x0E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x0A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xCA&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xCB&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x0B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x09&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x08&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xC8&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0xD8&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x18&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x19&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x1B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xDB&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xDA&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x1A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x1E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xDE&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xDF&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x1F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xDD&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x1D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x1C&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xDC&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x14&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD4&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x15&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x17&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x16&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD6&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x12&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x13&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x11&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xD0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x10&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0xF0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x30&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x31&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x33&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x32&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x36&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF6&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x37&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x35&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x34&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF4&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x3C&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xFC&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xFD&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x3D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xFF&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x3F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x3E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xFE&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xFA&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x3A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x3B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xFB&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x39&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xF8&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x38&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x28&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE8&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x29&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xEB&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x2B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x2A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xEA&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xEE&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x2E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x2F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xEF&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x2D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xED&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xEC&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x2C&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0xE4&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x24&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x25&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x27&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE6&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x26&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x22&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x23&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x21&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x20&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xE0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0xA0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x60&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x61&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x63&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x62&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x66&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA6&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x67&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x65&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x64&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA4&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x6C&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xAC&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xAD&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x6D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xAF&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x6F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x6E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xAE&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xAA&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x6A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x6B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xAB&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x69&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xA8&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x68&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x78&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB8&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB9&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x79&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xBB&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x7B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x7A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xBA&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xBE&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x7E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x7F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xBF&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x7D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xBD&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xBC&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x7C&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0xB4&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x74&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x75&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x77&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB7&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB6&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x76&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x72&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB3&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x73&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x71&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x70&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0xB0&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x50&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x90&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x91&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x51&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x93&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x53&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x52&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x92&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x96&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x56&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x57&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x97&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x55&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x95&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x94&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x54&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x9C&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x5C&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x5D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x9D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x5F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x9F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x9E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x5E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x5A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x9A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x9B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x5B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x99&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x59&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x58&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x98&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x88&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x48&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x49&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x89&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x4B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x8B&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x8A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x4A&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x4E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x8E&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x8F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x4F&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x8D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x4D&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x4C&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x8C&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;0x44&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x84&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x85&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x45&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x87&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x47&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x46&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x86&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x82&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x42&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x43&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x83&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x81&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x80&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 获取CRC
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GetCRC16&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;pData, &lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; len) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; uIndex;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; crch &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0xFF&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;char&lt;/span&gt; crcl &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0xFF&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; (len&lt;span style="color:#f92672"&gt;--&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; uIndex &lt;span style="color:#f92672"&gt;=&lt;/span&gt; crcl &lt;span style="color:#f92672"&gt;^&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;pData&lt;span style="color:#f92672"&gt;++&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; crcl &lt;span style="color:#f92672"&gt;=&lt;/span&gt; crch &lt;span style="color:#f92672"&gt;^&lt;/span&gt; aucCRCHi[uIndex];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; crch &lt;span style="color:#f92672"&gt;=&lt;/span&gt; aucCRCLo[uIndex];
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;unsigned&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;int&lt;/span&gt;)(crch &lt;span style="color:#f92672"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; crcl);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="字节序与-quantity-的对齐"&gt;字节序与 Quantity 的对齐&lt;/h3&gt;
&lt;p&gt;这里也是一个坑，自己概念不清，在设置quantity时设置错误，错把他们1比1进行换算。还有Modbus 规定 低字节在前，高字节在后。&lt;/p&gt;</description></item><item><title>自制可使用 Modbus 采集的 RS485 温度传感器（原理验证版）</title><link>https://blog.91demo.top/embedded/sensetemp.html</link><pubDate>Fri, 06 Mar 2026 20:05:33 +0000</pubDate><guid>https://blog.91demo.top/embedded/sensetemp.html</guid><description>&lt;p&gt;我将使用经典的 STC89C12 单片机作为核心，配合 DS18B20 数字温度传感器和 MAX485 通信芯片，构建一个支持标准 Modbus-RTU 协议的感知节点。&lt;/p&gt;
&lt;h2 id="一核心架构传感器大脑与传声筒"&gt;一、核心架构：传感器、大脑与传声筒&lt;/h2&gt;
&lt;p&gt;这个小模块的本质是一个“翻译官”。它把环境中的物理温度转化为数字信号，再按照工业标准协议通过长线传输给上位机（如 PLC 或电脑）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;感知单元 (DS18B20)： 不同于传统的模拟热敏电阻，它是数字传感器，直接输出 12 位精度的二进制温度数据。&lt;/li&gt;
&lt;li&gt;处理中心 (STC89C12)： 负责按照时序“读”传感器，并把数据存入内存，同时监听串口指令。&lt;/li&gt;
&lt;li&gt;通信接口 (MAX485)： 单片机的 TTL 信号传不远，MAX485 将其转换为差分信号，实现抗干扰的长距离传输。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="二硬件链路设计"&gt;二、硬件链路设计&lt;/h2&gt;
&lt;p&gt;为了简化电路并验证可行性，我们将引脚定义如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DS18B20 接口： 连接至 P1.0。由于 1-Wire 总线需要上拉电阻，我们在硬件上需确保 P1.0 与 VCC 之间有一个 4.7kΩ 的电阻，以维持空闲时的高电平。&lt;/li&gt;
&lt;li&gt;MAX485 控制：
&lt;ul&gt;
&lt;li&gt;UART 接口： RXD(P3.0) 接 RO，TXD(P3.1) 接 DI。&lt;/li&gt;
&lt;li&gt;收发切换 (RE/DE)： 连接至 P3.2。RS485 是半双工的，平时 P3.2 置低电平处于“听”模式；当需要回传数据时，将其置高切换为“说”模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;烧录接口： 仅预留 VCC、GND、TXD、RXD 四线接口，用于程序的迭代验证。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三技术实现思路"&gt;三、技术实现思路&lt;/h2&gt;
&lt;h3 id="a-如何采集-ds18b20"&gt;A. 如何采集 DS18B20？&lt;/h3&gt;
&lt;p&gt;STC89C12 通过 单总线 (1-Wire) 时序 与传感器对话。由于 STC89C12 速度较慢且不支持硬件单总线，我们需要通过精准的软件延时来模拟时序：&lt;/p&gt;</description></item><item><title>从“半夜巡栏”到“智能换气”：我把黑盒搬进了猪舍</title><link>https://blog.91demo.top/embedded/pigsty.html</link><pubDate>Fri, 27 Feb 2026 18:00:00 +0800</pubDate><guid>https://blog.91demo.top/embedded/pigsty.html</guid><description>&lt;h2 id="一-那件披在身上的大衣"&gt;一、 那件披在身上的大衣&lt;/h2&gt;
&lt;p&gt;老家人养猪，冬天的半夜，都要披上厚重的大衣，去猪舍看产床温度。猪舍的墙上挂了一个水银温度计。温度低了猪仔会冻死，温度高了会脱水。氨气重了会生病，感觉味道重了，需要手动打开抽风机。这种“靠人巡、靠鼻闻、靠经验”的原始模式，不仅累，而且风险极高。&lt;/p&gt;
&lt;p&gt;供暖烧煤炉，煤炉需要半夜起来加煤，人困得不行；母猪还得使用电热板，电热板是那种电阻丝加热的，没有温控计，只能隔几个小时去关掉，等温度降下去再打开。说到底，还是得靠人去“看着”。&lt;/p&gt;
&lt;p&gt;我想，能不能用技术，把家人从这种重复、枯燥且充满风险的体力劳动中解放出来一点点？不用花太多钱，因为他们会心疼。&lt;/p&gt;
&lt;h2 id="二-攻坚方案黑盒的温控逻辑"&gt;二、 攻坚方案：黑盒的温控逻辑&lt;/h2&gt;
&lt;p&gt;可以看到面临的主要是“环境失控风险”。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;温度控制的极端性：依靠烧煤和简易电热板，温度分布不均。半夜人工起夜不仅辛苦，且这种“大跨度”的温差变化会导致猪仔腹泻甚至死亡。&lt;/li&gt;
&lt;li&gt;空气质量的隐形威胁：氨气超标是诱发呼吸道疾病的主因。仅靠“鼻闻”时，空气质量往往已经恶化到危及健康的程度。&lt;/li&gt;
&lt;li&gt;利润被风险蚕食：养猪大头是料钱和药钱，但成活率才是利润的底线。一次深夜的失误，可能让数月的辛苦付诸东流。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;能马上想到的临时解决方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;恒温自动化（解决“半夜加煤”与“手动插拔”）&lt;br&gt;
温控传感器方案：购买带有探头的温控开关，将电热板连接到温控插座上。&lt;br&gt;
效果：设定好区间（如32-35度），温度低了自动通电，够了自动断电。不仅省去了人工看管，还能通过减少无效耗电抵消设备成本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;环境预警系统（解决“鼻闻”与“风险”）&lt;br&gt;
智能监控终端：安装一个集成了温湿度监控与氨气检测的智能传感器，通过 Wi-Fi 或 4G 信号连接手机。&lt;br&gt;
效果：当温度异常或氨气浓度过高时，手机会自动发出警报铃声提醒，避免了老人家整晚不敢闭眼的焦虑。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;联动抽风（解决“呼吸道疾病”）&lt;br&gt;
自动排风系统：将原有的抽风机改装为智能联动。&lt;br&gt;
效果：当氨气传感器感应到超标，自动开启抽风机，达标后关闭。这能精准减少热量流失，同时保证猪舍空气清新。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="核心硬件选择务实与成本的平衡"&gt;核心硬件选择：务实与成本的平衡&lt;/h3&gt;
&lt;p&gt;因为猪舍现场环境非常恶劣，湿度，氨气，粉尘等因素，温控开关坏的频率非常高，如果接到料房，又采集不了温度。购买氨气专业设备成本又非常高。现场可以根据温度和通风进行解决，但在冬季，保暖是另一个问题。实际考量后，还是自己动手做比较划算。零部件能够直接买并满足现场需求的，直接购买，满足不了，自己动手制作，需要防腐蚀处理：焊接完成后，用酒精清洗焊渣，然后必须喷涂“三防漆”。外壳选用 IP65 防水接线盒，进线口使用电缆防水密封接头 (PG7)，否则氨气会从缝隙钻进去。线路外层加PVC管，防鼠咬，腐蚀，机械损伤。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;传感器：水银温度计不行，无法采集。工业级的 RS485 温湿度传感器太贵（动辄上百元），购买不锈钢封装好的民用级的DS18B20数字温度传感器，焊接后要密封好，挂在猪舍合适的位置。它通过一根单总线连接，协议简单，成本极低。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;主控：具备 NB-IoT 通信功能的物联网核心板或者采用分布式架构，先接一个STM32控制黑盒，然后再连接物联网黑盒，它集成了主控芯片和 NB-IoT 模块，可以直接连接运营商网络。它负责读取传感器、执行逻辑、控制输出，并具备联网能力。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通信：猪舍没有Wi-Fi，即使有WiFi，也推荐使用RS485线连接，考虑如下：稳定性以及长期收益。布线不方便的地方，可以使用4G或者NBIot模块，用一张物联网卡，可以直接走运营商的网络上传数据，无需在猪舍和住房之间拉网线，年流量费仅需十几元。这是实现“无线化”的关键，需要注意的是，如果在猪舍内加装铁盒，需要接外接天线，防止信号屏蔽。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;报警：前期控制投入，不用手机流量卡和云平台。购买一个433MHz无线门铃，使用黑盒驱动，黑盒使用IP65 防水塑料接线盒，把发射模块接在主控板上。当需要报警时，主控板模拟按下门铃按钮，屋里就会“叮咚”响。这是最直接、最可靠的本地告警。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第一阶段从定时巡到听铃响"&gt;第一阶段：从“定时巡”到“听铃响”&lt;/h3&gt;
&lt;p&gt;目标：解决“夜间需要频繁固定间隔的去猪舍”的核心痛点，将人工巡检间隔时间拉长到“只在有异常时响应”。&lt;/p&gt;
&lt;h4 id="系统架构与原理"&gt;系统架构与原理：&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;感知：主控板 不断读取 DS18B20 的温度值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;决策：我在主控板的固件里写死一段简单的判断逻辑（例如：if (温度 &amp;lt; 18度 或 温度 &amp;gt; 28度)）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;执行：一旦条件满足，主控板 立即驱动 GPIO 引脚，向 433MHz 发射模块发送一个高电平脉冲信号。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;告警：433MHz 信号被屋里的门铃接收器捕获，触发响铃。屋里的人听到铃声，就知道猪舍温度异常，需要去查看。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="可执行性与落地关键"&gt;可执行性与落地关键：&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;硬件连接：仅需将 DS18B20 的数据脚、电源、地线接到主控板对应引脚；将 433MHz 发射模块的信号脚接到另一个 GPIO 引脚。接线简单，无需复杂电路。&lt;/p&gt;</description></item><item><title>水表、电表、热表：一个“黑盒”如何撬动千亿级存量市场中的利旧改造细分蓝海</title><link>https://blog.91demo.top/embedded/watermeter.html</link><pubDate>Thu, 26 Feb 2026 18:00:00 +0800</pubDate><guid>https://blog.91demo.top/embedded/watermeter.html</guid><description>&lt;h2 id="一-场景从插卡洗澡到手机充值的断层"&gt;一、 场景：从“插卡洗澡”到“手机充值”的断层&lt;/h2&gt;
&lt;p&gt;“洗澡洗一半，卡里没钱了，得湿着身子跑下楼去圈存机充钱。”——这是十年前大学宿舍的常态。&lt;/p&gt;
&lt;p&gt;我参与过那个“刷卡时代”的项目。彼时，每个宿舍楼都有一个弱电井，里面几十个水表通过RS-485总线串联。学生用M1卡洗澡，钱存在卡里，水表是“单机版”。宿管中心不知道哪个宿舍快没水了，只能被动等待报修。&lt;/p&gt;
&lt;p&gt;核心痛点：用户需要手机充值的便捷，但海量的老式水表（及电表、热表）是“数字孤岛”，只有RS-485接口，不具备任何联网能力。整体更换为物联网表成本极高，且施工影响巨大。&lt;/p&gt;
&lt;h2 id="二-方案一个黑盒唤醒沉默的数据"&gt;二、 方案：一个“黑盒”，唤醒沉默的数据&lt;/h2&gt;
&lt;p&gt;我们的方案是添加一个 “黑盒”——一个协议转换网关。它的逻辑很简单：不换表，不改线，只做“翻译官”。&lt;/p&gt;
&lt;p&gt;物理部署：在弱电井的485总线汇接处，并联接入“黑盒”。原有的刷卡系统完全保留，作为保底。&lt;/p&gt;
&lt;h3 id="核心工作"&gt;核心工作：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;采集：黑盒内置高性能Modbus协议栈，主动轮询总线上所有水表，读取余额、用量。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;转换：将不同品牌、不同协议的水表数据，统一“翻译”成标准的JSON格式。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;上传：通过4G或网线，将数据通过MQTT协议上传至云平台。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="手机充值闭环"&gt;手机充值闭环：&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;学生在小程序支付。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;云端将“为XX房号充值XX元”的指令下发给对应黑盒。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;关键一步：黑盒将指令“反向翻译”成目标水表能识别的、符合其私有协议的485报文，完成“写卡”操作。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;系统确认后，充值到账。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="三-定位在巨头缝隙中做数字化的梯子"&gt;三、 定位：在巨头缝隙中，做“数字化的梯子”&lt;/h2&gt;
&lt;p&gt;我深知，国家级、城市级的智慧水务/能源项目，是头部玩家的“铁桶阵”，他们依靠专用网络、5G和强大的工程能力构建壁垒。&lt;/p&gt;
&lt;p&gt;“黑盒”的目标，是那片被忽略的“长尾市场”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;还未改造的高校宿舍、企业公寓、公租房保留的水表。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;城中村的个体房东，管理几栋到十几栋楼房。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;中小工厂的宿舍楼。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对他们而言，动辄数十万的整体改造方案是不可承受之重。而一个单价数百元、即插即用、半天可部署、不动原有设施的“黑盒”，是他们迈入数字化管理的唯一可行阶梯。&lt;/p&gt;
&lt;h2 id="四-挑战与壁垒并非即插即用的童话"&gt;四、 挑战与壁垒：并非“即插即用”的童话&lt;/h2&gt;
&lt;p&gt;这个方案在逻辑上自洽，但真实的商业落地远非易事，存在多重壁垒：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;工程实施壁垒：“不换表”不等于“零施工”。将黑盒接入弱电井，需要开井、找线、破接、取电、固定，这本身就有一定的技术门槛和安全风险，并非普通用户能独立完成。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;协议适配壁垒：水、电、热表协议各异，且大量是厂家私有加密协议。适配、测试每个新协议，都意味着高昂的研发和现场调试成本。这绝非一个“通用字典”就能轻松解决。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;性能与稳定性壁垒：RS-485总线是半双工，挂载几十块表后，轮询周期会拉长，数据实时性下降。网络波动、设备干扰可能导致指令执行失败，需要设计复杂的重试、容错和事务一致性机制。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;渠道与商务壁垒：如何触达并说服高校后勤、房东这些分散的客户？如何提供及时可靠的现场支持？这比技术开发更难。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="五-思考技术应俯身解决真问题"&gt;五、 思考：技术应俯身解决真问题&lt;/h2&gt;
&lt;p&gt;从弱电井里满是灰尘的RS-485总线，到云端的MQTT消息；从易丢失的实体卡，到手机里的数字账户。&lt;/p&gt;
&lt;p&gt;“黑盒”的价值，不在于它用了多炫的技术，而在于它用极低的成本，为一个真实、广泛但被忽视的需求，提供了一个可行的解决方案。&lt;/p&gt;
&lt;p&gt;它像一根“数字化的梯子”，让那些无力承担“电梯”费用的用户，也能攀上智能管理的台阶。&lt;/p&gt;
&lt;p&gt;这背后，是对现场通信“脾气”（干扰、雷击、协议冲突）的深刻理解，更是对用户“简单、可靠、别添乱”这一终极诉求的敬畏。&lt;/p&gt;
&lt;p&gt;当巨头们仰望星空，构建未来时，总需要一些人，愿意为角落里那些“老旧笨重”的设备，插上一双通往现代的翅膀。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这条路充满挑战，但正因如此，每一步才都踏在真实的需求之上。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="后记与邀请"&gt;后记与邀请&lt;/h2&gt;
&lt;p&gt;如果你正在寻找低成本的老旧设备数字化方案，欢迎交流。关于“黑盒”项目的固件核心进展、协议文档与配置字典，我将在爱发电&lt;a href="https://afdian.com/a/modujson"&gt;https://afdian.com/a/modujson&lt;/a&gt;​ 持续同步与更新。&lt;/p&gt;</description></item><item><title>从粮仓 RS485 总线到云端 JSON：一个前实施工程师的数字化反思</title><link>https://blog.91demo.top/embedded/granary.html</link><pubDate>Wed, 25 Feb 2026 18:00:00 +0800</pubDate><guid>https://blog.91demo.top/embedded/granary.html</guid><description>记录一段从工业现场布线到云端协议设计的实战经历，反思物联网落地中的协议选择、稳定性保障与系统架构思维。</description></item><item><title>Modbus转MQTT网关固件研发与共创计划</title><link>https://blog.91demo.top/embedded/modujson.html</link><pubDate>Tue, 24 Feb 2026 18:00:00 +0800</pubDate><guid>https://blog.91demo.top/embedded/modujson.html</guid><description>记录自研 Modbus-RTU 转 MQTT 网关固件的全过程，探讨工业总线协议与云端交互的架构设计及共创思路。</description></item><item><title>ESP8266 工业级配网实战：基于 SoftAP 的可靠 WIFI 动态配置方案</title><link>https://blog.91demo.top/embedded/esp-conf.html</link><pubDate>Thu, 02 Jan 2025 12:40:16 +0800</pubDate><guid>https://blog.91demo.top/embedded/esp-conf.html</guid><description>记录如何在ESP8266/ESP32芯片上配置路由器的WIFI账号和密码，包含了嵌入式代码和小程序代码。</description></item></channel></rss>