
8051 CPU在每个机器周期内顺序采样每个中断源。 CPU在下一个机器周期中按优先级顺序查询中断标志。如果发现某个中断标志为1,它将在下一个机器周期内执行。中断处理的优先级。如果存在以下任何一种情况,则暂停请求将被阻止。
1、CPU正在执行相同或高级级别的中断服务程序。2、当前机器周期不是当前指令周期的最后一个机器周期,即确保当前指令已执行。
CPU对中断作出响应,硬件自动将相应的中断向量地址加载到程序计数器PC中,并将其传输到中断服务程序进行处理。
对于某些中断源,CPU将在响应中断后自动清除中断标志,例如定时器溢出标志TF0,TF1和部分中断标志IE0,IE1。
某些中断标志不会自动清除,而只能由用户软件清除,例如串行端口接收和发送中断标志RI,T1。在CPU执行中断服务程序之前,它会自动将程序计数器PC的内容压入堆栈保护,然后将相应的中断向量加载到程序计数器PC中,以便程序转向中断向量地址单元来执行中断服务程序。中断服务程序从向量地址开始执行,直到返回指令“ RETI”。一方面,“ RETI”指令的操作告诉中断系统中断服务程序以完成执行,另一方面,该指令将弹出最初被压入堆栈的电源关闭地址,以保护其免受中断的影响。在栈顶,加载程序计数器PC,并使程序在断点处返回中断的程序,以便继续执行。
外部中断响应时间在每个机器周期中,外部中断INT0和INT1的电平均锁存在IE0和IE1的标志位,CPU将在下一个机器周期中查询新插入的IE0和IE0和IE1。 IE1,如果此时满足响应条件,则当CPU对中断进行响应时,需要两个机器周期来执行硬件长调用指令“ LCALL”。因此,从产生外部中断到开始中断程序至少要花费三个完整的机器周期。如果CPU在中断请求时使用长指令(例如四周期指令,例如乘法和除法指令),则在中断请求时,额外的等待时间将增加三个周期。如果正在执行“ RETI”指令或访问IE,IP的指令,则将增加额外的等待时间。增加两个周期。总之,在单个中断系统中,外部中断响应时间约为3-8个机器周期。

下面我们仍然以打印机为例来说明外部中断源的使用。硬件连接和查询方法基本相同,但是由于外部中断是在程序中初始化的,因此在此示例中8051的端口引脚P3.2不再是普通端口,而是外部中断的输入。 ,打印机还有一个选通信号STB。对于打印机,该信号是输入信号,其含义是:当打印机检测到引脚上的负跳变时(即从高电平跳变),这意味着微控制器正在将打印数据发送到数据总线,并且打印机将“繁忙”。该引脚设置为1,以告知微控制器打印机正在打印,然后开始打印。
在此示例中,单片机的并行接口P3的一位T0输出用作信号输入,并且打印缓冲区仍位于内部数据存储器的10H-11H单元中,总共三个字节。让我们看一下程序:
第一条指令ORG 0000H是伪指令,这意味着它告诉编译器系统立即从程序存储器的0000H单元中存储该指令。
第二条指令LJMP MAIN的意思是跳转到标有MAIN的地址以运行。
第三条指令ORG 0003H是伪指令,这意味着它告诉编译器系统立即从程序存储器的0003H单元中存储该指令。
LJMP SUBO指令的含义是:跳转到标有SUBO的地址以运行。

ORG 0050H指令的含义是:告诉编译器系统从程序存储器的0050H单元中立即存储紧随其后的指令。
MAIN是标签。
SETB EA指令的含义是:将地址EA的位设置为1,EA是8051 MCU中断系统的总允许位,因此该指令的物理含义是打开8051中断系统。
CLR EX0指令的含义是:对于EX0位置1,其物理含义是允许外部中断0中断。
CLR IT0指令的含义是:清除IT0位,其物理含义是将外部中断0的触发方式设置为边沿触发。
MOV R0,#11H指令的含义是:将数据11H发送到工作寄存器R0中,物理含义是设置在中断服务程序中发送的数据的地址,即第二个字节打印机缓冲区。由于打印机必须先在主程序上发送第一个字节,然后打印机才能发出第一个中断请求,因此,如果微控制器发送了中断服务程序中的所有数据,则将导致微控制器和打印机相互等待,即,打印机等待微控制器将数据发送到数据总线,然后通过T0引脚向打印机的STB引脚发送负脉冲选通信号。打印机在检测到该引脚上的负脉冲的上升沿之前,不会开始打印。另一方面,单芯片计算机正在等待打印机打印一条数据,然后在中断服务程序中提交一个中断请求以发送第一个数据。

MOV P2 10H指令的含义是:将内部数据存储器10H单元发送到并行接口P2,其物理含义是发送第一个打印数据。
命令CLR P3.4的含义是:清除端口P3.4,即T0引脚为0,其物理含义是将选通信号的前沿发送到打印机。打印机检测到选通信号的上升沿后,将BUSY引脚的状态设置为高电平,然后开始打印。
指令SETB P3.4的含义是:将端口P3.4设置为1,其物理含义是将选通信号的后沿发送给打印机。
指令LJMP§的含义是:跳转至该指令,即主程序此时进入无限循环。请注意,只要用户不关闭CPU,CPU就会继续运行而不停止用户程序。如果没有这样的无限循环指令,则CPU将从程序存储器的下一个单元中获取一个数字。将其视为下一条指令的操作码,这样程序将出错甚至崩溃。因此,如果系统中没有无限循环,则必须在主程序的末尾添加无限循环指令。
SUBO是一个标签,代表外部中断0的实际起始地址。
MOV P2,@ R0指令的含义是将R0的内容用作内部数据存储器的地址,然后将该地址处的数据发送到端口P2,这实际上意味着发送第二个打印数据

命令CLR P3.4的含义是将端口P3.4清除为0。物理含义是发送STB选通信号的上升沿。打印机检测到该信号并将BUSY引脚设置为高电平。然后开始打印。
SETB P3.4指令的含义是将端口P3.4设置为1,物理含义是发送STB选通信号的后沿。
INC R0指令的含义是:将R0的内容加1,其物理含义是更改要在打印缓冲区中打印的下一个数据的指针。执行完该指令后,R0中的内容为12H,即下一个。打印数据以12H为单位。
CJNE RO,#13H LAB1指令的含义是:确定R0的内容是否为13H,如果是,则继续向下运行,否则跳转到标有LAB1的位置,物理含义是要打印的数据指向13H,表示所有数据都已打印,然后执行关闭中断命令,否则,则意味着不打印数据,然后跳过关闭中断命令。
LAB1是一个标签。
RETI指令的含义是:中断返回,其物理含义是清除外部中断0的中断请求标志,并返回到刚刚中断主程序的地方。这是该程序的编译后的机器代码指令。固化到程序存储器后,即可运行。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-325528-1.html
跟中国实体经济不是因果关系
对于马云的讲话