51单片机快速入门之中断的应用 2024/11/23 串口中断
51单片机快速入门之中断的应用
基本函数:
void T0(void) interrupt 1 using 1
{
这里放入中断后需要做的操作
}
void T0(void):
这是一个函数声明,表明函数 T0 不接受任何参数,并且不返回任何值。
interrupt 1:
这是关键字和参数,用于指定这个函数是一个中断服务例程,其中 1 表示中断号。不同的中断号对应不同的中断源.
using 1:
这是另一个关键字和参数,用于指定该中断服务例程使用的工作寄存器组。
在一些微控制器中,允许程序员在中断服务例程中使用不同的工作寄存器组,以避免与主程序中的寄存器冲突。这里的 1 表示使用第1个工作寄存器组。
中断号解释: interrupt
- 外部中断0 (INT0) 中断号0
- 定时器/计数器0 (T0) 中断号1
- 外部中断1 (INT1) 中断号2
- 定时器/计数器1 (T1) 中断号3
- 串行口中断 (串行I/O) 中断号4
使用中断前必要的设置:

串行通信控制寄存器 SCON 简称:串口控制 图片来源于网络


多机通信控制位 (SM2)
SM2 位主要用于多机通信模式(方式2和方式3)。它的功能如下:方式0:SM2 必须为0。
方式1:SM2 不使用。方式2和方式3:如果 SM2 为0,无论接收到的第9位数据(RB8)是什么,
都会将前8位数据送入接收缓冲区 SBUF 并产生中断请求。如果 SM2 为1,只有当接收到的第9位数据(RB8)为1时,
才会将前8位数据送入接收缓冲区 SBUF 并产生中断请求;否则,丢弃前8位数据。
REN:是串行接收允许位
1时:允许串行接收
0时:禁止串行接收
- REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
快速理解参考:
SM0 SM1 串行通信 模式选择 ,参考前面文章中的传送门
关于 通信模式 设置 的资料 传送门
TI = 1; 表示数据 发送成功 一帧数据 触发中断处理 之后需要手动 =0
RI =1; 表示数据 接收成功 一帧数据 触发中断处理 之后需要手动 =0
复习拓展:
一帧数据的组成
- 起始位(Start Bit):
- 通常是一个低电平(0),用于标记数据传输的开始。
- 起始位的宽度通常是一个比特时间。
- 数据位(Data Bits):
- 通常包含8位数据,但也可能是5位、6位、7位或9位。
- 数据位是实际要传输的有效数据。
- 校验位(Parity Bit)(可选):
- 用于检测传输过程中是否发生错误。
- 校验位可以是奇校验或偶校验。
- 奇校验:数据位中1的个数加上校验位后为奇数。
- 偶校验:数据位中1的个数加上校验位后为偶数。
- 停止位(Stop Bit):
- 通常是一个高电平(1),用于标记数据传输的结束。
- 停止位的宽度可以是一个或两个比特时间。
51单片机快速入门之串口中断的应用
举例说明:通过 串口控制1602 显示文字
1602驱动代码(省略),不会写的参考 之前的文章.
串口通信原理:
- 接收:
RXD串口信息过来,当接收到起始信号,SCON寄存器将打开接收,允许接收,通过T1 计数器/定时器 来产生移位脉冲 由低位到高位传入 移位寄存器,再 传输到SBUF(数据缓冲器) 中 中断后可取出其中内容
串口初始化:
SCON = 0x50;:设置串口工作方式 1(8 位数据,1 位停止位)。PCON = 0x00;:不使用倍速模式。配置 T1 计数器/定时器
定时器初始化:
TMOD = 0x20;:设置定时器 1 为模式 2(8 位自动重装)。TH1 = 0xA0;设置初值,计算公式为256 - (晶振频率(晶振频率需要转换成 Hz(赫兹)1 MHz 等于 (10^6) Hz) / 12 / 波特率)。对于 11.0592 MHz 的晶振和 9600 bps 的波特率,初值为0xFD。1 MHz 等于 (10^6) Hz 11.0592x10^6 =11059200 11059200/12/9600=96 256-96=160 1010 0000 A0TL1 = 0xA0;TR1 = 1;:启动定时器 1。
- 发送:
只需要把数据写入SBUF中即可发送
串口中断代码:
#include <STC89C5xRC.H>#include <intrins.h>typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;sbit rs = P3^3;
sbit rw = P3^4;
sbit ep = P3^5;BYTE *rr= "WELCOME!1602";
BYTE *rt= "2024/11/24";
void delay(BYTE ms); //延时
void lcd_wdat(BYTE dat);//因为不能在声明前使用,这里声明一下函数1602 输出
void lcd_pos(BYTE pos);
void lcd_wcmd(BYTE cmd);void Uart1_Init(void) //9600bps@18.432MHz
{PCON &= 0x7F; //波特率不倍速SCON = 0x50; //8位数据,可变波特率AUXR &= 0xFE; //串口1选择定时器1为波特率发生器TMOD &= 0x0F; //设置定时器模式TMOD |= 0x20; //设置定时器模式TL1 = 0xF6; //设置定时初始值TH1 = 0xF6; //设置定时重载值ET1 = 0; //禁止定时器中断TR1 = 1; //定时器1开始计时
}void delay(BYTE ms)
{while(ms--);
}void lcd_wcmd(BYTE cmd)
{rs = 0;rw = 0;ep = 1;P0 = cmd;delay(500);ep = 0;}void lcd_wdat(BYTE dat)
{rs = 1;rw = 0;ep = 1;P0 = dat;delay(500);ep = 0;}lcd_init()
{lcd_wcmd(0x3c);delay(50);lcd_wcmd(0x0f);delay(50);lcd_wcmd(0x01);delay(50);}int main(void)
{unsigned char dtt=33;P10=0;lcd_init();lcd_wcmd(0x01);delay(50);lcd_wcmd(0x80);while(*rr) {lcd_wdat(*rr);rr++;}lcd_wcmd(0xc0);while(*rt) {lcd_wdat(*rt);rt++;}Uart1_Init();SBUF=dtt;while(TI==0);TI=0;}
发现电脑串口无法识别单片机发出的信息2024/11/26
相关文章:
51单片机快速入门之中断的应用 2024/11/23 串口中断
51单片机快速入门之中断的应用 基本函数: void T0(void) interrupt 1 using 1 { 这里放入中断后需要做的操作 } void T0(void): 这是一个函数声明,表明函数 T0 不接受任何参数,并且不返回任何值。 interrupt 1: 这是关键字和参…...
[Java]微服务配置管理
介绍 代码拆分为微服务后, 每个服务都有自己的配置文件, 而这些配置文件中有很多重复的配置, 并且配置变化后需要重启服务, 才能生效, 这样就会影响开发体验和效率 配置管理服务可以帮助我们集中管理公共的配置, 并且nacos就可以实现配置管理服务 配置共享 我们可以把微服务共…...
c/c++ 用easyx图形库写一个射击游戏
#include <graphics.h> #include <conio.h> #include <stdlib.h> #include <time.h>// 定义游戏窗口的大小 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600// 定义玩家和目标的尺寸 #define PLAYER_SIZE 50 #define TARGET_SIZE 20// 玩家的结构…...
Rust eyre 错误处理实战教程
在《Rust 错误处理库: thiserror 和 anyhow》中我们介绍了Rust简化处理错误策略,本文解释eyre错误处理库,并通过多个实际示例进行说明,最后于anyhow库进行对比,让你更好理解其应用场景。 eyre是一个用于 Rust 的错误处理库&#x…...
面试小札:JVM虚拟机
1. 定义与基本概念 - JVM(Java Virtual Machine)即Java虚拟机,是Java程序的运行核心。它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来运行Java字节码。字节码是一种中间格式,它使得Java程序能…...
Docker扩容操作(docker总是空间不足)
Docker扩容操作(docker总是空间不足) 1、df二连,一共也就70g,总是占满93%以上。所以需要移动到其他目录上 查看docker镜像和容器存储目录的空间大小 du -sh /var/lib/docker/2、停止docker服务 systemctl stop docker3、首先创建目录并迁移 # 首先创…...
数字图像处理(4):FPGA中的定点数、浮点数
(1)定点数:小数点固定在数据的某一位置的数,可以分为定点整数和定点小数和普通定点数。定点数广泛应用于数字图像处理(图像滤波、图像缩放)和数字信号处理(如FFT、定点卷积)中。 定…...
毕昇入门学习
schemas.py 概述 这段代码主要定义了一系列基于 Pydantic 的数据模型(BaseModel),用于数据验证和序列化,通常用于构建 API(如使用 FastAPI)。这些模型涵盖了用户认证、聊天消息、知识库管理、模型配置等多…...
2411C++,学习C++提示4
结构绑定 auto [first, ...ts] std::tuple{1, 2 ,3};assert(1 first);浮点作为非类型模板参数 template<double Value> constexpr auto value Value;int main() {std::cout << value<4.2>; // prints 4.2 }template<double... Vl1s, double... Vl2s&g…...
STM32-- 看门狗--介绍、使用场景、失效场景
STM32 中的看门狗(Watchdog Timer,简称 WDG)有两种主要类型:独立看门狗(IWDG) 和 窗口看门狗(WWDG)。它们的喂狗机制各有特点,主要区别如下: 1. 独立看门狗&a…...
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构主要是指数据库中的各种数据库对象,包括:数据库集群、数据库、表、索引、视图等等。所有数据库对象都有各自的对象标识符oid(object identifiers),它是一个无符号的四字节整数,相关对象的oid都…...
linux安全管理-会话安全
文章目录 1 设置命令行界面超时退出2 配置终端登录失败策略3 配置 SSH 登录失败策略 1 设置命令行界面超时退出 1、检查内容 检查操作系统是否设置命令行界面超时退出。 2、配置要求 操作系统设置命令行界面超时退出。 3、配置方法 配置命令行界面超时时间,编辑/et…...
Ubuntu监视显卡占用情况
在终端中运行 watch -n 0.5 nvidia-smi【以下内容由大模型生成】 watch -n 0.5 nvidia-smi 是一个组合命令,用于在 Linux 终端中定期执行 nvidia-smi 命令并显示其输出。让我们分解一下这个命令的各个部分: watch: watch 是一个用于定期执行其他命令并显…...
学成在线day06
上传视屏 断点续传 通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成&…...
Mac安装及合规无限使用Beyond Compare
文章目录 Beyond CompareBeyond Compare简介Beyond Compare安装Beyond Compare到期后继续免费使用 Beyond Compare Beyond Compare简介 Beyond Compare 是一款由 Scooter Software 开发的文件和文件夹比较工具。它主要用于对比两个文件或文件夹之间的差异,并支持文…...
【青牛科技】2K02 电动工具专用调速电路芯片描述
概述: 2K02 是电动工具专用调速电路。内置稳压电路,温度系数好,可以调节输出频率以及占空比的振荡输出,广泛的应用于小型电钻,割草机等工具。 主要特点: ● 电源电压范围宽 ● 占空比可调 ● 温度系数好 …...
基于SpringBoot实现的民宿管理系统(代码+论文)
🎉博主介绍:Java领域优质创作者,阿里云博客专家,计算机毕设实战导师。专注Java项目实战、毕设定制/协助 📢主要服务内容:选题定题、开题报告、任务书、程序开发、项目定制、论文辅导 💖精彩专栏…...
安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2
本篇主要针对只使用过QT5的qmake,没有用过MSVC,VS的老同学。 建议一部分一部分安装,全部勾选安装遇到问题会中断,前功尽弃。 我自己需要的是QT5,编出的软件用在公司设备上。 QT6:建议也安装学习…...
MinIO常见操作及Python实现对象的增删改查
MinIO常见操作 MinIO是一个高性能的开源对象存储服务,它兼容Amazon S3云存储服务API。在MinIO中,常见的操作包括: 存储桶操作: 创建、列出、获取信息、删除存储桶。 对象操作: 上传、下载、列出、删除对象。 权限管理&…...
网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
目录 1,网络字节序和主机字节序 2. 函数的具体作用 2.1,htonl(Host to Network Long) 2.2,htons(Host to Network Short) 2.3,ntohl(Network to Host Long) 2.4,ntohs(Network to Host Sho…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
