博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】关于C51的中断编程[原创]
阅读量:6088 次
发布时间:2019-06-20

本文共 1119 字,大约阅读时间需要 3 分钟。

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/archive/2012/12/21/2828473.html

你可能感兴趣的文章
curl zip上传并且解压
查看>>
Safecracker
查看>>
List遍历以及剔除指定数据
查看>>
Apache+php+mysql+SQLyog在windows7下的安装与配置图解
查看>>
浏览器安全有关同源策略
查看>>
如何通过手机号码核实真实姓名
查看>>
数据库迁移之从oracle 到 MySQL
查看>>
WebService_HelloWorld
查看>>
sql 把特定数据排在最前面
查看>>
JS基本概念 -- 数据类型(二)
查看>>
反馈电路参考微博
查看>>
Android 自定义底部公用菜单
查看>>
练手小游戏(代码篇之敌人AI
查看>>
本地环境代码一码云一服务器代码部署
查看>>
前端安全之XSS攻击
查看>>
第七次spring会议
查看>>
谈谈DevOps和TestOps个人见解
查看>>
access数据库至少一个参数没有被指定值
查看>>
CodeForces 672B Different is Good
查看>>
LevelDB源码之四LOG文件
查看>>