嵌入式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要减一

相关推荐
玩转以太网2 小时前
WIZnet以太网单片机选型指南
单片机·嵌入式硬件·以太网
tianyazhichiC2 小时前
stm32f103 标准外设库下载
stm32·单片机·嵌入式硬件
小美单片机3 小时前
Proteus 报错 Unable to open HEX file ‘..\1、程序\jio\jtd.hex‘. [U1]
c语言·单片机·嵌入式硬件·51单片机·proteus
乡野码圣3 小时前
【RK3588 Android12】固件烧录与启动
stm32·单片机·嵌入式硬件
灵哎惹,凌沃敏4 小时前
一句话总结IIC协议
arm开发·单片机·开源协议
2401_863318634 小时前
基于单片机的温度控制系统的设计
单片机·嵌入式硬件
z20348315204 小时前
AI模型部署草稿
人工智能·单片机·嵌入式硬件
金色光环5 小时前
【SCPI学习】STM32与LWIP实现SCPI命令解析
stm32·嵌入式硬件·算法·scpi学习·scpi