中断服务函数using的可有可无

我们经常在51单片机中使用中断服务函数,其一般的形式是:

定义中断服务函数:
函数类型 函数名 (形式参数) interrupt m [using n]

/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
  code;
}

一般的情况下是没有using[n]这一句的,但是为什么没有这一句呢?那我们就来学习一下using

这其实是C51编译器扩展的关键字。用来选择80C51单片机中不同的寄存器组,单片机内部 RAM 的00H~1FH地址单元,共32B,分成4组工作寄存器组,每组8个工作寄存单元。那么using 后面的数字也就是0-3范围里的一个数了。各组都以R0 ~ R7作为工作寄存单元编号。由于它们的功能及使用不作预先规定,因此称之为通用寄存器。4组通用寄存器在任一时刻,CPU 只能使用其中的一组工作寄存器,并且把正在使用的那组寄存器称为当前寄存器组。到底是哪一组,由程序状态字(PSW)寄存器中RS1、RSO位的状态组合来决定。如果不需要using的话,编译器会自动选择一组寄存器作为绝对寄存器访问。

并且using对代码具有一定影响。

如果定义 void tm0_isr() interrupt 1 using 1

假设,我们又在中断里调用了一个delay();这个delay是起延时作用。那么,我们就需要确保我们使用的寄存器组是同一组。否则,就会出现混乱。所以我们在写中断服务函数时大多数情况下并没有写using

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小的Wu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值