)
本文主要介绍串口通信的相关内容。基于STC89C52实现电脑与串口之间的通信。目录一、串口介绍二、硬件电路三、电平标准1. TTL 电平2. RS-232 电平3. RS-485 电平四、常见通信接口比较五、相关术语六、51单片机的UART七、串口参数与时序图八、串口工作模式的硬件结构图九、程序实现1、串口向电脑发送数据2、电脑通过串口控制LED十、效果展示1、串口向电脑发送数据2、电脑通过串口控制LED一、串口介绍串口Serial Port串行通信接口是设备间逐位、依次传输数据的通信接口核心是UART 协议搭配RS-232/RS-485等电气标准广泛用于嵌入式调试、工业控制、传感器通信等场景。51单片机内部自带UARTUniversal Asynchronous Receiver Transmitter通用异步收发器可实现单片机的串口通信。二、硬件电路简单双向串口通信有两根通信线发送端TXD和接收端RXDTXD与RXD要交叉连接当只需单向的数据传输时可以直接一根通信线当电平标准不一致时需要加电平转换芯片三、电平标准电平标准是数据1和数据0的表达方式是传输线缆中人为规定的电压与数据的对应关系串口常用的电平标准有如下三种1. TTL 电平电压3.3V 或 5V逻辑1 3.3V/5V 0 0V(GND)距离很短几十厘米以内用途STM32、Arduino、ESP32 内部串口USB 转 TTL 模块CH340、CP2102传感器、蓝牙 / WiFi 模块2. RS-232 电平电压±12V 左右逻辑和 TTL 完全相反1 -3V ~ -15V 0 3V ~ 15V距离15 米以内特点不能直接和单片机 TTL 相连会烧芯片必须用MAX3232这类电平转换芯片3. RS-485 电平差分信号A、B 两根线电压差决定逻辑距离最远 1200 米抗干扰极强工业现场必用半双工常见通信接口比较四、常见通信接口比较名称引脚定义通信方式特点UARTTXD、RXD全双工、异步点对点通信I²CSCL、SDA半双工、同步可挂载多个设备SPISCLK、MOSI、MISO、CS全双工、同步可挂载多个设备1-WireDQ半双工、异步可挂载多个设备五、相关术语全双工通信双方可以同时发送和接收数据就像打电话两边可以同时说话。代表接口UART、SPI。半双工通信双方可以发送和接收数据但同一时间只能单向传输就像对讲机必须 “说完等对方回复”。代表接口I²C、1-Wire、RS-485。单工只能单向传输数据一方永远发送另一方永远接收就像广播电台。同步通信通信双方共享统一的时钟信号用时钟边沿来同步数据传输数据传输效率高、速度快。代表接口I²C、SPI。异步通信没有统一的时钟信号通过起始位、数据位、校验位、停止位来帧同步接线简单但速度相对较慢。代表接口UART、1-Wire。点对点通信只有两个设备之间直接通信不能接入更多设备通信链路简单。代表接口UART。时钟信号同步通信中由主机提供的周期性电平信号用于标记数据传输的节奏确保收发双方数据对齐。片选信号CS/SSSPI 接口中用于选择特定从设备的信号只有被选中的设备才会响应通信避免总线冲突。六、51单片机的UARTSTC89C52有1个UARTSTC89C52的UART有四种工作模式模式0同步移位寄存器模式18位UART波特率可变常用模式29位UART波特率固定模式39位UART波特率可变七、串口参数与时序图波特率串口通信的速率代表每秒钟传输的比特数比如 9600、115200决定了发送 / 接收每一位数据的间隔时间。检验位用于数据传输错误验证比如奇校验、偶校验比如发送0101 0101如果是奇校验要让 1 的总数变成奇数所以校验位 1。如果是偶校验要让 1 的总数保持偶数所以校验位 0。停止位用于标识一帧数据的结束起到帧间隔的作用。八、串口工作模式的硬件结构图1. 核心数据缓存SBUF地址99H物理上是两个独立寄存器发送和接收各一个共用一个地址2. 波特率生成定时器 T1 分频逻辑时钟源由定时器 T1溢出提供T1溢出率分频路径T1 溢出 → 先经过÷2或÷1由SMOD 位控制波特率是否加倍再经过÷16分频最终得到串口波特率3. 发送流程CPU 向发送 SBUF写入数据发送控制器从 SBUF 取出数据按串口帧格式起始位 数据位 停止位逐位发送发送完成后发送中断标志位 TI 置 1触发串口中断如果开启数据通过TXD 引脚发送出去4. 接收流程RXD 引脚检测到起始位低电平开始接收数据接收控制器通过移位寄存器逐位采集数据一帧数据接收完成后存入接收 SBUF接收中断标志位 RI 置 1触发串口中断如果开启CPU 读取 SBUF 获取数据九、程序实现1、串口向电脑发送数据1.1 关于寄存器配置需要去看一下手册的第8章和第7章。或者直接用STC-ISP波特率计算器生成代码。关键的UART_Init 和 UART_SendByte函数实现如下所示。UART_SendByte中发送中断标志位需要手动复位。1.2 main实现通过串口发送当前秒计数值2、电脑通过串口控制LED2. 1 主要需要使能串口中断同时需要用到串口中断服务函数。2.2 在中断服务函数将接收到的数据发送到P2口十、效果展示1、串口向电脑发送数据2、电脑通过串口控制LED