中断的概念:CPU在处理某一事件A时,另一事件B发出请求(中断请求);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被打断的地方继续处理事件A(中断返回)。
中断源:引起CPU中断的根源。
中断源向CPU提出中断请求,CPU暂时中断原来正在处理的事件A,转去处理事件B。对事件B处理完毕后,再回到原来的被中断的地方继续(断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
中断允许寄存器IE:CPU对中断系统所有中断以及某个中断源的开放和屏蔽都是由中断允许寄存器IE控制的。IE在特殊功能寄存器中,字节地址为A8H,编程时可对寄存器的每一位单独操作,单片机复位时IE的各个位全部变为0。
EX0(IE.0),外部中断0允许位。
ET0(IE.1),计时/计数器T0中断允许位。
EX1(IE.2),外部中断0允许位。
ET1(IE.3),计时/计数器T1中断允许位。
ES(IE.4),串口中断允许位。
EA(IE.7),CPU中断允许(总允许)位。
中断控制寄存器TCON:
TCON在特殊功能寄存器中,字节地址为88H,可以进行位寻址,该寄存器用于控制定时器/计数器的开启停止、标志定时器/计数器的溢出和中断情况,还可对外部中断进行设置,单片机复位时TCON全部为0。
IT0,IT1,设置外部中断的触发方式。
为0时,低电平触发。
为1时,下降沿触发。
IE0,IE1,外部中断标志位。
其他是定时/计数器的控制。
TF0,TF1,定时器的中断标志。
TR0,TR1,打开相应的定时器。
中断系统的工作原理图:
中断嵌套:51单片机最多可以执行二级嵌套:
手写笔记
题目:使用Keil建立完整的工程,并使用外部中断0触发数码管显示自己学号的后3位,注意编码规范、注释与缩进。
ChatGPT建立工程如下:
运行没有报错,单片机显示结果为:
现象:数码管全亮且蜂鸣器发出响声
修改1:源代码定义了流水灯引脚P1^0,P1引脚与此题无关,应该将所有有关定义的LED删除并定义P2相关引脚控制数码管。定义数码管段选和位选
修改2:用for循环和switch语句完成第1、2、3位数码管的依次点亮
程序无报错,现象却任然如上,我认为是因为延时太长且数码管断码有误
修改3:将断码改正,延时改为100
现象无变化,我认为中断函数和延时函数编写有误,
修改4:将其改为往常熟悉的代码
最终得到预期结果显示如下:
最终规范代码,整理注释和缩进。完整的代码为:
更多回帖