中断的响应时间就是中断的响应过程的时间,中断的响应过程是当有事件产生,进入中断之前必须先记住当前正在做的事情,然后去处理发生的事情,处理这个过程的时间,叫做中断响应时间。
计算机中也是采用的这种方法,五个
中断源,每个中断产生后都到一个固定的地方去找处理这个中断的序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。
基本定义就是:从发出中断请求到进入中断处理所用的时间
////////////////////////////////////////////////////
具体地说,
中断响应可以分为以下几个步骤:
1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。
2、寻找中断入口,根据5个不同的
中断源所产生的中断,查找5个不同的入口地址。以上工作是由计算机自动完成的,与编程者无关。在这5个入口地址处存放有
中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。
3、执行中断处理程序。
4、中断返回:执行完
中断指令后,就从中断处返回到主程序,继续执行。RETI指令
中断的实时性是实时系统的一个重要方面。中断响应时间是影响中断实时性的主要因素。
////////////////////////////////////////////////////
8051单片机有5个中断源:●INTO-外部中断0请求,低电平有效,通过P3.2引脚输入。●INTl-外部中断1请求,低电平有效,通过P3.3引脚输入。●TO-定时器/计数器0溢出中断请求。●T1-定时器/计数器1溢出中断请求。●TX/RX-串口中断请求。中断优先级是指通过软件设定中断优先级的
控制位使某种中断被系统优先处理。8051单片机有两个中断优先级,可通过软件设定IP来规定某个中断位高级中断,相反为低级中断。
////////////////////////////////////////////////////
8051的
时钟周期即CPU的晶振的振荡频率的振荡周期(频率的倒数)
当振荡频率为10MHZ时,振荡周期=1/10MHZ=0.1us
机器周期是完成一个基本操作的时间单元,一个机器周期=12个时钟周期
当振荡频率为10MHZ时,机器周期=12x0.1=1.2us
8051的
指令周期,指取出并执行一条指令的时间。一般为1-4个机器周期
//////////////////////////////////////////////////////
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个机器周期之间。
指令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的中断请求标志,并返回主程刚才被中断的地方,这是本程序经编译后的机器码指令,用仿真器把它固化到程序存储器后,就可以运行了。