51单片机

中断系统

1.什么是中断

当CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断

2.为什么要设置中断系统

中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的

3.中断优先级:在执行中断的过程中,如果外界又发生一次中断,比较中断优先级,优先处理优先级高的中断

4.外部中断:引脚电平变化所引发的中断(P3_2由高电平变为低电平 触发中断)

3.中断的执行流程是什么?

中断源发出中断请求;

CPU检查该中断源是否被屏蔽,处理器内核是否允许处理中断;

查询中断优先级;

保护现场;

执行中断服务函数;

恢复现场;

4.中断源

51单片机只有前五个中断源,优先级自上而下

外部中断0, 定时器0, 外部中断1, 定时器1, 串口通信

中断向量表

中断向量表是一个函数指针数组,在内存中有固定的存储单元地址,每个地址对应一个中断源的中断服务程序入口,当中断源触发中断时,CPU会自动跳转到该中断源在向量表中对应的固定地址

51单片机外设

1.GPIO类

        ds18b20,DHT11,HCSR04

2.ADC类

        MQ系列,气体浓度,烟雾浓度

3.I2C

        MPU6050六轴加速度传感器

        MAX301000血氧浓度传感器

        BH1750光照强度传感器

SPI类

        ADXL345三轴加速度传感器

UART类

        GPS传感器

三大总线

        地址总线:专门用于传输地址信息,由CPU单向传输,指向内存和外设

        数据总线:CPU和内存/外设双向传输

        控制总线:CPU向内存/外设发出指令,内存/外设向CPU反馈状态

GPIO

通用输入输出端口,51单片机与外界交互最基本的方式

引脚:两种模式 输入模式 输出模式

输出功能:引脚独立去输出一个高电平(5V)/低电平(0V)

输入功能:检测引脚电平状态        按键

PWM

脉冲宽度调制

高电平所占的总周期的比例叫占空比 

有源蜂鸣器---接入直流电就可以发声,只能发出固定频率的声音

无源蜂鸣器---需要脉冲信号,不同频率不同音调            源->震荡源

通信方式

        单工:两个主机之间通过一根数据线进行传输,发送方和接收方是固定的,数据传输方向是固定的

        半双工:两个主机之间通过一根数据线进行传输,通信的双方既可以作为发送方也可以作为接收方,数据的传输方向是双向的

        全双工:两个主机之间通过两根线进行传输,通信的双方既可以作为发送方也可以作为接收方,数据的传输方向是双向的

串行:传输数据时通过一根线实现,需要按照1个bit1个bit的次序先后传输(资源消耗小->1根线,传输速度慢)

并行:多个bit在多根数据线上同时进行传输(传输速度快,资源消耗大,需要多根线)

串口通信-全双工串行通信

TTL工作流程

①空闲时数据线为高电平

②发送一个低电平表示起始位

③发送的第一个比特是最低位(最右边) 

④校验位分为奇校验,偶校验和无校验

⑤为保证下一个字节发送前的起始位能够表现出来,校验位之后发送一个停止位1

串口通信时序

        起始位+数据位(8bit)+校验位(奇偶校验)+停止位

波特率bps:每秒传输的bit数量

9600,n,8,1             9600bps,无校验,8位数据位,1位停止位

同步和异步

        串口通信通过波特率实现同步

        I2C通过时钟线实现同步

UART

通用异步收发器

代码

中断寄存器配置

1.IE寄存器:中断控制寄存器

        EA(B7):手动置1,代表CPU响应所有的中断

        EX0(B1):手动置1,代表允许外部中断0产生中断

2.TCON寄存器  定时器控制寄存器

IT0(B0):置1,代表外部中断0(P3_2)在下降沿触发中断

main.c

#include <reg51.h>
#include "led.h"
void init_eint(void)
{P3 |= (1 << 2) | (1 << 3);IE |= (1 << 7) | (1 << 0) | (1 << 2);TCON |= (1 << 0) | (1 << 2);
}void eint0_handler(void) interrupt 0
{Led_Allon();
}void enin1_handler(void) interrupt 2
{Led_Alloff();
}
int main(void)
{init_eint();Led_Init();while (1){}
}

led.c

#include <reg51.h>void Led_Init(void)
{P2 = 0xFF;
}void Led_Allon(void)
{P2 = 0;
}void Led_Alloff(void)
{P2 = 0xFF;
}

PWM控制蜂鸣器

蜂鸣器以400HZ工作时

代码

timer.c

#include "timer.h"
#include "led.h"
#include <reg51.h>
unsigned int g_t = 0;void Timer0_Handler(void) interrupt 1	//定时器0中断服务函数
{	P2 ^= (1 << 1); //指定位翻转TH0 = 64383 >> 8; //高位TL0 = 64383; //低位
}
void Timer0_Init(void)	 //定时器0初始化
{IE |= (1 << 7) | (1 << 1);//打开中断总控制和T0溢出中断//初始化定时器寄存器TMOD &= ~(0x0F << 0);TMOD |= (1 << 0);TH0 = 64383 >> 8;TL0 = 64383;TCON |= (1 << 4);	
}

main.c

#include "timer.h"
#include "led.h"
#include "key.h"
int main(void)
{ Timer0_Init();while (1){	}	return 0;
}

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

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

相关文章

前端开发:HTML(5)—— 表单

下面我们来学习表单。 目录 什么是Web表单&#xff1f; 表单标签 1.form标签 2.输入框 文本框和密码框 单选框和复选框 1.单选框 2.复选框 3.按钮 &#xff08;1&#xff09;普通按钮 &#xff08;2&#xff09;提交按钮 &#xff08;3&#xff09;重置按钮 &#…

【YOLOv8改进 - C2f融合】C2f融合SFS-Conv(空间 - 频率选择卷积)提升特征多样性,同时减少参数和计算量

YOLOv8目标检测创新改进与实战案例专栏 专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例 专栏链接: YOLOv8基础解析+创新改进+实战案例 文章目录 YOLOv8目标检测创新改进与实战案例专栏 介绍 摘要 文…

如何将照片从POCO手机传输到Mac电脑

将照片从POCO手机传输到Mac电脑可能会有些困难&#xff0c;因为与iPhone不同&#xff0c;POCO设备没有原生的macOS支持。这常常让用户寻找简单、有效的方法来移动图片&#xff0c;同时避免丢失质量&#xff0c;节省时间&#xff0c;并避免复杂的软件设置。如果你想知道如何将照…

最新教程 | CentOS 7 内网环境 Nginx + ECharts 页面离线部署手册(RPM 安装方式)

&#x1f4c1; 一、准备阶段&#xff08;在联网电脑上完成&#xff09; 1.1 下载 Nginx 官方 RPM 安装包 在联网电脑浏览器中访问 Nginx 官方稳定版本仓库&#xff1a; &#x1f517; 地址&#xff1a;http://nginx.org/packages/centos/7/x86_64/ ☁️云盘&#xff1a;htt…

Redis 常用数据类型 (下)

文章目录前言一 Hash 哈希1. Hash 相关命令hset 和 hgethexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyincrbyfloat2. Hash 命令小结3. Hash 内部编码Hash 在缓存中的应用场景介绍缓存方式对比二、List 列表1. LIST总体介绍2. List 普通命令lpushlpushxrpushrpushxlrange…

Java Lambda表达式:简洁高效的函数式编程

1 lambda表达式Lambda 表达式本质是一个匿名函数&#xff0c;用于把函数作为参数&#xff0c;传入方法中&#xff0c;实现函数式编程风格。使用Lambda 表达式可以使代码变的更加简洁紧凑。语法格式&#xff1a;(parameters)-> expression 或 (parameters)->{ statements…

python中的集合

目录 初识集合 集合的含义 集合的作用 集合的使用场景 集合的定义 集合的常用操作 元素的增加 函数add() 元素的删除 函数remove() 函数clear() 函数pop() 集合的遍历 for循环 while循环 初识集合 集合的含义 在pyrhon中&#xff0c;集合是一种内置的数据结构…

如何将普通HTTP API接口改造为MCP服务器

在现代微服务架构中&#xff0c;MCP&#xff08;Mesh Configuration Protocol&#xff09; 作为高效配置分发协议&#xff0c;正逐渐替代传统HTTP API。本文将手把手教你如何将普通HTTP API升级为高性能MCP服务器。 为什么需要MCP&#xff1f; 传统HTTP API在配置分发场景存在…

数据结构第8问:什么是树?

树 【本节仅描述树的定义、术语以及相关性质】 定义 树是由若干个结点组成的有限集合。具有如下特征&#xff1a; 有且仅有一个根结点&#xff1b;除根结点外&#xff0c;每个其它结点有且仅有一个直接的父结点&#xff1b;除根结点外&#xff0c;每个结点可以有零个或者多个子…

PyTorch RNN 名字分类器

PyTorch RNN 名字分类器详解 使用PyTorch实现的字符级RNN&#xff08;循环神经网络&#xff09;项目&#xff0c;用于根据人名预测其所属的语言/国家。该模型通过学习不同语言名字的字符模式&#xff0c;够识别名字的语言起源。 环境设置 import torch import string import un…

面向对象之类方法,成员变量和局部变量

1.类的方法必须包含几个部分&#xff1f;2.成员变量和局部变量类的方法必须包含哪几个部分&#xff1f;.方法名&#xff1a;用于标识方法的名称&#xff0c;遵循标识符命名规则&#xff0c;通常采用驼峰命名法。返回值类型&#xff1a;指定方法返回的数据类型。如果方法不返回任…

古法笔记 | 通过查表进行ASCII字符编码转换

ASCII字符集是比较早期的一种字符编码&#xff0c;只能表示英文字符&#xff0c;最多能表示128个字符。 字符集规定了每个字符和二进制数之间的对应关系&#xff0c;可以通过查表完成二进制数到字符的转换ASCII字符占用的存储空间是定长的1字节 ASCII字符的官方码点表见下图&…

Linux C实现单生产者多消费者环形缓冲区

使用C11里的原子变量实现&#xff0c;没有用互斥锁&#xff0c;效率更高。ring_buffer.h:/*** file ring_buffer.h* author tl* brief 单生产者多消费者环形缓冲区&#xff0c;每条数据被所有消费者读后才释放。读线程安全&#xff0c;写仅单线程。* version* date 2025-08-06*…

复杂场景识别率↑31%!陌讯多模态融合算法在智慧环卫的实战解析

摘要&#xff1a;针对边缘计算优化的垃圾堆放识别场景&#xff0c;本文解析了基于动态决策机制的视觉算法如何提升复杂环境的鲁棒性。实测数据显示在遮挡/光照干扰下&#xff0c;mAP0.5较基线提升28.3%&#xff0c;误报率降低至行业1/5水平。一、行业痛点&#xff1a;智慧环卫的…

MyBatis-Plus Service 接口:如何在 MyBatis-Plus 中实现业务逻辑层??

全文目录&#xff1a;开篇语前言1. MyBatis-Plus 的 IService 接口1.1 基本使用示例&#xff1a;创建实体类 User 和 UserService1.2 创建 IService 接口1.3 创建 ServiceImpl 类1.4 典型的数据库操作方法1.4.1 save()&#xff1a;保存数据1.4.2 remove()&#xff1a;删除数据1…

[激光原理与应用-168]:光源 - 常见光源的分类、特性及应用场景的详细解析,涵盖技术原理、优缺点及典型应用领域

一、半导体光源1. LED光源&#xff08;发光二极管&#xff09;原理&#xff1a;通过半导体PN结的电子-空穴复合发光&#xff0c;波长由材料带隙决定&#xff08;如GaN发蓝光、AlGaInP发红光&#xff09;。特性&#xff1a;优点&#xff1a;寿命长&#xff08;>5万小时&#…

Metronic v.7.1.7企业级Web应用前端框架全攻略

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Metronic是一款专注于构建响应式、高性能企业级Web应用的前端开发框架。最新版本v.7.1.7引入了多种功能和优化&#xff0c;以增强开发效率和用户体验。详细介绍了其核心特性&#xff0c;包括响应式设计、多种模…

鸿蒙开发--Notification Kit(用户通知服务)

通知是手机系统中很重要的信息展示方式&#xff0c;通知不仅可以展示文字&#xff0c;也可以展示图片&#xff0c;甚至可以将组件加到通知中&#xff0c;只要用户不清空&#xff0c;通知的信息可以永久保留在状态栏上通知的介绍 通知 Notification通知&#xff0c;即在一个应用…

鸿蒙 - 分享功能

文章目录一、背景二、app发起分享1. 通过分享面板进行分享2. 使用其他应用打开二、处理分享的内容1. module.json5 配置可接收分享2. 解析分享的数据一、背景 在App开发中&#xff0c;分享是常用功能&#xff0c;这里介绍鸿蒙开发中&#xff0c;其他应用分享到自己的app中&…

【Agent 系统设计】基于大语言模型的智能Agent系统

一篇阿里博文引发的思考和探索。基于大语言模型的智能Agent系统 1. 系统核心思想 核心思想是构建一个以大语言模型&#xff08;LLM&#xff09;为“大脑”的智能代理&#xff08;Agent&#xff09;&#xff0c;旨在解决将人类的自然语言指令高效、准确地转化为机器可执行的自动…