当前位置: 首页 > news >正文

51单片机------中断系统

1.中断系统的基本概念和处理流程

(1)中断

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

(2)中断源

        实现中断功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。

(3)中断处理流程

1.中断源发出中断请求:

        中断源通过特定信号,向 CPU 或内核发起 “需要即时处理” 的请求,触发中断流程。

2.内核检查是否响应相应中断以及该中断是否被屏蔽

     内核通过查询中断控制器的配置,判断两要素:一是该中断是否在 “可响应中断列表” 内;二是该中断是否被 “中断屏蔽字” 禁用。

3.内核会检查中断的中断优先级:

        内核读取中断对应的优先级标识,判断其优先级是否高于当前正在执行任务的优先级 —— 仅高优先级中断可 “抢占” 当前任务,低优先级则排队等待。

4.保护现场:

        内核将当前 CPU 寄存器的数值、当前任务的上下文保存至指定存储区,确保后续恢复后能回到中断前的执行状态。

5.执行中断服务函数;

        内核跳转到该中断对应的 “中断服务程序” 入口,执行预设的处理逻辑,这是中断的核心处理环节。

6.恢复现场;

        从存储区中取出步骤 4 保存的寄存器值和任务上下文,恢复 CPU 状态,让系统回到中断发生前的执行点,继续运行被中断的任务

(4)中断嵌套

        当CPU正在处理一个中断源请求的时候(即执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。

(5)中断向量表

        中断向量表是存储于内存固定地址的核心数据结构,其本质是建立 “中断号(唯一中断标识)” 与 “中断服务程序(ISR)入口地址” 的一一映射,为 CPU / 内核提供中断响应时快速定位服务程序的 “索引表”,是中断机制高效寻址的基础。

(6)51单片机的定时器工作原理

原理:

        51 单片机定时器本质是可编程减计数 / 加计数硬件模块,核心基于内部晶振分频后的时钟脉冲驱动,通过预设计数初值、配置工作模式,实现定时(按时间间隔触发)或计数(对外部脉冲计数)功能,溢出时可触发中断或输出信号。

步骤:

  1. 时钟源与分频:定时器时钟来自单片机晶振经分频(如 12 分频)后的脉冲信号,或外部引脚输入的脉冲(计数模式);
  2. 计数与初值配置:通过寄存器设置计数初值(补偿满量程计数差值,实现精准定时 / 计数),模块按时钟脉冲累加 / 累减计数;
  3. 溢出与触发:当计数值达到模块满量程(如 16 位定时器计至 65535)时产生 “溢出”,触发中断请求(需开启中断使能),或置位标志位,完成一次定时 / 计数周期,随后可自动重装初值(部分模式)重复运行 。

(7)PWM

定义:

        PWM(Pulse Width Modulation,脉冲宽度调制)是一种通过周期性输出高低电平脉冲信号,以调节高电平(有效电平)在一个周期内占比,从而等效控制输出 “平均电压 / 功率” 的数字信号调制技术。其核心是利用数字电路的离散电平,模拟出连续的模拟量输出效果,广泛应用于电机调速、灯光调光、电源稳压等场景。

PWM 核心参数

参数名称定义
周期(Period)脉冲信号完成一次 “高电平 + 低电平” 循环的时间,单位通常为 μs、ms,与 “频率” 成反比(频率 = 1 / 周期)。
频率(Frequency)单位时间内脉冲信号的循环次数,单位为 Hz,决定信号切换的快慢,影响负载(如电机)的响应特性。
占空比(Duty Cycle)一个周期内,高电平(有效电平)持续时间与周期的比值,通常用百分比表示,是 PWM 控制 “平均输出量” 的核心参数(如占空比 50% 即高、低电平各占周期一半)。
分辨率(Resolution)占空比可调节的最小精度,由生成 PWM 的硬件(如定时器位数)决定,例如 8 位 PWM 的分辨率为 1/2⁸=0.39%,意味着占空比可按 0.39% 的步长调节。
幅值(Amplitude)脉冲信号的高电平电压值(如 5V、12V),即信号的最大输出电平,决定负载可获得的最大电压 / 功率上限。

2.51单片机定时器与蜂鸣器模块

类型专业定义核心特征(本质区别)
有源蜂鸣器内置音频振荡驱动电路的蜂鸣器,只需接入直流电源(如 DC 3V/5V),即可通过内部电路自激振荡产生固定频率的声音。内置驱动电路,通电即响,发声频率固定。
无源蜂鸣器仅由压电陶瓷片 / 电磁线圈等发声元件构成,无内置驱动电路,需外部输入特定频率的交变方波信号(高低电平交替),才能驱动发声元件振动产生声音。无内置驱动电路,需外部信号驱动,发声频率由外部信号决定。

        由于51单片机中一般为源蜂鸣器,因此可以利用定时器在一定时间内对蜂鸣器进行频繁的通电与断电来控制蜂鸣器的频率

eg:

#include <reg52.h>
#include "key.h"void int_key(void)
{P1 |= 0x0F << 4;P3 |= 1 << 5;
}int key_pressed(void)
{static int ret = 0;if((P1 & (1 << 4)) == 0){ret = 1;}else if((P1 & (1 << 5)) == 0){ret = 2;}else if((P1 & (1 << 6)) == 0){ret = 3;}else if((P1 & (1 << 7)) == 0){ret = 4;}else if((P3 & (1 << 5)) == 0){ret = 5;}return ret;
}
#include <reg52.h>
#include "key.h"#define Hz100 60285
#define Hz200 63035
#define Hz300 63835
#define Hz400 64285
#define Hz500 64535unsigned short n;void init_time0(void)
{TMOD &= ~(3 << 2);TMOD &= ~(3 << 0);TMOD |= (1 << 0);TH0 =  n >> 8;TL0 =  n;IE |= (1 << 7) | (1 << 1);
}void time0_rountine(void) interrupt 1
{
/*static int cont = 0;++cont;if(500 == cont){P2 ^= 0xFF;cont = 0;}
*/P2 ^= (1 << 1);TH0 = n >> 8;TL0 = n;
}int main(void)
{P1 &= ~(0xF << 0);init_time0();int_key();while(1){int key = 0;key = key_pressed();if(1 == key){n = Hz100;TCON |= (1 << 4);	}else if(2 == key){n = Hz200;TCON |= (1 << 4);}else if(2 == key){n = Hz300;TCON |= (1 << 4);}else if(2 == key){n = Hz400;TCON |= (1 << 4);}else if(2 == key){n = Hz500;TCON |= (1 << 4);}else{TCON &= ~(1 << 4);	}}
}


文章转载自:

http://kd3nJMTR.jwwfk.cn
http://zvyh7YqY.jwwfk.cn
http://2rExT0yc.jwwfk.cn
http://gAwXO0sL.jwwfk.cn
http://bfiql4b9.jwwfk.cn
http://8RvVnsUC.jwwfk.cn
http://nrMZTxfm.jwwfk.cn
http://AzsgQklt.jwwfk.cn
http://rnuuzDoK.jwwfk.cn
http://JOyMYHKD.jwwfk.cn
http://0mKIk857.jwwfk.cn
http://OCiqyuak.jwwfk.cn
http://b19pSIEK.jwwfk.cn
http://BhiEOAHG.jwwfk.cn
http://dvp6vwZG.jwwfk.cn
http://bVVRS9ua.jwwfk.cn
http://rqXlXTiO.jwwfk.cn
http://WQc7N1Cd.jwwfk.cn
http://gpQBLmBH.jwwfk.cn
http://fzWLr3fz.jwwfk.cn
http://yST72Vbu.jwwfk.cn
http://akWdUbFm.jwwfk.cn
http://LuAkk1sK.jwwfk.cn
http://SdshTbEW.jwwfk.cn
http://VD57L9gj.jwwfk.cn
http://T49iJcyu.jwwfk.cn
http://3jBpcKQT.jwwfk.cn
http://wBIDJKN2.jwwfk.cn
http://9zy6rOTI.jwwfk.cn
http://x3HBHJGt.jwwfk.cn
http://www.dtcms.com/a/366563.html

相关文章:

  • iOS 抓包工具怎么选?开发者的实战经验与选择指南
  • 缓存雪崩、穿透、击穿解决方案
  • 【数据可视化-107】2025年1-7月全国出口总额Top 10省市数据分析:用Python和Pyecharts打造炫酷可视化大屏
  • NV 工具metrics分析(ncu, nsys/torch profiler)
  • 水下管道巡检机器人结构设cad+三维图+设计说明书
  • 阿里云轻量应用服务器部署WordPress与配置SSL 证书
  • 【mmcv自己理解】
  • 解密llama.cpp:从Prompt到Response的完整技术流程剖析
  • Python基础(①⑤heapq模块)
  • 大数据工程师认证推荐项目:基于Spark+Django的学生创业分析可视化系统技术价值解析
  • 出海马来西亚,九识智能携手ALS共同启动首个自动驾驶物流车公开道路试运行
  • AIcoding- Aider项目架构概览学习笔记
  • vue3 + vite + Element Plus项目中 SCSS 预处理器完整配置指南
  • CSS 优先级详解:理解选择器权重和层叠规则
  • 「IoC容器式学习法」:一种让知识按需注入的顶级思维模型
  • 前端基础(四十二):非固定高度的容器实现折叠面板效果
  • 【Element Plus 表单组件样式统一 CSS 文字特效实现指南】
  • HTML + CSS 创建图片倒影的 5 种方法
  • 解决 Rollup failed to resolve import “vue3-json-viewer/dist/index.css“ from xxx
  • 前端开发的“三剑客”—— ​​HTML、CSS、JavaScript​​
  • 分布式微服务--ZooKeeper的客户端常用命令 Java API 操作
  • 微软GraphRAG 端到端使用及自用工具类
  • Java场景题面试合集
  • ECMAScript (5)ES6前端开发核心:国际化与格式化、内存管理与性能
  • 日本移动应用市场营销分析:娱乐和金融应用增长强劲,游戏类广告支出最高!
  • UDS统一诊断服务
  • 服务器不支持node.js16以上版本安装?用Docker轻松部署Node.js 20+环境运行Strapi项目
  • Simulations RL 平台学习笔记
  • 基于华为云的STM32F103C8T6智能停车场管理系统
  • 分布式对象存储系统 Minio 之 Centos 环境安装