在8051系列单片机中,内部ram的前32个字节被分为4组,每组8个寄存器。每组的8个寄存器名字都为R0-R7。通过设置PSW寄存器的两个位,可以选择使用4组寄存器中的哪一组。
寄存器组在处理中断或者使用实时操作系统时非常有用,可以在进入中断或者切换任务时使用不同寄存器组,而不用把8个寄存器的内容保存到堆栈。在退出中断或返回原任务时,只需切换回原来的寄存器组即可。
指定一个函数使用的寄存器组:
void rb_function (void) using 3 { . . . }using后跟数字0-3,不允许使用符号表达式指定代替该数字常量。只有定义函数时才可使用using关键词,在做函数原型声明时不允许使用using关键词。
using声明的函数具有以下特征:
1)函数入口处,当前使用的寄存器组被保存到堆栈;
2)指定的寄存器组被设置;
3)函数退出前,原来的寄存器组被恢复;
下面展示了using的用法,请注意生成的汇编程序中函数入口、出口处的代码:
C程序: 1 2 extern bit alarm; 3 int alarm_count; 4 extern void alfunc (bit b0); 5 6 void falarm (void) using 3 { 7 1 alarm_count++; 8 1 alfunc (alarm = 1); 9 1 } 生成的汇编程序