【转】关于C51的中断编程[原创]

http://blog.21ic.com/user1/1721/archives/2005/5727.html

8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两个中断优先级;128 字节内置 RAM;独立的 64K 字节可寻址数据和代码区。

       中断发生后,MCU 转到 5 个中断入口处之一,然后执行相应的中断服务处理程序。中断程序的入口地址被编译器放在中断向量中,中断向量位于程序代码段的最低地址处,注意这里的串口输入/输出中断共用一个中断向量。

       8051的中断向量表如下:

       中断源              中断向量

      --------------------------------

      上电复位             0000H

      外部中断 0          0003H

      定时器 0 溢出      000BH

      外部中断 1          0013H

      定时器 1 溢出      001BH

      串行口中断          0023H

      定时器 2 溢出      002BH

       interrupt 和 using 都是 C51 的关键字。C51 中断过程通过使用 interrupt 关键字和中断号(0 到 31)来实现。中断号指明编译器中断程序的入口地址中断序号对应着 8051中断使能寄存器IE 中的使能位,对应关系如下:

     IE寄存器    C51中的       8051的

     的使能位    中断号          中断源

     --------------------------------------------

       IE.0            0            外部中断 0

       IE.1            1            定时器 0 溢出

       IE.2            2            外部中断 1

       IE.3            3            定时器 1 溢出

       IE.4            4            串口中断

       IE.5            5            定时器 2 溢出 

       有了这一声明,编译器不需理会寄存器组参数的使用和对累加器A、状态寄存器、寄存器B、数据指针和默认的寄存器的保护。只要在中断程序中用到,编译器会把它们压栈,在中断程序结束时将他们出栈。C51 支持所有 5 个 8051 标准中断从 0 到 4 和在 8051 系列(增强型)中多达 27 个中断源。

       using 关键字用来指定中断服务程序使用的寄存器组。用法是:using 后跟一个0 到3 的数,对应着 4 组工作寄存器。一旦指定工作寄存器组,默认的工作寄存器组就不会被压栈,这将节省 32 个处理周期,因为入栈和出栈都需要 2 个处理周期。这一做法的缺点是所有调用中断的过程都必须使用指定的同一个寄存器组,否则参数传递会发生错误。因此对于using,在使用中需灵活取舍。

>>>>>欢迎转载,但务请注明作者和出处,谢谢。

原文地址:https://www.cnblogs.com/lzhitian/p/2828473.html