蜂鸟无线 FNRF · 开发参考资料

微-R8 51 单片机
串口接收例程使用说明

V1.0 · 2026-11-09 · STC89C52RC / Keil C51

本例演示微-R8 UART 数据接收、和校验、20 位地址与 4 位键值拆分,并用四个 LED 显示最近一次有效键值。程序包含串口及定时器初始化,无需另写 UART 驱动。

固定条件:STC89C52RC、实际晶振 11.0592 MHz、12T 模式、5 V 供电、9600 bit/s、8N1。更换晶振或使用 6T/1T 单片机时,须重算参数。工程独占 UART、Timer0、Timer1 和 P1,首次使用请建立独立工程。

1 准备与接线

准备带晶振、复位和电源电路的 STC89C52RC 最小系统板、微-R8 模块、匹配频点的 1527 遥控器,以及低电平点亮的 LED。裸芯片需另接完整的最小系统电路,开发板仅插电不能替代正确烧录。

R8 引脚连接说明
VCC与单片机共用 5 V本例统一供电;R8 允许供电范围为 2.6~5.5 V。模块电源旁就近放置 0.1 μF 去耦电容。
GND单片机 GND模块、主控及测试工具必须共地。
DATP3.0 / RXDR8 为发送端,单片机为接收端;两处 DAT 焊盘选择一处即可。
M0GND上电前接低,选择 UART 模式;禁止接高电平。改变连接后重新上电。
CS0GND首次调试选全速接收,便于验证。调通后可按规格书选择低功耗档。
CS1悬空本例全速档的固定接法。
ANT匹配频点的天线遥控器与接收模块频点须一致。

显示端使用 P1.0~P1.3,各接一个低电平点亮的 LED。有对应 LED 的开发板可使用板载电路;自行接线时,每路按以下顺序连接:

5 V ── 1 kΩ电阻 ── LED正极
                     LED负极 ── P1.0(或P1.1 / P1.2 / P1.3)

四路 LED 的电阻各自独立。若开发板 LED 接在其他端口或高电平点亮,应先调整接线或显示代码;不要将 P1 直接连接继电器、电机等负载。

2 打开工程、编译与下载

  1. 将整个 ZIP 解压到本机,例如 C:\FNRF_R8_51_Demo_V1.0。不要直接在压缩包内打开工程。
  2. 安装含 C51 编译器的 Keil µVision。只安装 MDK-ARM 无法编译此工程。双击 Keil\R8_51_Demo.uvproj。
  3. 工程以 AT89C52作为通用编译目标,使用 REG52.H;实物仍为 STC89C52RC。Target 中的 Xtal 为 11.0592 MHz,但此设置不会改变板上晶振,也不会替代下载软件中的 12T 设置。
  4. 执行 Rebuild all target files。确认 0 Error、0 Warning 后,使用新生成的 Keil\Objects\R8_51_Demo.hex。HEX 是程序烧录文件;TestFrames 中的 BIN 仅用于串口测试。
  5. 先断开 R8 DAT 与 P3.0。使用 STC 下载工具,按实物选择 STC89C52RC,设置为 12T,并按下载器要求完成断电、上电下载。工程的 AT89C52 编译配置不代表应按 AT89C52 烧录。
  6. 下载结束后,断开下载器 TXD 与 P3.0,再进行下一节 TTL 测试或接回 R8。禁止将下载器 TXD 与 R8 DAT 同时接到 P3.0。

工程使用 Keil 安装附带的默认 C51 启动库,不需要单独添加 STARTUP.A51。本包不附编译器、下载软件及预编译 HEX。

3 先验证程序,再接入无线模块

3.1 TTL 串口测试

保持 R8 DAT 断开,使用与单片机输入电平兼容的 TTL 串口工具:TXD 接 P3.0,GND 共地。串口助手设置为 9600、8 数据位、无校验、1 停止位,选择 HEX / 十六进制发送。无需连接工具 RXD,本例不回传串口文本。

每次整帧发送,不设置逐字节延时。依次发送下列数据;也可使用 TestFrames 文件夹中的对应 5 字节 BIN 文件,工具须支持按原始二进制发送。

顺序HEX 帧键值预期显示
1FF 84 60 71 550x1仅 P1.0 对应 LED 亮
2FF 84 60 72 560x2仅 P1.1 对应 LED 亮
3FF 84 60 74 580x4仅 P1.2 对应 LED 亮
4FF 84 60 78 5C0x8仅 P1.3 对应 LED 亮
5FF 84 60 71 54校验错误保持上一步显示

还可先发送 FF 01,等待至少 100 ms,再发送完整第 1 帧;程序应正常接收第 1 帧,验证超时后旧半帧已丢弃。相同有效帧连续发送时,LED 保持对应显示,不反复翻转。

3.2 无线接收测试

  1. 断电,移除 TTL 工具 TXD;按第 1 节接回 R8 DAT,并核对 M0、CS0、CS1。
  2. 重新上电,用匹配频点的 1527 遥控器发射;脉宽应处于 R8 串口解码支持范围。
  3. 观察四个 LED 显示。实际遥控器地址和按键编码由发射端决定,不一定与测试帧相同。
正常现象:LED 显示最近一次有效键值,松键后保持显示;本例未加入松键判断或自动熄灯。四个 LED 按二进制显示键值,键值 0x3 时 P1.0、P1.1 均亮。LED 亮只表示接收到了可显示的有效键值,键值 0 时四灯均灭。

4 程序与协议说明

协议为五个原始字节:FF D0 D1 D2 SUM。校验值为 (D0 + D1 + D2) & 0xFF,帧头不参与。示例帧 FF 84 60 71 55对应地址 0x84607、键值 0x1。

对象作用
R8_Init()初始化显示端口、串口和定时器;上电调用一次。
UART_ISR()接收原始字节、检查五字节帧、校验并拆分数据。
Timer0_ISR()约 20 ms 未收到下一字节时,清空半帧。
R8_Address最近一次有效帧的 20 位地址。主循环使用时,应临时关闭中断复制到局部变量,再恢复中断状态,避免读取途中被更新。
R8_Key最近一次有效帧的低 4 位键值,主循环据此显示 LED。

Timer1 在 11.0592 MHz、12T、SMOD=0 时设置 TH1=TL1=0xFD,产生 9600 bit/s。Timer0 的 20 ms 重装值为 0xB800;该超时是本例参考设置,应按实际帧内字节间隔验证,不能与 100~300 ms 的帧输出间隔混用。

代码不自动去重,也不提供遥控器学习、地址过滤或业务授权。正式应用应匹配允许的遥控器地址及键值;累加和不具备身份认证或防重放功能。接入现有产品工程时,应处理定时器、中断和 P1 资源冲突,避免长时间关中断或在串口中断中延时。

5 常见问题

现象优先检查
提示找不到 C51 或 REG52.H确认安装 Keil C51,未误用仅含 ARM 编译器的环境;检查 C51 工具链路径。
编译成功但串口测试无响应检查实际晶振、12T、9600/8N1、HEX发送、P3.0接线和共地;先断开 R8 DAT,避免驱动冲突。
TTL 测试正常,无线测试无响应检查 M0 是否上电前接低、DAT是否接回、CS0接低/CS1悬空、供电及天线,并核对频点和1527编码时序。
显示的灯与说明相反确认 LED 是否低电平点亮,以及是否接在 P1.0~P1.3;高电平点亮的开发板需调整显示逻辑。
松开按键后灯仍亮属于预期行为;本例保持最近一次有效键值。若需松键熄灭,应在业务层另加超时逻辑。
程序下载失败先断开 R8 DAT;核对下载器、芯片型号、下载接线和断电上电时序。下载软件中的运行模式选12T。

6 文件与验证范围

Keil\main.c采用 GBK 编码以适配常见 Windows C51 环境;其他编辑器请按 GBK 打开。说明页采用 UTF-8,浏览器可离线阅读。SHA256SUMS.txt用于核对文件内容完整性。

参考例程已通过主机侧接收逻辑、超时及测试帧检查。Keil C51 目标编译与实物联调尚待验证,交付包不附预编译 HEX;请在目标工具链编译并按第 3 节完成板级验证。

工具资料:Keil C51 启动代码说明;C51 默认运行库说明。阅读本说明与运行例程不依赖访问上述网站。