中断响应时间/中断步骤/中断源

来源:互联网 发布:263工程数据 编辑:程序博客网 时间:2024/05/18 03:17
   中断的响应时间就是中断的响应过程的时间,中断的响应过程是当有事件产生,进入中断之前必须先记住当前正在做的事情,然后去处理发生的事情,处理这个过程的时间,叫做中断响应时间。
  计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。

  基本定义就是:从发出中断请求到进入中断处理所用的时间

////////////////////////////////////////////////////

具体地说,中断响应可以分为以下几个步骤:

  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个机器周期之间。

 

      指令MOVR0,#11H的意义是:将数据11H送入工作寄存器R0中,物理意义为设定在中断服务程序中发送的一个数据的地址,即打印机缓冲区的第二字节。因为必须在主程序上发送第一个字节之后,打印机才能发出第一次中断请求,如果单片机将所有数据都放在中断服务程序中发送,则会引起单片机和打印机相互等待,即打印机等待单片机将数据送上数据总线,并通过T0引脚发送一个负脉冲选通信号到打印机的STB引脚,打印机要在检测到该引脚上的负脉冲前沿后,才开始打印。另一方面,单片机却在等待打印机打印完一个数据后,提出中断申请,才能在中断服务程序中发送第一个数据。

   指令MOVP2,10H的意义是:将内部数据存储器10H单元送上并行接口P2,其物理意义是发送第一打印数据。

    指令CLRP3.4的意义为:对端口P3.4,即T0引脚清0,其物理意义向打印机发送选通信号的前沿,打印机检测到选通信号的前沿后,置引脚BUSY的状态为高电平,然后开始打印。

    指令SETBP3.4的意义为:对端口P3.4置1,其其物理意义向打印机发送选通信号的后沿。

    指令LJMP§的意义是:跳转到本条指令,即主程序到此就进入死循环。请大家注意只要用户不关机的话,CPU就会不停的运行下去,不会因为用户程序到此结束,如果没有这条死循环指令的话,CPU就会从程序存储器的下一个单元取出一个数,把它当下一个指令的操作码处理,这样,程序就会出错,甚至死机。所以,如果一个系统中本身没有死循环的话,一定要在主程序的最后认为加上一条死循环指令。

    SUBO是一个标号,表示外中断0的真正起始地址。

    指令MOVP2,@R0的意义是,把R0的内容作为内部数据存储器的地址,再把该地址的数据去出来送到端口P2,起物理意义是发送第二个打印数据。

    指令CLRP3.4的意义是,对端口P3.4清0,物理意义是发送STB选通信号的前沿,打印机检测到该信号,置引脚BUSY为高电平,然后开始打印。

    指令SETB P3.4的意义是 ,对端口P3.4置1,物理意义是发送STB选通信号的后沿。

    指令INCR0的意义是:对R0的内容加1,物理意义是改变打印缓冲区中下一个待打数据的指针,这条指令运行后,R0中的内容为12H,即下一个待打印数据在12H单元中。

    指令CJNE RO,#13HLAB1的意义是:判断R0的内容是否为13H,如是则继续往下运行,否则跳转到标号为LAB1的地方,物理意义为如果待打印数据的指针向13H,即表示所有的数据都打印完毕,则运行关中断指令,否则表示数据末打印完,则跳过关中断指令。

LAB1是一个标号。

     指令RETI的意义是:中断返回,物理意义是清除外中断0的中断请求标志,并返回主程刚才被中断的地方,这是本程序经编译后的机器码指令,用仿真器把它固化到程序存储器后,就可以运行了。

原创粉丝点击