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

2024-03-21 09:52

本文主要是介绍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);   }}

这篇关于NO9 蓝桥杯单片机实践之串口通信的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832369

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动