51单片机--串口通信
基本介绍
- 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。
- 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。
- 51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。
基本接线
- 简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
- TXD与RXD要交叉连接
- 当只需单向的数据传输时,可以直接一根通信线
- 当电平标准不一致时,需要加电平转换芯片
电平标准
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
- TTL电平:+5V表示1,0V表示0
- RS232电平:-3-15V表示1,+3+15V表示0
- RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号)
常见通信接口比较
名称 | 引脚定义 | 通信方式 | 特点 |
---|---|---|---|
UART | TXD、RXD | 全双工、异步 | 点对点通信 |
I²C | SCL、SDA | 半双工、同步 | 可挂载多个设备 |
SPI | SCLK、MOSI、MISO、CS | 全双工、同步 | 可挂载多个设备 |
1-Wire | DQ | 半双工、异步 | 可挂载多个设备 |
51单片机的UART
- STC89C52有1个UART
- STC89C52的UART有四种工作模式:
模式0:同步移位寄存器
模式1:8位UART,波特率可变(常用)
模式2:9位UART,波特率固定
模式3:9位UART,波特率可变
串口模式图
SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器
串口和中断系统
串口相关寄存器
SCON配置
SCON:串行控制寄存器,可位寻址,用于选择串行通信的工作方式和某些控制功能。
- SM0,SM1按下列组合确定串行口的工作方式:
我们一般选择方式1,所以SM0=0,SM1=1.
- REN:1则启动串行接收器RXD,开始接收信息,0为禁止接收,我们先设置为1。
- TI:发送中断请求标志位,发送数据时,由内部硬件自动置1,响应中断后由软件复位为0。
- RI:接收中断请求标志位,接收数据时,由内部硬件自动置1,响应中断后由软件复位为0。
这里配置SCON的八位分别为:01010000,十六进制0x50
PCON配置
PCON:电源控制寄存器,不可位寻址
这里配置PCON的八位分别为:10000000,十六进制0x50
中断寄存器配置
程序配置
波特率可通过软件进行生成
程序操作
串口向电脑发送数据
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
unsigned char num;
void main(){
UartInit();
while(1){
UART_SendBype(num++);
Delay(1000);
}
}
#include <REGX52.H>
void UartInit(void) //4800bps@12.000MHz
{
PCON |= 0x80; //使能波特率倍速位SMOD
SCON = 0x40; //8位数据,可变波特率
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xF3; //设定定时初值
TH1 = 0xF3; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void UART_SendBype(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
电脑通过串口控制单片机
需要接受定时器SCON的REN为1,和发送不通,接收要配置串口中断,串口中断号为4
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"
unsigned char num;
void main(){
UartInit();
while(1){
}
}
void UART_Routine() interrupt 4
{
//判断是接收中断
if(RI==1)
{
P1=~SBUF;//点亮LED
UART_SendBype(SBUF);
RI=0;//清除接收中断标志
}
}
数据显示
HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
文本模式/字符模式:以原始数据编码后的形式显示,可发送ASCII编码表字符