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和IE1,这时假如满意呼应条件,CPU呼应中止时,要用二个机器周期履行一条硬件长调用指令“LCALL”。所以,从发生外部中止到开端履行中止程序至少需求三个完好的机器周期。假如在中止请求时,CPU正在长指令,如乘法和除法指令等四周期指令,则额定等候时刻添加三个周期;若正在履行“RETI”指令或拜访IE,IP的指令,则额定等候时刻又添加两个周期。综上估量,在单一中止体系里,外部中止呼应时刻约在3-8个机器周期之间。
下面咱们仍以打印机为例来阐明外中止源的使用方法 。硬件衔接和查询方法根本共同,仅仅由于程序中对外中止进行了初始化,所以,8051的端口引脚P3.2在这个比如中不再是一个一般的端口而是外中止的输入,另一个,打印机多了一个选通信号STB。对打印机来说,这个信号是个输入信号,其含义为:当打印机检测到该引脚上呈现一个负跳变,即由高电平时,表明单片机以把打印数据送上数据总线,则打印机将BUSY引脚设置为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单片机中止体系是总答应位,所以,该指令的物理含义是敞开8051的中止体系。
指令CLR EX0含义为:对EX0方位1,其物理含义为答应外中止0中止。
指令CLR IT0含义为:对IT0位清1,其物理含义是设置外中止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就会从程序存储器的下一个单元取出一个数,把它当下一个指令的操作码处理,这样,程序就会犯错,乃至死机 。所以,假如一个体系中自身没有死循环的话,必定要在主程序的最终以为加上一条死循环指令。
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的中止请求标志,并回来主程方才被中止的当地,这是本程序经编译后的机器码指令,用仿真器把它固化到程序存储器后,就可以运转了。