嵌入式51单片机——中断

GPIO

Genral Purpose Input Output:通用输入输出,是与外界交互最基本的形式,可以独立的将引脚配置为输入/输出模式

输出模式:控制引脚输出高电平/低电平(给定控制信号)

1,开漏输出

2,推挽输出

3,复用开漏

4,复用推挽

输入模式:检测引脚的电平(接收外部信号)

1,上拉输入:在引脚外部接了一个上拉电阻(引脚空闲状态高电平)

2,下拉输入:在引脚外部接了一个下拉电阻(引脚空闲状态低电平)

3,浮空输入:引脚空闲状态电平不确定

4,模拟输入(主要用于ADC)

注:51单片机没有这些模式

独立按键

原理图

工作原理:

当按键未被按下时,引脚会呈现高电平,当按键被按下时,会造成引脚和GND短路到一起,此时对应的引脚会呈现低电平,所以判断按键是否被按下,秩序判断引脚是否为低电平即可

结合数码管原理图可看出,P10---P13四个引脚管理数码管,P14---P17管理独立按键,所以P1的八位二进制,第0位到第3位管理独立按键,第4位到第7位管理数码管

需要说明的是,K5是由P35管理,部分 单片机 只有四个按键,没有K5

实物图

通过按键控制

二极管

注意:图中有错误,key_press最后一行的return应该返回5

如果在while里没有初始化,那么二极管亮起则不会熄灭。

如图代码可使得二极管对应按键亮起,只能亮起一个,若要同时亮起多个二极管,将key_press函数中的return去掉即可

数码管

注意:图中有错误,key_press最后一行的return应该返回5

main函数与二极管相同。

与二极管key_press不同的是,数码管中循环的n是从1开始,因为二极管没有D0去对应K1,但是数码管是可以显示0,如果key_press与二极管相同,那么按K1变会出现0,以此类推

中断

概念:当CPU正在执行某个任务时,此时外界发生了一个紧急的事件,要求CPU能暂停当前的任务,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续执行原来的工作的过程

中断源

能打断CPU执行当前任务的源头或事件

分类

1,外部中断0:INT0 → P32引脚

2,外部中断1:INT1→P33引脚

外部中断是引脚电平变化引发的中断,有两种触发条件,一种是从高电平变为低电平的下降沿触发,另一种是持续低电平触发


3,定时器0

4,定时器1

5,串口

优先级

当CPU在执行一个任务的时候,此时可能有多个中断源同时发起中断请求,此时CPU比较中断源的优先级,优先处理优先级高的中断

注:51单片机只有前五个

由图可知,外部中断0的优先级最高。左侧为自动设置优先级,而右侧为手动设置优先级(一般不设置)

中断嵌套

CPU在处理一个中断任务的时候,再去嵌套另外的一个中断任务

注:在51单片机中最多嵌套两层

中断处理流程

1,中断源发出中断请求

2,检查CPU是否允许中断及该中断源是否被屏蔽

3,比较中断优先级

4,保护现场

5,执行中断处理函数

6,恢复现场

中断处理函数

每个中断源都有与之对应的中断处理函数,而这些函数需要在程序中写好,不需要调用,当中断处理到第五步时自动执行

注意:最后的interrupt是中断标号,一定要写,代表了中断向量,存放函数的地址

中断寄存器

注:XICON在51单片机中没有,IPH和IP用来改变优先级

IE寄存器 中断允许寄存器

EA相当于电闸总开关,置1代表CPU允许所有的中断请求,置0代表CPU屏蔽所有的中断请求

TCON寄存器 定时器/计数器中断控制寄存器

IT0置1/0,代表外部中断0引脚(P32引脚)下降沿/低电平触发中断

外部中断0初始化函数

1,外部中断0引脚设置高电平

2,EA的bit7和bit0置1,允许CPU响应所有中断及外部中断0可以产生中断

3,将TCON寄存器中的bit0置1,代表外部中断0引脚下降沿可以触发中断(可以通过杜邦线产生下降沿,将P32和GND短接)

4,当外部中断0引脚产生下降沿时,会向CPU发起中断请求,此时TCON寄存器的IE0会由硬件自动置1

5,CPU执行外部中断0对应的中断处理函数,此时TCON寄存器的IE0会由硬件自动清0

通过数码管反应外部中断0次数

如图所示,通过杜邦线P32和GND短接在一起,使得P32产生下降沿,产生一次计数器g_n便加一

定时器

产生精准时间,不同外设 对时间要求是精准的

注:51单片机中有两个定时器,分别是Timer0和Timer1,是自增型定时器

工作原理:定时器内部有16位占两个字节的计数器,给定计数器一个初值,会按照1us的速率进行自增,加到65535溢出时向CPU发起中断请求,CPU响应中断并执行中断处理函数

1ms定时

1s = 1000ms;1ms = 1000us

单片机工作频率:1MHZ = 1 * 10 ^ 6HZ(外部晶振提供12MHZ频率,但实际上经过降频)

完成一条指令的时间:1/1MHZ = 1us

所以定时器初值:65535 - 1000 = 64535

定时器寄存器

TL0:定时器0的低位

TH0:定时器0的高位

在51单片机中,将short类型的两个字节分成上述两部分,所以得出的初值,其高位应放在TH0,低位放在TL0

TMOD定时器模式配置寄存器

低4位控制定时器0,高4位控制定时器1

注:51单片机中没有00模式

步骤(以计时器0为例)

1,将TMOD寄存器中的低4位清0

2,将M0置1,M1清0,代表定时器0工作在16位定时器模式下

TCON 定时器控制寄存器

将TCON寄存器中的TR0这一位置1,代表打开定时器,开始计数

注意:需要将IE寄存器中的bit7和bit1置1,代表允许CPU响应所有中断 + 允许定时器0产生中断

二极管一秒间隔闪烁

PWM

Pulse Width Modulation:脉冲宽度调制,能让引脚产生一个方波,让引脚电平周期性的翻转

PWM周期:一个方波所经历的周期,即从上升沿/下降沿到下一个上升沿/下降沿所需要的时间

PWM占空比:高电平在一个PWM周期所占的比例

可用于手机亮度调节

蜂鸣器

震荡源 声音(波)→音调→波的频率发生变化→高频高音,低频低音→音量→振幅 能量大小

有源蜂鸣器:内部有震荡源,上电后会持续发出固定频率的声音

无源蜂鸣器:内部没有震荡源,需要给定蜂鸣器一个震荡

原理图

给基极一个高电平,三极管导通,蜂鸣器开始工作,给低电平,则不会工作

实物图

通过蜂鸣器发出不同HZ声音

通过杜邦线将P11两个引脚接到一起,此时通过来回翻转P21,来产生震荡,使蜂鸣器发出声音

计算hz(以200hz为例)

PWM周期时间:1/200 = 0.005s,所以高低电平均为0.0025s

单片机工作频率:1000000Hz,所以执行一次需要0.000001s

所以定时器初值:0.0025/0.000001 = 2500 → 65535 - 2500 = 63035

代码及其效果

效果是按键K1对应200HZ,K2对应400HZ以此类推

其中按键函数对应K1~K5,但是HZ数组包含HZ[0],所以在主函数改变HZ时,n要减一

相关推荐
项目題供诗22 分钟前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞1 小时前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
飞睿科技2 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天2 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)3 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术3 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao4 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报4 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110112 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋13 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障