51单片机07 串口通信

news/2025/2/13 15:03:43/

串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。单片机的串口可以使单片机单片机单片机与电脑、单片机与各式各样的模块互相通信。单片机>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/news/1571733.html

相关文章

从算法到落地:DeepSeek如何突破AI工具的同质化竞争困局

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…

LM Studio无设置代理,更改镜像源方法(MAC)

在macbook上使用LM Studio时发现总是加载失败&#xff0c;App也没有设置代理的地方&#xff0c;搜索了挺多解决方案&#xff0c;貌似官网再可以封补很多解决方案已经过时&#xff0c;最终找到一种替换镜像源的方法共享出来。 方便大家都能使用&#xff0c;不介绍命令行修改方式…

42.水果销售系统(springbootvue的Java项目[含微信小程序])

目录 1.系统的受众说明 2.开发环境与技术 2.1 MYSQL数据库 2.2 Java语言 2.3 微信小程序技术 2.4 SpringBoot框架 2.5 B/S架构 2.6 Tomcat 介绍 2.7 HTML简介 2.8 MyEclipse开发工具 3.系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作…

【鸿蒙开发】第二十九章 Stage模型-应用上下文Context、进程、线程

目录 1 Stage模型基本概念 1.1 开发流程 3 应用上下文Context的典型使用场景 3.1 获取应用文件路径 3.2 获取和修改加密分区 3.3 获取本应用中其他Module的Context 3.4 订阅进程内UIAbility生命周期变化 4 进程 4.1 概述 5 线程 5.1 线程类型 5.2 使用EventHub进行线…

【Linux】深入理解linux权限

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …

electron-vite 构建后路由失效问题

这个问题大概是这样的&#xff1a;使用 electron-vite 构建的应用&#xff0c;开发时候&#xff0c;用路由的窗口能正常显示&#xff0c;而打包后无法访问。 其实官网给出了说明&#xff1a;说明 也可以通过下面这段代码看出一些东西&#xff1a; 很明显他判断了环境&#xf…

ES 索引结构

ES 既不像 MySQL 这样有严格的 Schema&#xff0c;也不像 MongoDB 那样完全无 Schema&#xff0c;而是介于两者之间。 1️⃣ ES 的 Schema 模式 ES 默认是 Schema-less&#xff08;无模式&#xff09; 的&#xff0c;允许动态添加字段。 但 ES 也支持 Schema&#xff08;映射 …

数据结构 动态顺序表-vector

一、创建vector #include <vector> // 头⽂件 using namespace std; const int N 20; struct node {int a, b, c; }; // 1. 创建 void init() {vector<int> a1; // 创建⼀个空的可变⻓数组 vector<int> a2(N); // 指定好了⼀个空间&#xff0c;⼤⼩为 N …