C51实现串口通信

要在51单片机上实现每隔一秒与电脑通过串口通信一次,可以采用如下方法:首先初始化串口设置波特率,并使能串口中断或轮询查询方式处理数据收发。然后设定一个定时器中断,每秒触发一次,作为发送数据的时间基准。在主循环中准备要发送的数据,并在定时中断触发时通过串口发送给电脑。
准备工作:
材料:
材料名称
数量
备注
C51单片机
1
1
串口介绍





123
- 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。
- 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。
- 51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。
2
常用通信接口

名称 | 引脚定义 | 通信方式 | 特点 |
UAERT | TXD、RXD | 全双工、异步 | 点对点 |
I2C | SCL、SDA | 半双工、同步 | 多个设备通信 |
SPI | SCLK、MOSI、MISO、CS | 全双工、同步 | 多个设备通信 |
1-wire | DQ | 半双工、异步 | 多个设备通信 |
- 简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
- TXD与RXD要交叉连接
- 当只需单向的数据传输时,可以直接一根通信线
- 当电平标准不一致时,需要加电平转换芯片
3
51单片机的UART




12
- TXD:接P3.1引脚 - RXD:接P3.0引脚 - SBUF 是缓冲区,分为发送缓冲区和接收缓冲区。
- TH1和TL1是定时器1的功能,需要工作在方式2(自动重载模式),用来设置波特率; 接收数据时,数据从引脚接收,通过移位寄存器接收到 SBUF,然后控制寄存器把RI置1(接收中断),然后触发中断; 发送数据时,SBUF传到控制门,由发送控制器控制TI 触发中断;
4
相关寄存器





123
SCON:串行控制寄存器(可位寻址)
SM2:允许方式2或方式3多机通信控制位;
REN:允许/禁止穿行接收控制位。
○ 由软件置位REN,REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息;
○ 软件复位REN,即REN=0,则禁止接收;
TB8:在方式2或方式3,它为要发送的第9位数据,按需要由软件置位或清0;
RB8:在方式2或方式3,是接收到的第9位数据;
TI: 发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位;
RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中,串行接收到停止位的中间时刻由内部硬件置位,即RI=1(例外情况见SM2说明),必须由软件复位,即RI=0。
0100 0000
PCON:电源控制寄存器(不可位寻址)
- SMOD:波特率选择位。
- 当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;
- SMOD=0,则各工作方式的波特率不加倍。复位时SMOD=0。
- SMOD0:帧错误检测有效控制位。
- 当SMOD0=1,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能;
- 当SMOD0=0,SCON寄存器中的SM0/FE位用于SM0功能,和SM1一起指定串行口的工作方式。复位时SMOD0=0
5
串口通信操作流程

- 发送数据流程
初始化:
- 配置串口控制寄存器SCON为0x40(或0x50);
- 配置电源控制寄存器PCON(计算波特率);
- 配置定时器T1(串口通信只能用定时器1,只能使用8位自动重装工作模式),启动定时器T1;
- 禁止定时器T1中断;
注意串口初始化代码可以使用STC-ISP(附件)生成,生成后复制代码并删除其他的AURX内容。
void UartInit() //4800bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x40; //8位数据,仅用于发送
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFA; //设定定时初值
TH1 = 0xFA; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
- 发送数据
/**
* @brief 串口发送一个字节数据
* @param Byte 要发送的一个字节数据
* @retval 无
*/
void UART_SendByte(unsigned char Byte)
{
SBUF=Byte;
while(TI==0);
TI=0;
}
main.txt
1017B
stc-isp.exe
3.98MB
6
实现效果




12
单片机通过串口每过一秒向电脑端发送内容。








更多相关项目
猜你喜欢
评论/提问(已发布 0 条)

