中断
# 中断程序
外部中断
# 传递方式
- 无条件传送:不考虑状态信息,直接传送数据
- 查询传送:不断查询外设状态信息,判断后决定是否传送数据
- 中断传送:由外设主动向控制器提出申请的数据传送方式
- DMA传送:直接存储器存取,需要DMA控制器来完成而不需要CPU干预
中断传送可以提供CPU的工作效率,可以提高实时数据的处理时效
# 中断处理过程
中断请求、中断响应、中断处理和中断返回
- 中断请求:外部设备向控制器提出中断请求
# IE寄存器
EX0:
外部中断0 中断请求允许位ET0:
定时器/计数器0 中断请求允许位EX1:
外部中断1 中断请求允许位ET1:
定时器/计数器1 中断请求允许位ES:
串口中断请求允许位EA:
中断请求允许总控制位
# 中断源
- 外部中断0 (
INT0^
) 中断标志IE0
- 定时 / 计数 0 (
T0
) 中断标志IF0
- 外部中断1 (
INT1^
) 中断标志IE1
- 定时 / 计数 1 (
T1
) 中断标志IF1
- 串口中断 接收标志 RI / 发送标志 TI
中断通道 | 中断源 | 中断请求标志 | 中断号 |
---|---|---|---|
外部中断0 | P3^2 引脚中断请求 | IE0 | 0 |
定时计数器0 | T0计数溢出 | TF0 | 1 |
外部中断1 | P3^3引脚中断请求信号 | IE1 | 2 |
定时计数器1 | T1计数溢出 | TF1 | 3 |
串 口 | 接发一帧数据 | RI/TI | 4 |
定时计数器2 | 计数溢出 | TF2 | 5 |
# 外部中断触发方式
负边沿触发,使控制位 IT0 = 1
低电平触发,使控制位 IT1=0
TCON寄存器
IT0/1
: 中断请求触发标志位,1为负边沿触发,0为低电平触发
IE0/1
:中断请求标志位
# 中断程序C实现
void delay(int num){
int x,y;
for(x=num;x>0;x--)
for(y=110;y>0;y--);
}
int main(){
TCON |= 0X01;
IE = 0X81;
while(1);
}
void ing() interrupt 0{
delay(10);
if(key == 0){
led = ~led;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# |= 的作用小补充
|=
的应用情景 当其它寄存器被使用到时,为了不影响到其它位进行的或运算
TF0=1;
//开启了计时器模式
//如果直接使用 TCON = 0X01 会将定时器关闭
//所以使用或运算
TCON |= 0X01;
1
2
3
4
5
2
3
4
5
# 综合案例
码表:
# 实现功能
- 可以计时间
- 码表显示一个最小的时常
- 码表的最大计数时间
- 可以存储时间
- 按键一一开始、存储、回显、复位
# 设计电路图
51单片机最小系统:电源、复位电路、晶振电路、下载、51单片机
- 显示电路
- 按键电路
# 内部资源
- I/O 口
- 定时计数器
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48