单片机通过串口向电脑端发送数据电脑端发送数据控制led

news2024/12/27 18:35:45

上节课我们学习了串口的理论部分,这节课我们要来学习实操部分。

要想实现单片机通过串口向电脑端发送数据,我们首先要来配置寄存器。

1.配置SCON

SCON寄存器中的SM0配置为0,SM1配置为1决定了串口工作在模式一,也就是8位UART, 波特率可变的工作模式。REN置1表示能接收到电脑端的数据(本节实验可置1也可以置0,因为暂时不用接收电脑端发送过来的数据),所以SCON=0x50或者0x40。这样SCON寄存器就配置完成了。

2.配置PCON

PCON中只需要把最高位SMOD0配置为1,使波特率加倍即可。所以PCON=0x80;。这样PCON就配置好了。

SBUF不需要配置,只需要赋值或者被赋值即可。

本实验串口需要配置的内容就这么多。

3.配置TH1定时器

本实验需要用到定时器1,通过定时器1的溢出来约定波特率,通过分频来控制收发器的采样时间,由于本实验不需要中断,所以定时器1中断无需打开

TMOD &= 0x0F;        //设置定时器模式,定时器1
    TMOD |= 0x20;        //设置定时器模式,定时器1
    TL1 = 0xF3;            //设置定时初始值,系统生成
    TH1 = 0xF3;            //设置定时重载值,系统生成
    ET1 = 0;            //禁止定时器中断,本程序只需要定时器溢出即可,不需要产生中断
    TR1 = 1;            //定时器1开始计时 

本实验的定时器采用8为重装,不需要在中断内部重新赋初值。

目前为止,本节课所需配置的所有东西都已配置完成。

接下来我们看原理图:

 第一个SBUF是写入数据,当8位数据全部写好后,通过TI发送出去,发送完成后TI置1,需要软件复位。

第二个SBUF是接收数据,当接受控制器接收好数据后,移入SBUF,接收完成后RI置1,需要软件复位。

定时器T1通过溢出率来约定波特率,控制收发器采样时间。

接下来我们看写完的代码:

 

首先,我们要写一个UART_SendByte(unsigned char Byte)函数来发送SBUF里面的数据,这时SBUF在左边,是被赋值的对象,当主函数调用这个函数时,参数为sec,每次调用后sec++,在函数内部,通过while循环判断TI是否为1,如果不为1则死循环,直到TI为1为止,数据才算发出去。数据发送完成后,软件复位TI=0;通过单片机的快速扫描,这个函数就实现了每隔一段时间,单片机串口向电脑端发送递增的数据。 主函数内部的 Delay(1)是为了消除晶振带来的误差。

所以本实验的第一个代码就完成了。

接下来我们看本实验的第二个代码:电脑端发送数据控制led

这个代码相比于上一个代码,我们需要用到UART的中断,所以我们在配置寄存器的时候,还需要将UART的中断打开,即ES=1,EA=1,当TI和RI其中一个中断信号经过时,都会产生中断。

我们来看代码实现:

 在中断内部,我们首先要判断产生的中断信号是TI还是RI,只有RI中断信号可进入中断要操作的程序,此时的SBUF在等号右边,是赋值给P2口,由电脑端直接写入,此时电脑就可以直接通过写入的数据控制led亮灭,写入成功后,在利用上个代码中的发送SBUF,将数据原封不动的返回电脑,最后再将RI置0,为下一次带电脑控制led做准备。

QS:为什么SBUF作为发送数据的时候,不需要用到中断,而作为接收端的时候则需要呢?

答:当SBUF作为发送端时,只需要发送数据到电脑端上,并不需要单片机产生任何操作,所以不需要打断单片机的主程序,进入中断执行另一个程序。

当SBUF作为接收端时,电脑通过发送数据控制led,单片机需要做出相应操作,所以需要中断。

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

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

相关文章

前端透明分栏设计

目前在开发一个基于众包的打分网站,前端遇到的一个需求是: 背景是电影的海报,且不能随着scroll-bar滚动,需要一个蒙版分为两栏,左侧是影视的媒体信息,不随页面滚动右侧是影视的基本信息和评分信息&#xf…

如何使用基于GPT-4的Cursor编辑器提升开发效率

程序员最恨两件事情:一是别人代码不写文档,二是要让自己写文档。随着 GPT-4 的到来这些都不是问题了,顺带可能连程序员都解决了。。。 之前一直觉得 AI 生成的代码也就写个面试题的水平,小打小闹,现在时代可变了。Curs…

@Conditional四个较常用的派生注解总结

该内容是在学习SpringBoot底层的时候,看到SpringBoot的使用,所以这的做一个简单的总结方便以后复习。可能会有一些问题,还望指出共同学习 Conditional注解: 作用:按照一定的条件进行判断,在满足给定条件后…

如果采用密钥对的形式登录系统后,如何由普通用户切换到root用户

使用xshell工具 采用秘钥的方式进行登录 创建一个新用户并设置密码 切换到新用户之后 su root 想要切换成root用户的时候 输入密码提示 su:Authentication failure su:身份验证失败 使用秘钥之后是不能使用密码再进行登录 我去阿里云查了一下 有一个相同…

stable diffusion 安装xFormers 报错:Couldn‘t install open_clip.

一、No module ‘xformers’. Proceeding without it. 这是因为没有安装xformers导致的。 解决办法: 在webui-user.bat文件这添加一行: set COMMANDLINE_ARGS--xformers如下图所示: 试着点击webui-user.bat,看能否下载&#xff…

17:00面试,17:04就出来了 ,问的实在是太...

从外包出来,没想到算法死在另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以也就忍了。没想到8月一纸通知,所有人不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个兄弟内推…

你具备抽离与封装的思想吗?

笔者最近思考了自己参与的分布式系统业务的架构小细节,虽然笔者每天做的是实现部分需求与业务,但是笔者还是拥有很多时间去读底层源码的,加之笔者自身的思考与实践demo的总结,笔者将在本篇文章中提出笔者自己对“抽离”与“封装”…

Nginx编译安装及配置文件详解

写在前面 Centos版本:Centos 7.6 - 64bit Nginx版本:1.20.2 一、什么是Nginx Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 二、Nginx用在哪些地方 2.1 静态资源服务 动静…

mkv视频文件怎么转成mp4,这3个方法很好用

对于那些电脑不是很精通的小伙伴来说, mkv视频文件怎么转成mp4?小编先来介绍一下mkv视频格式,mkv是一种开放标准的自由的容器和文件格式,是一种多媒体封装格式,能够在一个文件中容纳无限数量的视频、音频、图片或字幕轨…

MVCC底层原理

目录说明MVCC的底层原理隐藏字段undo logRead View说明 在被面试官问面试题的时候,首先它问了Mysql的事务的隔离级别有几种?默认是哪种?他们分别解决了什么问题? 我在一顿回答“巴巴巴巴。。。。”之后,它又继续问题…

追踪项目进展常用的衡量方法

作为项目管理活动,项目中的进度跟踪可以帮助你了解项目实时的完成状态。有了正确的方法、项目管理工具和指标,项目跟踪可以指导你的团队的行动,甚至在问题出现之前向你发出预警。 项目经理使用各种方法、工具和指标来跟踪进度。其中最常见的…

自然语言处理(Natural Language Processing,NLP)简要

自然语言处理(Natural Language Processing,NLP)简要一、发展状况二、发展优势三、发展瓶颈四、具体研究方向五、自然语言处理工具六、未来发展方向自然语言处理(Natural Language Processing,NLP)是计算机…

(原创)Flutter基础入门:各种常用容器类组件

前言 上篇博客主要讲了Flutter的Shape实现 Flutter基础入门:实现各种Shape效果 今天主要讲下Flutter中常用的一些容器组件 Flutter中组件数量很多,分类方式也各有不同 比如可以分为有态组价和无态组件 又可以分为容器组件、功能组件等 拿功能组件来说 有…

docker网络详解,自定义docker网络

文章目录一、初识docker网络1、docker0虚拟网桥2、docker网络常用基本命令3、docker网络可以解决的问题二、docker网络模式1、四种网络模式2、容器实例内默认网络IP生产规则3、bridge模式4、host模式5、none模式6、container模式五、自定义网络模式1、过时的docker link2、使用…

【英语】大学英语CET考试,词汇语法导学方法论笔记(50h+)

文章目录1、谭剑波-词汇直播课1-2(词汇学习3个关键)1.1 看不懂句子的原因(词汇的重要性)1.2 记不住单词的原因(死记硬背70%)1.3 理解单词的本质(词根词缀,26字母,联想辅助…

D3D11和D3D12共享资源

最近碰到个伪需求: 游戏串流。 游戏引擎用D3D12渲染, 再把游戏画面做视频编码, 通过网络发送到远端做解码显示。 第一反应就是走全GPU的流程, 不要用CPU把显存里的数据拷来拷去。 所以先获取渲染完的D3D12的frame buffer, 然后送给…

进程管理 - 银行家算法

文章目录1 概述2 银行家算法2.1 原理2.2 例题1 概述 #mermaid-svg-7QKAqjQpckpStO9Q {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7QKAqjQpckpStO9Q .error-icon{fill:#552222;}#mermaid-svg-7QKAqjQpckpStO9Q .e…

android framework-PackageManagerService(PKMS)包管理服务

一、概述 Android系统启动过程中,会启动一个包管理服务PackageManagerService(PKMS),这个服务主要负责扫描系统中指定目录,找出里面以apk结尾的文件,通过对这些文件进行解析,得到应用程序的所有信息并完成应用程序的安…

算法学习day59

算法学习day591.力扣503.下一个更大元素II1.1 题目描述1.2 分析1.3代码2.力扣42. 接雨水2.1 题目描述2.2 分析2.3 代码3.参考资料1.力扣503.下一个更大元素II 1.1 题目描述 题目描述: 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素&a…

【大数据Hadoop】HDFS3.3.1-Namenode-租约管理

租约管理前言LeaseManager.LeaseLeaseManager添加租约 - addLease租约检查 - FsNamesystem.checkLease租约更新 - renewLease删除租约 - removeLease租约检查 - Monitor 线程租约恢复 - Monitor 线程发起租约恢复 - 其他方式发起前言 我们知道 HDFS 文件是 write-once-read-man…