wuzhengmin 发表于 2026-1-22 22:53:24

这明摆说我们读手册和试验箱使用说明书,

理解的都对,RXD2_2和TXD2_2 都找对了

不过STC是直接位操作 :

S2_S= 1;         //UART2 switch to: 0: P1.2 P1.3,1: P4.2 P4.3

反正都是P42P43

今天其实有点乱,刚买的STC link1D 到货,碰巧用积分换的“一箭双雕”也到货

加上前天开始学习陈老师的UART2 硬件仿真,所以不好确定是软件问题还是硬件问题!

那么现在确定了是软件问题,其实也不太好处理,因为陈老师的程序是STC8H8k64U的

我不能直接用在STC32位的Ai8051U 试验箱上.....

wuzhengmin 发表于 2026-1-22 22:57:29

所以这个试验箱的仿真,只能暂时搁置!

这样第19集的实验,就不是很完美,只能看陈老师做

1 先把试验箱做成仿真芯片:




wuzhengmin 发表于 2026-1-22 23:04:41

设置好断点,可以清晰的看到发送的过程:

wuzhengmin 发表于 2026-1-22 23:09:36

接下来就是开始陈桂友教授教学视频十九集串口通信时梁工补充:ModBus从入门到实战

wuzhengmin 发表于 2026-1-22 23:15:33

79年开始用这个协议;

wuzhengmin 发表于 2026-1-23 17:34:30

教学视频 ModBus从入门到实战

RTU 模式:
控制器以RTU模式在Modbus总线上进行通讯时,信息中的数据按十六进制传输,该模式的主要优点是在相同波特率下其传输的字符的密度高于ASCI模式,每个信息必须连续传输。.
RTU 模式中每个字节的格式:编码系统:所有数据均为十六进制。
数据位:1 起始位.8 位数据,低位先送.
奇/偶校验:有奇/偶校验时占 1 位;无奇偶校验时不发送。(项目中一般都是无校验)。
停止位:有奇/偶校验则用1位停止位;无奇/偶校验则用2位停止位。(项目中一般使用1个停止位)。.
校验域:循环冗余校验(CRC16)


结束符:3.5个字符(字节)时间空闲。.
RTU 帧:
RTU模式中,信息开始至少需要有3.5个字符的静止(空闲)时间(或者主机发送一帧结束后至少要间隔3.5个字符的时间才发送下一帧),依据使用的波特率,很容易计算这个静止(空闲)的时间。.
下面用实际的命令来说明,命令中所有数据均为十六进制。整个信息必须连续发送,如果在发送帧信息期间出现大于1.5个字符的静止时间时,则接收设备有可能丢弃不完整的信息。.

wuzhengmin 发表于 2026-1-23 17:42:23


写多寄存器:

wuzhengmin 发表于 2026-1-23 18:44:52

偏移0:此字节为从机设备地址,用于指定本次接收处理的从机地址,取值为0x00-0xff。从机设备地址是唯一的,同一条总线上不能有相同地址的连个从机。
一般 0x00 用于广播(比如发送同步帧),从机不返回信息。上例从机设备地址为0x01。.
偏移 1:此字节为功能码,表明本次命令的操作功能,这个可以查询 MODBUS 支持的各种功能,实际项目一般用其中的一部分工嗯呢码,上例的功能码0x10就是“写多寄存器”。.
偏移 2:此 2 字节为要写入的寄存器首地址 0x0100,MODBUS 协议对数据的都是基于寄存器访问的,每个寄存器2个字节(一个WORD)。高字节在前,低字节在后。.
偏移 4:此 2 字节为要写入的寄存器个数,0x0008 表示要写入 8 个寄存器。.
偏移 6:此字节为要写入的字节数,0x10 表示要写入 16 个字节(8 个寄存器)。

偏移7:此16个字节为要写入的数据。.
·最后两个字节:CRC16校验值0x12CE,低字节在前,高字节在后(算法与电脑通用,小端模式)。.

wuzhengmin 发表于 2026-1-23 18:54:58

各个从机接收到信息后,有多种方式去判断是否是自己的数据,我一般习惯先校验,校验通过才做数据解析,然后做出应答。如果校验通过,从机地址正确,则本机一定要做应答(即使是错误的命令)。.

wuzhengmin 发表于 2026-1-28 13:05:17

实际上是一主多从:

接收到信息的从机必须应答
页: 76 77 78 79 80 81 82 83 84 85 [86] 87 88 89
查看完整版本: 有关DMA,山东大学陈桂友教授