P.s:没有总结“【第四章】MCS-51单片机程序设计”,这章很重要,但主要是需要把PPT上的所有例题给看明白,知识点都包含在例题里了。
突然想记录一下复习顺序:知识点——做往年题——拐回来做知识点题——复习实验
知识树
0. 零碎知识点
1. 8051单片机的中断系统
1.1 5个中断源
中断源 | 地址 |
---|---|
外部中断0(INT0) | 0003H |
定时器0(T0) | 000BH |
外中断1(INT1) | 0013H |
定时器1(T1) | 001BH |
串行口 | 0023H |
1.2 中断系统的结构
这个图很重要!
1.3 中断系统的控制——四个寄存器
1.3.1 TCON——定时器/计数器及外部中断寄存器
TCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位名称 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
(1)各位的作用:
【1】IT0、IT1:控制位,软件置1或清0
IT0/IT1=1时,表示加到引脚INT0/INT1的外中断信号为下降沿触发;
IT0/IT1=0时,表示加到引脚INT0/INT1的外中断信号为低电平触发。
【2】IE0、IE1:状态位,硬件自动置1或清0
当外中断到来时,硬件自动置1;CPU相应该中断转向中断服务子程序时,硬件自动清0。
【3】TF0、TF1:状态位,硬件自动置1或清0,也可由软件清0
定时器/计数器溢出中断标志位,为1表示有溢出产生。
【4】TR0、TR1:控制位,软件置1或清0
为0表示停止定时器/计数器工作;
为1表示开启定时器/计数器工作。
1.3.2 SCON——串行口控制寄存器
SCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位名称 | TI | RI |
(1)各位作用:
【1】TI:标志位,硬件自动置1,但必须由指令手动清0
串行口发送中断请求标志位
【2】RI:标志位,硬件自动置1,但必须由指令手动清0
串行口接收中断请求标志位
1.3.3 IE——中断允许寄存器
IE | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位名称 | EA | ES | ET1 | EX1 | ET0 | EX0 |
(1)各位作用:
全部都是控制位,控制中断的开闭,由软件手动置1或清0来控制中断的开闭。
【1】EX0、EX1:
外中断0/外中断1允许
【2】ET0、ET1:
定时器/计数器0、定时器/计数器1中断允许
【3】ES:
串行口中断允许
【4】EA:
CPU中断允许
1.3.4 IP——中断优先控制寄存器
IP | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位名称 | PS | PT1 | PX1 | PT0 | PX0 |
(1)各位作用:
全部都是控制位,控制中断的优先级,由软件手动置1或清0来控制中断的开闭。
注意:有2个优先级
从D0到D4分别是:外中断0优先级、定时器/计数器0优先级、外中断1优先级、定时器/计数器1优先级、串行口优先级。
(2)默认优先级:
外中断0>定时器0>外中断1>定时器1>串行口
(3)回顾第三章的RETI
第三章讲了RET和RETI的区别:
指令 | 执行过程 |
---|---|
RET | 取出栈顶单元内容放入PC高八位,SP-1,取出栈顶单元内容放入PC低8位,SP-1 |
RETI | 除了执行RET相同功能外,还清除中断响应时IP寄存器中被置1的PX0、PT0、PX1、PT1、PS |
2. 单片机的中断处理过程
2.1 中断响应的过程
【1】由硬件根据中断源的类型自动生成一条长调用指令LCALL addr16。
注:
Addr16为程序存储器中相应的中断入口地址
【2】CPU执行LCALL addr16
注:
(1) 将PC的内容压入堆栈,以保护断点 ;
(2) 将中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。
2.2 中断响应被封锁的三种情况
【1】CPU正在处理同级的或更高优先级的中断
【2】查询到中断请求的机器周期不是当前正在执行指令的最后一个机器周期
解释:
只有当前指令执行完毕后,才能响应中断请求,以确保当前指令完整的执行。
【3】正在执行的指令是RETI或是访问IE或IP的指令
MCS-51中断系统规定,在执行完上述指令后,需要再去执行完一条指令,才能响应新的中断请求。
2.3 中断响应的时间
结论:3—8个机器周期
解释:
【1】最短3个机器周期:
当查询到中断请求的机器周期是当前正在执行的指令(不是RETI)的最后一个机器周期时,执行完该指令还需自动执行一条LCALL addr16,需要两个机器周期,1+2=3
【2】最长8个机器周期:
当查询到中断请求的机器周期时,正处于RETI指令的第一个机器周期,此时需要先将RETI指令执行完(+2),然后再去执行一条MUL/DIV指令(+4),然后再执行LCALL addr16(+2),2+4+2=8
2.4 中断请求的清除
1、定时器0和定时器1中断——TF0、TF1
CPU在响应中断后用硬件自动清除有关的中断请求标志TF0 或TF1。
2、边沿触发的外部中断——IE0、IE1
在硬件CPU在响应中断后用硬件自动清除有关的中断请求标志IE0或IE1。
3、电平触发的外部中断
在硬件上CPU对INT0、INT1没有控制,因此必须另外采取措施—加外部硬件控制和软件编程。
4、串行口中断——TI、RI
CPU在响应中断后没有用硬件自动清除中断请求标志RI和TI,必须在中断服务程序中用软件清除之,以撤除中断请求。