zoukankan      html  css  js  c++  java
  • 【转】关于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,在使用中需灵活取舍。

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

  • 相关阅读:
    thinkphp中的验证码的实现
    js深入研究之牛逼的类封装设计
    js深入研究之函数内的函数
    js深入研究之初始化验证
    js深入研究之Person类案例
    js深入研究之匿名函数
    js深入研究之类定义与使用
    sublime text3 自动编译php 适合用于简单的php文件执行
    PHP实现四种基本排序算法 得多消化消化
    thinkphp中的类库与引用import引入机制
  • 原文地址:https://www.cnblogs.com/lzhitian/p/2828473.html
Copyright © 2011-2022 走看看