【51单片机】串口通信使用串口通信控制LED灯

news2024/11/26 9:00:05

🎊专栏【51单片机】

🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。

🎆音乐分享【51单片机】

🥰大一同学小吉,欢迎并且感谢大家指出我的问题🥰

目录

🍔串口通信

😎代码 

 🍔串口初始化

⭐分析 

🏳️‍🌈确定T1的工作方式

🎈TMOD=0X20; 

🏳️‍🌈确定T1的初值

🎈TH1=0XF3;  TL1=0XF3;

🏳️‍🌈波特率加倍(操作SMOD)

🎈PCON=0X80;

🏳️‍🌈启动T1 

🎈TR1=1

🏳️‍🌈确定串行口控制(编程SCON寄存器)

🎈SCON=0x50

🏳️‍🌈打开中断 

🎈ES=1;  EA=1 

🍔中断分析

🍔串口通信控制LED灯

😎效果

😎代码


🍔串口通信

😎代码 

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


void UsartInit()
{
	SCON=0X50;			//设置为工作方式1      
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
	TL1=0XF3;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
}

void main()
{	
	UsartInit();  //	串口初始化
	while(1);		
}

void Usart() interrupt 4
{
	u8 receiveData;

	receiveData=SBUF;    //出去接收到的数据
	RI = 0;            //清除接收中断标志位
	SBUF=receiveData;    //将接收到的数据放入到发送寄存器
	while(!TI);			 //等待发送数据完成
	TI=0;						 //清除发送完成标志位
}

 🍔串口初始化

void UsartInit()
{
    SCON=0X50;            //设置为工作方式1      看视频P62  4:30
    TMOD=0X20;            //设置计数器工作方式2
    PCON=0X80;            //波特率加倍
    TH1=0XF3;                //计数器初始值设置,注意波特率是4800的
    TL1=0XF3;
    ES=1;                        //打开接收中断
    EA=1;                        //打开总中断
    TR1=1;                    //打开计数器
}

⭐分析 

🏳️‍🌈确定T1的工作方式

🎈TMOD=0X20; 


为什么是20

 

 M1 M0 这两位控制的是工作方式,是方式2,M1 M0 是10

对应到前面就是0010,那么高四位对应的就是2


🏳️‍🌈确定T1的初值

🎈TH1=0XF3;  TL1=0XF3;

根据下面的软件,设置 TH1 TL1

 通过上图,可以读出是F3H

那么 TH1=0XF3;  TL1=0XF3;


🏳️‍🌈波特率加倍(操作SMOD)

🎈PCON=0X80;

 通过上图,发现SMOD是在PCON这个寄存器里面,

由于SMOD在最高位,二进制中最高位一般表示符号位,所以SMOD不能进行位操作

所以要对这整个寄存器进行操作,

由于SMOD=0,波特率不加倍,否则加倍

所以设置PCON=0X80;就是1000 0000 相当于对SMOD进行操作


🏳️‍🌈启动T1 

🎈TR1=1

就是编程TCON的TR1位,打开计数器


🏳️‍🌈确定串行口控制(编程SCON寄存器)

🎈SCON=0x50

为什么是5

我们选择方式1,那么波特率就是可变的,

由图可知,方式1的SM0=0 SM1=1

SM2我们设置为0

REN,是允许串行接收位,我们设置为1

 

由下图可知,后四位都是0

⭐⭐⭐所以高四位是5,所以是0x50 


🏳️‍🌈打开中断 

🎈ES=1;  EA=1 

ES=1;          串口中断
EA=1;         打开总中断


🍔中断分析

void Usart() interrupt 4
{
    u8 receiveData;

    receiveData=SBUF;    //出去接收到的数据
    RI = 0;            //清除接收中断标志位
    SBUF=receiveData;    //将接收到的数据放入到发送寄存器
    while(!TI);             //等待发送数据完成
    TI=0;                         //清除发送完成标志位
}

使用SBUF寄存器来存储数据

为什么要RI=0 TI=0

 清零后,等待下一次的接收

发射完成后,TI为1,那么 !TI为0,就会跳出while循环

假设发射没有完成,那么TI为0,就不会跳出while循环

🍔串口通信控制LED灯

😎效果

串口通信控制LED灯

😎代码

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;


void UsartInit()
{
	SCON=0X50;			//设置为工作方式1      
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
	TL1=0XF3;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
}


void main()
{	
	UsartInit();  //	串口初始化
	while(1);		
}

void UART_SendByte(unsigned char Byte)
{
	SBUF = Byte;
	while (!TI);
	TI = 0;
}

void Usart() interrupt 4
{

	if (RI == 1)					//如果接收标志位为1,接收到了数据
	{
		P2 = ~SBUF;				//读取数据,取反后输出到LED
		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI = 0;					//接收标志位清0
	}
	
}

🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/525425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP1.1(四)URI

一 URI的基本格式以及与URL的区别 ① URI直观感受 1)URI是HTTP协议的重要组成部分2)ABNF如何严格定义URI ② URL、URN、URI ③ URI细讲 ④ URI的组成 ⑤ ABNF关于URI定义 blob:http 地址的原理及生成方法 video 标签 src 带有blob:http data…

NetCore发布到Docker-单机

一.git安装 1.下载 https://github.com/git/git/releases/tag/v2.40.1 2.将本地的安装包上传到 linux 服务器上,我这里放在 /opt/git/ 目录下 3.解压压缩包,得到目录 git-2.40.1,位置在 /opt/git/git-2.40.1 tar -zxvf git-2.40.1.tar.gz 4.…

【刷题之路】LeetCode 225. 用队列实现栈

【刷题之路】LeetCode 225. 用队列实现栈 一、题目描述二、解题1、主要思路解析2、先实现栈3、实现各个接口3.1、初始化接口3.2、push接口3.3、pop接口3.4、myStackTop接口3.5、myStackEmpty接口3.6、myStackFree接口 一、题目描述 原题连接: 225. 用队列实现栈 题…

如何选择合适的自动化测试工具? 我教你

目录 前言 选择最佳自动化测试工具的重要性 自动化测试工具的种类 选择自动化测试工具时要考虑的因素 自动化测试工具的选择标准 前言 自动化测试是高质量软件交付领域中最重要的实践之一。在今天的敏捷开发方法中,几乎任一软件开发过程都需要在开发阶段的某个…

测试工具-JIRA

软件测试工具—JIRA使用 1.创建 项目:一般为业务线名称 问题类型:任务、故事、缺陷等 概要:bug的简要描述,一般写出定位地方和目前现状 Sprint:一般为业务线迭代简称 测试阶段:按照各公司的测试流程对应标…

vlc搭建rtsp直播Demo

文章目录 学习链接本地视频文件作为数据源推流步骤拉流步骤 本地摄像头作为数据源拉流步骤 学习链接 ffmpeg 使用VLC亲手搭建RTSP直播点播 本地视频文件作为数据源 推流步骤 点击媒体->流 点击添加,选择视频文件,后点击串流 点击串流后&#xf…

linux异步通知实验

一、异步通知简介 中断是处理器提供的一种异步机制,配置好中断后就可以让处理器去处理其他的事情,当中断发生以后会执行中断服务函数,在中断服务函数中做具体的处理。 Linux 应用程序可以通过阻塞或者非阻塞两种方式来访问驱动设备&#xff0…

04:mysql--DCL

目录 1:介绍 2:语法 3:DCL的使用 4:权限 1:介绍 DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库 用户、控制数据库的访问 权限。 2:语法 DCL-管理用户 查询用户 use mysql; select * from user; 创建用户 create user "用户名&quo…

缓存服务器概述

一、概述 主要功能:应用解耦,异步消息,流量削锋等问题 架构设计:实现高性能,高可用,可伸缩和最终一致性架构 常用消息队列:ActiveMQ,RabbitMQ,ZeroMQ,Kafka…

谷歌chrome浏览器升级新版后字体显示不清楚解决方案

谷歌chrome浏览器升级新版后字体显示不清楚解决方案 参考图片: Chrome更新至版本Chrome 109.0.5414.120 字体看不清 浏览器症状与表现 Chrome更新至版本Chrome 109.0.5414.120 字体看不清;会很细,在设置中选择自定义的字体,仍无法…

MySQL数据库笔记-基础篇

文章目录 MySQL概述数据库相关概念小总结 MySQL数据库版本:启动与停止客户端连接关系型数据库数据模型小总结 SQLSQL通用语法SQL分类DDL数据库操作查询创建数据类型数据类型的使用练习 修改删除小总结 DML添加数据修改数据删除数据小总结 DQLDCL MySQL概述 数据库相…

BI技巧丨矩阵甘特图

BOSS:白茶,我们最近有很多项目,能不能做个甘特图? 白茶:没问题!(应用市场上随便找个甘特图就OK了嘛!) BOSS:对了,不要那种点进来会有点卡&#xf…

二、数据结构1:单链表 模板题+算法模板(单链表)

文章目录 算法模板单链表题目模板 模板题单链表原题链接题目思路题解 算法模板 单链表题目模板 // head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 int head, e[N], ne[N], idx;// 初始化 void init() …

【001】C++的第一个程序Hello World

C的第一个应用程序(Hello World程序) 引言一、代码二、代码解释三、注意事项四、注释语句总结 引言 💡 作者简介:专注于C/C高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。 👉…

《JavaEE》网络编程套接字

文章目录 Socket我们来解释一下上面叫做有无连接我们再来理解一下上面是可靠传输和不可靠传输面向字节流与面向数据报的区别(后期会具体分析这个)全双工 单双工 UDPDatagramSocketDatagramPacket我们来尝试写一下UDP版本的代码 TCPServerSocketSocket我们…

什么年代了?不会还有人不会插件化吧?

一.到底什么是插件化开发 插件化开发是将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk,最终打包的时候将宿主apk和插件apk分开或者联合打包。 为什么要将一定要使用插件化开发呢? 宿…

【Linux】一文带你掌握Linux权限!

Linux权限 问题一:Linux下的用户分类有哪些?问题二:什么叫做权限?问题三:见一见没有权限是什么现象(看看就好了)问题四:权限的修改问题。chmodchownchgrp 问题五:其他问题(三个小问题)文件的初始…

51单片机(十五)直流电机驱动(PWM)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

【并发编程】深入理解Java并发之synchronized实现原理

文章目录 一、synchronized 实现同步示例二、synchronized 典型错误示例三、Java 对象头与 Monitor四、synchronized代码块底层原理五、synchronized方法底层原理六、Java虚拟机对synchronized的优化 一、synchronized 实现同步示例 public class MyThread extends Thread{pri…

分布式事务之Seata讲解

文章目录 1 Seata1.1 简介1.2 架构1.3 四种事务模式1.3.1 XA1.3.1.1 定义1.3.1.2 优缺点1.3.1.3 代码中实现 1.3.2 AT1.3.2.1 定义1.3.2.2 全局锁1.3.2.2.1 AT模式脏写问题1.3.2.2.2 全局锁 1.3.2.3 AT模式优缺点1.3.2.4 与XA模式区别1.3.2.5 代码中实现 1.3.3 TCC模式1.3.3.1 …