微-R8 51 单片机
串口接收例程使用说明
本例演示微-R8 UART 数据接收、和校验、20 位地址与 4 位键值拆分,并用四个 LED 显示最近一次有效键值。程序包含串口及定时器初始化,无需另写 UART 驱动。
1 准备与接线
准备带晶振、复位和电源电路的 STC89C52RC 最小系统板、微-R8 模块、匹配频点的 1527 遥控器,以及低电平点亮的 LED。裸芯片需另接完整的最小系统电路,开发板仅插电不能替代正确烧录。
| R8 引脚 | 连接 | 说明 |
|---|---|---|
| VCC | 与单片机共用 5 V | 本例统一供电;R8 允许供电范围为 2.6~5.5 V。模块电源旁就近放置 0.1 μF 去耦电容。 |
| GND | 单片机 GND | 模块、主控及测试工具必须共地。 |
| DAT | P3.0 / RXD | R8 为发送端,单片机为接收端;两处 DAT 焊盘选择一处即可。 |
| M0 | GND | 上电前接低,选择 UART 模式;禁止接高电平。改变连接后重新上电。 |
| CS0 | GND | 首次调试选全速接收,便于验证。调通后可按规格书选择低功耗档。 |
| 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 打开工程、编译与下载
- 将整个 ZIP 解压到本机,例如
C:\FNRF_R8_51_Demo_V1.0。不要直接在压缩包内打开工程。 - 安装含 C51 编译器的 Keil µVision。只安装 MDK-ARM 无法编译此工程。双击
Keil\R8_51_Demo.uvproj。 - 工程以 AT89C52作为通用编译目标,使用
REG52.H;实物仍为 STC89C52RC。Target 中的 Xtal 为 11.0592 MHz,但此设置不会改变板上晶振,也不会替代下载软件中的 12T 设置。 - 执行 Rebuild all target files。确认 0 Error、0 Warning 后,使用新生成的
Keil\Objects\R8_51_Demo.hex。HEX 是程序烧录文件;TestFrames 中的 BIN 仅用于串口测试。 - 先断开 R8 DAT 与 P3.0。使用 STC 下载工具,按实物选择 STC89C52RC,设置为 12T,并按下载器要求完成断电、上电下载。工程的 AT89C52 编译配置不代表应按 AT89C52 烧录。
- 下载结束后,断开下载器 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 帧 | 键值 | 预期显示 |
|---|---|---|---|
| 1 | FF 84 60 71 55 | 0x1 | 仅 P1.0 对应 LED 亮 |
| 2 | FF 84 60 72 56 | 0x2 | 仅 P1.1 对应 LED 亮 |
| 3 | FF 84 60 74 58 | 0x4 | 仅 P1.2 对应 LED 亮 |
| 4 | FF 84 60 78 5C | 0x8 | 仅 P1.3 对应 LED 亮 |
| 5 | FF 84 60 71 54 | 校验错误 | 保持上一步显示 |
还可先发送 FF 01,等待至少 100 ms,再发送完整第 1 帧;程序应正常接收第 1 帧,验证超时后旧半帧已丢弃。相同有效帧连续发送时,LED 保持对应显示,不反复翻转。
3.2 无线接收测试
- 断电,移除 TTL 工具 TXD;按第 1 节接回 R8 DAT,并核对 M0、CS0、CS1。
- 重新上电,用匹配频点的 1527 遥控器发射;脉宽应处于 R8 串口解码支持范围。
- 观察四个 LED 显示。实际遥控器地址和按键编码由发射端决定,不一定与测试帧相同。
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 默认运行库说明。阅读本说明与运行例程不依赖访问上述网站。