单片机串口通信实战:从寄存器配置到完整代码实现
第一次接触单片机串口通信时,看着那些陌生的寄存器缩写——SCON、SBUF、PCON,是不是感觉头大?别担心,今天我们就用最直白的方式,把这些抽象的概念变成可操作的步骤。我依然记得自己第一次成功让单片机通过串口和电脑对话时的兴奋,那种"通了!"的成就感,现在想来依然记忆犹新。
1. 串口通信基础认知
串口通信就像两个人在用对讲机通话,需要约定好相同的语速(波特率)和对话规则(数据格式)。在51单片机中,这套规则主要由三个关键寄存器控制:
- SCON:相当于通信协议的制定者,决定数据怎么传、怎么收
- SBUF:是数据的临时中转站,发送和接收都要经过它
- PCON:可以理解为通信速率的调节器
实际项目中,我遇到过不少初学者容易忽略的一个细节:TI和RI标志位的及时清除。这两个标志就像通信状态的指示灯,如果不及时手动清零,就像对讲机一直按着通话键不放,整个通信就会卡住。
提示:在Keil调试时,可以通过View->Serial Window->UART #1打开串口调试窗口,实时观察通信数据。
2. 关键寄存器深度解析
2.1 SCON寄存器:通信控制中心
SCON的每一位都像是一个功能开关,我们需要重点关注这几个位:
| 位 | 名称 | 功能说明 | 典型设置 |
|---|---|---|---|
| SM0-SM1 | 工作模式 | 00=模式0, 01=模式1, 10=模式2, 11=模式3 | 通常设为01(模式1) |
| REN | 接收使能 | 1=允许接收, 0=禁止接收 | 必须设为1 |
| TI | 发送中断 | 发送完成自动置1,需手动清零 | 初始为0 |
| RI | 接收中断 | 接收完成自动置1,需手动清零 | 初始为0 |
c复制// 典型SCON配置示例
SCON = 0x50; // 01010000 -> 模式1,允许接收
记得去年指导一个学生做毕业设计,他死活调不通串口,最后发现是漏了REN=1这一行。没有打开接收使能,就像对讲机没开接收键,自然收不到任何消息。
2.2 SBUF寄存器:数据中转站
SBUF的特殊之处在于它实际
