在接下来的教程中,将会介绍定时器、串口通信等外设的基本使用,而这些外设的使用都要涉及中断,而且中断是单片机或嵌入式开发中一个相当重要的概念。不能掌握中断系统,就无法灵活应用这些外设。
一、中断定义cpu在处理某一事件a时,发生了另一事件b请求cpu迅速去处理(中断发生);cpu暂时中断当前的工作,转去处理事件b(中断响应和中断服务);待cpu将事件b处理完毕后,再回到原来事件a被中断的地方继续处理事件a(中断返回),这一过程称为中断 。
引起cpu中断的根源,称为中断源。中断源向cpu提出的中断请求。cpu暂时中断原来的事务a,转去处理事件b。
对事件b处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。
二、51中断结构89c51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。
1、(p3.2)可由it0(tcon.0)选择其为低电平有效还是下降沿有效。当cpu检测到p3.2引脚上出现有效的中断信号时,中断标志ie0(tcon.1)置1,向cpu申请中断。
2、(p3.3)可由it1(tcon.2)选择其为低电平有效还是下降沿有效。当cpu检测到p3.3引脚上出现有效的中断信号时,中断标志ie1(tcon.3)置1,向cpu申请中断。
3、tf0(tcon.5),片内定时/计数器t0溢出中断请求标志。当定时/计数器t0发生溢出时,置位tf0,并向cpu申请中断。
4、tf1(tcon.7),片内定时/计数器t1溢出中断请求标志。当定时/计数器t1发生溢出时,置位tf1,并向cpu申请中断。
5、ri(scon.0)或ti(scon.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位ri或当串行口发送完一帧串行数据时置位ti,向cpu申请中断。
三、中断配置cpu对中断系统的所有中断以及某个中断源的开发和屏蔽是由中断允许寄存器ie控制的。
ea:中断允许总开关控制位。(1:所有中断请求被允许;0:所有中断请求被屏蔽)
es:串行口中断允许控制位。(1:允许串口中断;0:禁止串口中断)
et1:定时器/计数器t1的溢出中断允许控制位。(1:允许t1溢出中断;0:禁止t1溢出中断)
ex1:外部中断1中断允许位。(1:允许外部中断1中断;0:禁止外部中断1中断)
et0:定时器/计数器t0的溢出中断允许控制位。(1:允许t1溢出中断;0:禁止t1溢出中断)
ex0:外部中断0中断允许位。(1:允许外部中断1中断;0:禁止外部中断1中断)
1、中断请求标志tocn 的中断标志it0(tcon.0),外部中断0触发方式控制位。
当it0=0时,为低电平触发方式。
当it0=1时,为边沿触发方式(下降沿有效)。
ie0(tcon.1),外部中断0中断请求标志位。
it1(tcon.2),外部中断1触发方式控制位。
ie1(tcon.3),外部中断1中断请求标志位。
tf0(tcon.5),定时/计数器t0溢出中断请求标志位。
tf1(tcon.7),定时/计数器t1溢出中断请求标志位。
2、中断优先级外部中断0(ie0)->定时/计数器0(tf0)->外部中断1(ie1)->定时/计数器1(tf1)->串行口(r1或t1)
3、中断源外部中断0(int0),对应中断号是0,中断入口地址0003h
定时/计数器0(t1),对应中断号1,中断入口地址000bh
外部中断1(int1),对应中断号2,中断入口地址0013h
定时/计数器1(t1),对应中断号3,中断入口地址001bh
串行口中(ri/ti),对应中断号4,中断入口地址0023h
3、中断相应条件中断源有中断请求
此中断源的中断允许位为1
cpu开中断(ea=1)
四、中断定义主程序中需要有以下代码:
ea=1;//打开总中断开关ex0=1;//开外部中断0it0=0/1;//设置外部中断的触发方式中断服务函数:
void int0 () interrupt 0 using 1 // using 1 不用写也不用管{do anything that you want}五、程序举例#includesbit led =p2^1;void main(){ ea=1; //开启总中断,这个相当于校长 tmod =0x01; th0=(65536-48300)/256; //50ms tl0=(65536-48300)%256; tr0=1; // 打开定时器t0 et0=1; //允许中断 这个相当于班主任,只有校长和班主任同意中断才能中断 while(1) { ; }} void time0() interrupt 1{ unsigned int count; tf0=0; //注意tf0同时是中断请求标志位, //tf0=1,请求中断 th0=(65536-48300)/256; //50ms 装初值 tl0=(65536-48300)%256; count+=1; if(count>=20) { led=~led; count=0; } }
Σ-Δ模数转换器:数字滤波器类型
海尔AI智能音箱新品上市 一句话可控制全屋家电
哈啰出行将切入两轮电动车业务,推出智能两轮“新物种”
台达多功能旋压机的控制模式与特点介绍
苹果合作伙伴广达电脑将为AR眼镜制造镜头
51单片机中断系统的讲解
ColorOS 6带来完美的触控体验
飞针测试技术概述
什么是电源适配器?是干什么用的?电源适配器可以通用吗?
skylake和haswell区别
全球六大自动驾驶卡车 硬件配置及方案对比
打破工业发展瓶颈,华为云赋能工业企业转型成效显著!
电气计算公式和实例说明
抢先看!家庭安防之阳台防盗报警设备迎来了产品迭代
手机镜头设计不断升级黑镜头新势力崛起
磁场检测仪的嵌入式软件和硬件协同开发模式
发力印度市场!下半年三星电子有望重回冠军宝座
详解智能手机音频放大器电路设计
人工智能的23条军规 马斯克等千名AI专家联合背书
PCB设计中的十个最常见的DFM问题解析