首先我们来了解一下什么是中断:
中断
1.基本概念
1中断系统:
- 当中央处理器CPU正在处理某件事的时候,外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完之后,再回到原来被中断的地方,继续原来的工作
2 中断源:
- 打断CPU执行当前任务的源头或事件
3常见的五个中断源:
- 外部中断0
- 外部中断1
- 定时器中断0
- 定时器中断1
- 串口UART中断
2.外部中断
1.基本概念:
- 引脚的电平变化所引发的中断(外部中断0:P3_2,外部中断1:P3_3)
2.实现形式:
- 当外部中断的某个引脚发生了由高电平->低电平的变化时,实现中断(下降沿中断)
- 某个引脚指的是控制外部中断0,1 的P3_2 与 P3_3
3.中断优先级概念:
- CPU去执行中断任务时,会去比较多个任务的优先级,优先去执行优先级较高的中断
4.中断嵌套:
- 在中断中再去中断一次(不推荐,51单片机中最多嵌套两次)
5.中断处理流程:
- 中断源发出中断请求;
- 检查CPU是否允许响应中断,以及该中断源是否被屏蔽(需要自行配置)
- 比较中断优先级
- 保护现场(会将当前执行到的地址保存在栈区)
- 执行中断服务函数((void (*fun)(void) interrupt x)
- 恢复现场(回到之前保存的地址)
6.实现函数流程:

中断向量表:
中断所执行的函数都是通过中断向量表去查找的,中断向量表本质上就是一个数组,存放中断服务函数入口地址
中断向量:
本质上是一个标号,可以通过标号在中断向量表中查找到中断服务函数的入口地址:
3.定时器中断
定时器中断可以通过计算实现精准的定时:
- timer 0 :计数器 0 16位模式定时器 ,65535 自增型定时器
- timer 1 : 计数器1 8位自动重装载定时器,
单片机晶振为 12Mhz
芯片系统中存在分频器:
分频之后:12Mhz / 12 = 1Mhz
1 / 1Mhz = 1 us
利用timer0 实现 1ms 定时
计时器加一次所需要的时间为 1us
1ms = 1000us
1000us / 1us = 1000;
将1000 装载进定时器计时的16位模式定时器中
定时器加到65535 会溢出触发定时器中断,之后需要手动重新装载数据,
函数操作流程如图:

4常见功能实现
利用PWM实现蜂鸣器控制:
1.PWM:
PWM 概念:
- 脉冲宽度调试
- 能使引脚电平变化产生一个方波
- PWM可以让引脚电平周期性翻转
PWM周期
- 一个PWM方波所经历的时间(从上升沿或下降沿->下一个上升沿或者下降沿)
PWM占空比:
- 高电平在一个周期内所占的比例
2.蜂鸣器:
1.有源头蜂鸣器:
- 内部存在一个震荡源,上电后蜂鸣器会发出固定频率的声音
2无源蜂鸣器:
- 内部无震荡源,上电后不发出声音,需要外加震荡才能发生
3.震荡源:
- 频率->音调不同 高音高频,低音低频
- 振幅->音量不同

通过定时器中断,在中断执行函数中更改P2寄存器的电平可以实现PWM的生成,PWM作用在蜂鸣器上相当于外加了一个震荡源,通过更改定时器时间,改变震荡源频率,实现对于蜂鸣器的控制