51单片机07 串口通信

devtools/2025/2/11 19:20:42/

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。单片机的串口可以使单片机单片机单片机与电脑、单片机与各式各样的模块互相通信。单片机>51单片机内部自带UARTUniversal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

 一、串口向电脑发送数据

 SCON=0x40; 这里用的是8位自动重装模式

#include <STC89C5xRC.H>
#include "Delay.h"void UART_Init()
{SCON=0x40;  //这里不使能 STC给的代码是50 REN位0/1PCON &= 0x7F;		//波特率不倍速TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式(用定时器1,8位自动重装)TL1 = 0xFA;		//设置定时初值TH1 = 0xFA;		//设置定时重装值//这里UpTL/TH两个都是0xF3,试过了不行TR1 = 1;		//定时器1开始计时ET1 = 0;		//禁止定时器1中断,确保定时器只用来控制波特率
}void UART_SendByte(unsigned char Byte)
{SBUF=Byte;while(TI==0);TI=0;//刚开始发送数据是0,发送成功自动置1,跳出while需要人工置0
}void main()
{UART_Init();while(1){UART_SendByte(0x47);Delay(500);}
}

以上代码为了方便看没有模块化。

二、电脑通过串口控制LED

SCON=0x50;单片机发送不需要中断,是因为电脑程序员可以循环读取缓冲区,接收需要中断,因为不知道什么时候接收到,因此需要通过串口接收中断来及时响应接收到的数据,接收到的时候触发中断,需要打开中断的相应配置(ESEA和优先级)。

EA=1;ES=1

测试代码(已经模块化后)

void UART_Init()
{SCON=0x50;  //这里不使能 STC给的代码是50 REN位0/1(表示接收)PCON &= 0x7F;		//波特率不倍速TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式(用定时器1,8位自动重装)TL1 = 0xFA;		//设置定时初值TH1 = 0xFA;		//设置定时重装值//这里UpTL/TH两个都是0xF3,试过了不行TR1 = 1;		//定时器1开始计时ET1 = 0;		//禁止定时器1中断,确保定时器只用来控制波特率EA = 1;ES = 1;
}
#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"unsigned char sec;void main()
{UART_Init();while(1){}
}void UART_Routine() interrupt 4
{P2=0x00;
}

问了一下GPT,它意思也可以用如下方式类似TI进行中断处理,但是会浪费大量资源。

 while(1){// 监测接收标志位 RI,等待接收到数据while(RI == 0);  // 等待数据接收完成RI = 0;  // 清除接收中断标志位unsigned char received_data = SBUF;  // 读取接收到的数据// 处理接收到的数据}

-----------------------------------------

#include <STC89C5xRC.H>
#include "Delay.h"
#include "UART.h"unsigned char sec;void main()
{UART_Init();while(1){}
}void UART_Routine() interrupt 4
{if(RI==1) //排除是发送的干扰{P2=~SBUF;UART_SendByte(SBUF); //这个不能既在主函数main出现又在中断中出现RI=0;}
}

三、波特率(TLTH)

以老师的0xF3为例,243   256溢出-每13us就溢出   1/13us:定时器T1溢出频率 0.07692Mhz

设置倍速走上面1; 0.07692除以16   就是实际波特率   0.00480769Mhz     4807.69hz

四、数据显示模式

HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

文本模式/字符模式:以原始数据编码后的形式显示


http://www.ppmy.cn/devtools/158008.html

相关文章

防御综合实验

需求一 配置vlan [SW2]int g 0/0/2 [SW2-GigabitEthernet0/0/2]port link-type access [SW2-GigabitEthernet0/0/2]port default vlan 10 [SW2-GigabitEthernet0/0/2]int g0/0/3 [SW2-GigabitEthernet0/0/3]port link-type access [SW2-GigabitEthernet0/0/3]port default vl…

打包工具选择:Vite 还是 Webpack

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

设计模式详解(享元模式)

一、引言 设计模式是一种用于解决在特定上下文中经常出现的问题的优秀解决方案。它们为开发人员提供了一种通用的设计语言&#xff0c;有助于创建灵活且可维护的代码。享元设计模式&#xff08;Flyweight Pattern&#xff09;是结构型模式之一&#xff0c;它通过共享对象来减少…

MHTML文件如何在前端页面展示

MHTML文件如何在前端页面展示 需求背景&#xff1a; 目前在给证券公司做项目&#xff0c;但是在使用新系统的过程中&#xff0c;甲方还希望之前之前系统的历史记录可以看到。 最初制定的计划是项目组里面做数据的把原系统页面爬取下来&#xff0c;转成图片&#xff0c;直接给…

安装 Ollama 需要哪些步骤?(windows+mac+linux+二进制+Docker)

安装 Ollama 的步骤根据操作系统不同会有所差异,以下是针对不同操作系统的详细安装指南: Windows 系统 下载安装包:访问 Ollama 官方下载页面,下载适用于 Windows 的安装程序 OllamaSetup.exe。运行安装程序:双击下载的安装包,按照提示完成安装。默认安装路径为 C:\User…

Dockerfile中Alpine镜像设置东八时区

RUN apk add tzdata # 设置时区为东八区&#xff08;上海&#xff09; RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime参考 Setting the timezone

【SpringBoot】单元测试实战演示及心得分享

目录 1.指定测试标准 2.设计测试用例 3.测试集示例 4.跑测试集 1.指定测试标准 单元测试会用到mock和junit的内容&#xff0c;作者前文有详解&#xff0c;可移步&#xff1a; Spring Boot单元测试-CSDN博客 mockito的详细使用-CSDN博客 1.1.测哪一层&#xff1f; 以当…

APP广告变现如何优化广告填充率,提升变现收益?

APP广告变现对接聚合广告平台可以提升广告变现效率&#xff0c;最大化广告收益。#APP广告变现# 一般来说&#xff0c;广告填充率越高&#xff0c;意味着广告采买方数量越多&#xff0c;可以将广告库存卖掉。但实际的广告变现业务中&#xff0c;100%的广告填充率几乎无法达成。…