using 在C51中断中的使用问题

出处:21ic 发布于:2018-07-20 14:01:04

  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,在使用中需灵活取舍。
  举个例子来说:
  定义一个延时函数
  void delay(unsigned int n)//n=10000,延时90.05毫秒,默认寄存器组0
  本文引用地址: https://www.21ic.com/app/mcu/201807/784923.htm
  {
  while(n--);
  }
  有如下一个中断函数
  void int_0(void) interrupt 0 using 1 {//默认寄存器组1
  ...
  Delay(2000);
  ...
  }
  在默认状态下,delay()使用寄存器组0(BANK0),那么当int_0调用delay()时时会造成参数传递错误.这里必需把delay()的寄存器组也设为1.
  如果在中断服务函数ISR (中断服务程序)中使用寄存器,那么必须处理好using的使用问题:
  1、中断服务函数使用using指定与主函数不同的寄存器组(主函数一般使用Register bank 0)。
  2、中断优先级相同的ISR可用using指定相同的寄存器组,但优先级不同的ISR必须使用不同的寄存器组,在ISR中被调用的函数也要使用using指定与中断函数相同的寄存器组。
  3、如果不用using指定,在ISR的入口,C51默认选择寄存器组0,这相当于中断服务程序的入口首先执行指令:
  MOV PSW #0
  这点保证了,在没使用using指定的高优先级中断。可以中断使用不同的寄存器组的低优先级中断。
  4、使用using关键字给中断指定寄存器组,这样直接切换寄存器组而不必进行大量的PUSH和POP操作,可以节省RAM空间,加速MCU执行时间。寄存器组的切换,总的来说比较容易出错,要对内存的使用情况有比较清晰的认识,其正确性要由你自己来保证。特别在程序中有直接地址访问的时候,一定要小心谨慎!至于“什么时候要用到寄存器组切换”,一种情况是:当你试图让两个(或以上)作业同时运行,而且它们的现场需要一些隔离的时候,就会用上了。在ISR或使用实时操作系统RTOS中,寄存器非常有用。

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!