蓝桥杯 — 串口通信(UART)

本文详细介绍了串口通信的概念,包括SCON寄存器和TCON寄存器的作用,以及如何进行初始化设置。同时,文章提供了两个串口通信的实例,包括驱动程序的安装和串口调试助手的使用,以及通过串口输入控制数码管显示数字的应用。
摘要由CSDN通过智能技术生成

1、串口通信概念说明 

串口通信解释
通信方式 分为半双工、单工、全双工
数据传输 一位一位的接收或发送
波特率 每秒钟传输的位数
TH1和TL1 设置波特率参数
TMOD 设置定时器1的工作方式
SCON
单片机串口通信接收字符串的步骤如下: 1. 初始化串口模块,确定波特率、数据位、停止位、校验位等参数。 2. 等待接收串口数据,一般使用中断方式接收数据,即设置串口接收中断函数。 3. 接收到串口数据后,将数据存储到内存中。 4. 检查接收到的数据是否为完整的字符串,判断方法可以是判断是否有结束符(如'\0')或者判断接收到的字节数是否达到预期。 5. 如果接收到完整字符串,则处理数据,完成后清空缓存区,等待下一次接收。 下面是一段接收字符串的示例代码: ```c #include <reg52.h> #include <stdio.h> #define UART_BAUDRATE 9600 // 串口波特率 #define UART_BUFFERSIZE 32 // 串口缓冲区大小 unsigned char uart_buffer[UART_BUFFERSIZE]; // 串口缓冲区 unsigned char valid_data = 0; // 有效数据长度 void uart_init() { /* 初始化串口模块 */ TMOD |= 0x20; // 定时器1工作在模式2,允许自动重装载 TH1 = 0xFD; // 波特率计算公式:TH1 = 256 - (晶振频率 / (32 * 波特率)),晶振频率为11.0592 MHz TL1 = 0xFD; PCON = 0x80; // SMOD = 1,波特率加倍 SCON = 0x50; // SCON的D7和D6位分别表示串口工作模式和接收允许位 IE = 0x90; // 开启串口中断和定时器中断 TR1 = 1; // 启动定时器1 } void uart_receive() interrupt 4 { /* 串口接收中断函数 */ if (RI) { /* 接收数据 */ unsigned char data = SBUF; if (valid_data < UART_BUFFERSIZE) { uart_buffer[valid_data] = data; valid_data++; } RI = 0; } } void main() { uart_init(); while (1) { if (valid_data > 0) { /* 接收到有效数据 */ if (uart_buffer[valid_data - 1] == '\0') { /* 数据接收完成 */ printf("Received: %s\r\n", uart_buffer); // 处理数据 valid_data = 0; // 清空缓冲区,等待下一次接收 } } } } ``` 在上面的代码中,初始化了串口模块并设置了串口接收中断函数。在主函数中,不断检查串口接收缓冲区中是否有数据,如果有数据则判断是否为完整字符串,如果是则处理数据并清空缓冲区。如果缓冲区中的数据不足以组成完整的字符串,则继续等待接收。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式职场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值