diff --git a/Drivers/rf.c b/Drivers/rf.c index 8587312..6b8eb94 100644 --- a/Drivers/rf.c +++ b/Drivers/rf.c @@ -295,7 +295,7 @@ bit EV1527_Decode(u32 *out_addr, u8 *out_data) Uart_SendHex16(T); Uart_SendString("us\r\n"); - // ====== 4. 自适应决策:组合成地址及数据位 ====== + // ====== 4. 自适应决策:组合成 24 位完整射频数据帧 ====== for (i = 0; i < 24; i++) { // 比较本位高低电平持续宽度: @@ -303,24 +303,20 @@ bit EV1527_Decode(u32 *out_addr, u8 *out_data) // 否则高电平短,判定为 0 (1T高+3T低)。 if (raw_h[i] > raw_l[i]) { - if (i < 20) addr = (addr << 1) | 1; // 高 20 位写入物理地址 - else dat = (dat << 1) | 1; // 低 4 位写入状态码 + addr = (addr << 1) | 1; // 写入 24 位物理地址与状态数据相结合的最终值 } else { - if (i < 20) addr = (addr << 1); - else dat = (dat << 1); + addr = (addr << 1); } } - *out_addr = addr; - *out_data = dat; + *out_addr = addr; // 输出包含状态数据的 24 位完整射频编码作为传感器唯一 ID + *out_data = (u8)(addr & 0x0F); // 输出低 4 位作为指令/状态,保持调用兼容性 // 串口打印解码最终结果 - Uart_SendString("Decoded ADDR: 0x"); - Uart_SendHex20(addr); - Uart_SendString(", DATA: 0x"); - Uart_SendHex4(dat); + Uart_SendString("Decoded 24bit ADDR: 0x"); + Uart_SendHex32(addr); Uart_SendString("\r\n"); return 1; // 成功解析