NO9 蓝桥杯单片机实践之串口通信的使用

1 回顾

串口通信的代码编写结构还是与中断一样,不同的是:

初始中断函数条件涉及到串口通信相关的寄存器和定时器1相关的寄存器(定时器1用于产生波特率),但初始条件中的中断寄存器只考虑串口通信而不考虑定时器1。

void  函数名()

{

包含两部分寄存器:定时器1+串口通信

定时器1: TMOD (选择模式),TH1和TL1(初始计时寄存器),TR1(TCON寄存器里的启动计时按钮)

串口通信:SCON(总的来说功能是模式选择),AUXR(辅助寄存器),中断开关(分开关+总开关)

}

void  函数名() interrupt  中断号

{

就是写时间到后执行什么。注意中断号要写串口通信的,而不是定时器的,因为定时器作用只是产生波特率而不是产生中断。

}

2 实践

2.1 任务

2.2 思路

题目中涉及到串口通信。那么串口通信的结构就要先写下来:

void  函数名()

{

}

void  函数名() interrupt  中断号

{

}

先考虑初始函数怎么写:

用定时器1产生波特率9600: (那么就要写与定时器1有关的寄存器)

TMOD,TR1,TL1,TH1 ,中断(但不使用)

(1)波特率9600查表得到当时钟为11.059MHZ,定时器1用方式2工作即8位重装,写入0xfd,即TL1,TH1= 0xfd

(2)刚才说到要用8位重装模式

查手册之TMOD= 0x20

(3)要让定时器允许定时则TR1 = 1。

初始函数中还涉及串口通信:

与串口通信有关的寄存器: SCON, PCON,AUXR, SBUF,中断

SCON:(上一篇文章查表,或直接查手册)常用的工作模式是8位UART波特率可变,即SM0,SM1为01,那么TB8和RB8和SM2为0(方式1时不使用),TI和RI初始也应该为0,REN=1,要允许接收。

即:01010000

因此,SCON=0x50.

PCON:在定时器1串口1情况写,只考虑SMOD那位,由波特率常用表,我们选了那一行的SMOD显示为0,故SMOD=0,故PCON=0x00。

AUXR: AUXR= 0x00(上一篇文章有解释)

中断:总开关EA=1,分开关ES=1

SBUF是存放数据的所以不是写在初始函数中

接下看看看中断程序函数怎么写:

(1)首先是中断号,因为中断用的是串口通信而不是定时器1,故中断号应是对应串口通信的中断号为4。

(2)任务是要我们接收信息。那么就要用到接收判断位RI,首先判断RI,当RI=1表示接收完成数据,然后再把接收到的数据存下来。(我们前一篇说过,发送的数据会暂时存到SBUF),那么现在我们要接收,就要定义一个变量把SBUF的数据存起来,即data= SBUF,然后再把RI清零。(由于这里只考虑接收,故在中断中只是写接收就行了)

虽然在中断中不用判断发送,但是还是要写一个发送函数来传给单片机,然后接收出来让我们看看是否嗯那个完成接收工作。

注意:还有因为任务是产生9600的波特率,因此串口收发助手的波特率记得调到9600!!

2.3 完整代码

这里我发现很奇怪,要把发送内容的函数放到main函数的循环里面才能让串口助手收到数据,放在main的循环外面是不行的,这样就导致其一直在发送,串口助手就一直在循环接收数据,小蜜蜂老师教程里却不会这样,为啥呢?求助大佬!!

(以下是在蓝桥杯单片机中可以使用的代码)

#include "stc15f2k60s2.h"void selectHC138(unsigned int n)
{switch(n){case 0:P2 = (P2 & 0x1f) | 0x00;  break;case 1: P2 = (P2 & 0x1f) | 0x20;  break; case 2:P2 = (P2 & 0x1f) | 0x40;  break; case 3: P2 = (P2 & 0x1f) | 0x60;  break; case 4:P2 = (P2 & 0x1f) | 0x80;  break; case 5:P2 = (P2 & 0x1f) | 0xa0;  break; case 6:P2 = (P2 & 0x1f) | 0xc0;  break; case 7:P2 = (P2 & 0x1f) | 0xe0;  break;}
}//=============================send and recieve===============
void Init_Timer1()
{TH1 = 0xfd;TL1 = 0xfd;TMOD = 0x20;TR1 = 1;SCON = 0x50;
//  PCON = 0x00;AUXR = 0x00;ES = 1;EA = 1;
}unsigned char urdat;void chuankou() interrupt 4
{
//  if(TI == 1)
//  {
//    urdat = SBUF;
//    TI = 0;
//  }if (RI == 1){//SBUF = urdat;urdat = SBUF;RI = 0;}
}  
//=====================================================
void send(unsigned char dat)
{SBUF = dat;while(TI == 0);TI = 0;
}void close()
{selectHC138(5);P0 = 0x00;selectHC138(4);P0 = 0xff;
}void main()
{close();Init_Timer1();while(1){send(0x5a);send(0xa5);   }}

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

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

相关文章

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板 —— 杭州 2024-03-20 凌晨1:06 code review! 文章目录 CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板1.通用CMakeLists.txt模板2.GPT4给出的改进建议3.git clon…

spring boot整合elasticsearch实现查询功能

第一步、添加依赖&#xff08;注意版本对应关系&#xff09;根据spring boot版本选择合适的版本 <dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.6.2</version></dependenc…

华为综合案例-普通WLAN全覆盖配置(2)

组网图 结果验证 在AC_1和AC_2上执行display ap all命令&#xff0c;检查当前AP的状态&#xff0c;显示以下信息表示AP上线成功。[AC_1] display ap all Total AP information: nor : normal [1] ExtraInfo : Extra information P : insufficient power supply ---…

wireshark抓tcp包使用指南

本博文源于笔者不断探索加上去网络总结获得的经验&#xff0c;撰写wireshark如何抓tcp包 文章目录 1、打开wireshark2、选择网络源3、搜索ip地址与tcp条件4、看灰色的条纹 1、打开wireshark 2、选择网络源 选择自己当前的ip地址适用于的网络源&#xff0c;比如这里选择“以太…

ideaSSM 高校公寓交流员管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 高校公寓交流管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&…

get_local_ip.bat:快速获取IPv4地址

批处理脚本&#xff0c;用于在Windows命令提示符下获取本地计算机的IPv4地址。 echo off ipconfig | findstr IPv4 pause - echo off&#xff1a;这会关闭命令提示符窗口中的命令回显&#xff0c;使得在运行脚本时不会显示每条命令的执行结果。 - ipconfig&#xff1a;这是一…

ELK快速搭建图文详细步骤

目录 一、下载地址二、安装docker-compose(已安装则跳过)三、初始化ELK1. 赋予/setup/entrypoint.sh执行权限2. 初始化 docker-elk 所需的 Elasticsearch 用户和组3. 重置默认用户的密码4. 替换配置文件中的用户名和密码5. 重启 Logstash 和 Kibana&#xff0c;使用新密码重新连…

蓝桥杯算法基础(26)子数组最大累加和,子矩阵最大累加和

子数组最大累加和 给定一个数组arr,返回子数组的最大累加和 例:arr[1,-2,3,5,-2,6,-1];所有的子数组中[3,5,-2,6]可以累加出最大的和12&#xff0c;所以返回12static void findByForce(int[] arr){int manSumarr[0];for(int i0;i<arr.length;i){int sumarr[j];//某个元素为子…

鲁棒的基于表面势的GaN HEMT集成电路紧凑模型

来源&#xff1a;Robust Surface-Potential-Based Compact Model forGaN HEMT IC Design&#xff08;TED 13年&#xff09; 摘要 我们提出了一种精确且稳健的基于表面势的紧凑模型&#xff0c;用于模拟采用氮化镓高电子迁移率晶体管&#xff08;GaN HEMT&#xff09;设计的电…

关于vuex 的模块开发和使用

1、文件结构 2、modules 文件内容 例子&#xff1a; ccc.js 文件内容如下&#xff1a; // 基础配置项 const state {aa: [] }const mutations {setaa (state, data) {state.aa data} }const actions {} export default {namespaced: true, state,mutations,actions } **注…

高效编写产品规格书的秘诀与注意事项

高效编写产品规格书的秘诀&#xff1a;学会利用简单的工具&#xff0c;写出效果最佳的产品规格书。比如&#xff0c;你可以使用HelpLook、Markdown编辑器、LaTeX、notion等。 在快节奏的商业环境中&#xff0c;产品规格书是企业向市场展示产品特性和优势的重要工具。一份清晰、…

quartz整合前端vue加后端springboot

因工作需求&#xff0c;需要能修改定时的任务&#xff0c;前端vue3&#xff0c;后端是springboot 看看页面效果&#xff1a; 首先maven加上引入 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><versi…

电源配小了,是不是容易烧?是的!

电源小的话会不会容易烧毁&#xff1f; 是的。 功率电压*电流。 随着功率增大&#xff0c;电压不变&#xff0c;电流增大&#xff0c;发热量增大&#xff0c;可能会烧毁。 今天给大家推荐一款650w的电脑电源&#xff0c;不过在推荐之前&#xff0c;首先要确认自己的电脑功耗…

串行通信接口之RS232、RS485与RS422

前言 RS232&#xff0c;RS485&#xff0c;RS422都是串口通信协议家族的一员&#xff0c;那么他们有什么区别呢&#xff1f;首先让我们来了解俩个简单的知识点&#xff0c;TTL电平以及CMOS电平&#xff0c;单端传输以及差分传输。 TTL电平 TTL电平接口电路由晶体管构成&#x…

Oracle19C静默安装教程

文章目录 一、安装前的准备1、安装Linux操作系统2、配置网络源或者本地源3、hosts文件配置 二、准备安装环境1、安装依赖包2、创建oracle用户组3、配置系统内核参数4、关闭selinux5、配置oracle用户环境6、修改用户的Shell限制 三、静默安装Oracle数据库1、创建oracle安装目录2…

c++销售公司员工管理系统

定制魏:QTWZPW,获取更多源码等 目录 题目 目的 要求 回顾或复习的内容 类声明 构造函数 核心算法实现 测试与结论 添加员工 显示所有员工 保存数据到文件 完整代码 总结 题目 设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由S…

spring MVC是如何找到html文件并返回的?

Spring MVC 搜索路径 启动一个SpringBoot项目时&#xff0c;访问http://localhost:8080&#xff0c;对于SpringMVC&#xff0c;它会默认把这段url看成http://localhost:8080/index.html&#xff0c;所以这两个url是等价的。 .html, .css, .js, .img …都是静态资源文件&#x…

前端小白的学习之路(ES6 一)

提示&#xff1a;关键字声明&#xff1a;let与const,长度单位&#xff1a;em与rem,vw与wh&#xff0c;解构赋值&#xff0c;箭头函数(简介) 目录 一、ES6介绍 二、let&const 1.let 1) 用 let 关键字声明的变量不能提前引用 2) 不允许重复声明变量 3) 可以产生块级作用…

基于Spring Boot+Vue的社区医院管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 一、研究背景 二…

Python文件

Python文件 1 文件与文件路径1.1 什么是文件和文件路径1.2 绝对路径1.3 相对路径 2 文件的基本操作2.1 路径检查方法2.2 目录操作方法2.3 信息获取方法 3 文件读写3.1 打开文件3.2 读取文件3.3 文件写入3.4 关闭文件3.5 示例3.6 with as 上下文语法 4 文件复制4.1 复制文件4.2 …