51单片机中using对应的寄存器有哪些不同
时间: 2024-01-28 13:04:11 浏览: 122
在不同的 C51 单片机编译器中,使用 `using` 关键字保存在堆栈中的寄存器数量和对应的寄存器可能会有所不同。以下是一些常用编译器的情况:
- Keil C51 编译器:支持保存 R0-R7 和 PSW 寄存器,具体使用方法见我的上一个回答;
- SDCC 编译器:支持保存 R0-R7 和 PSW 寄存器,使用方式与 Keil C51 编译器相同;
- IAR Embedded Workbench:支持保存 R0-R7 和 PSW 寄存器,使用方式与 Keil C51 编译器相同;
- Tasking C Compiler:支持保存 R0-R7 和 PSW 寄存器,使用方式与 Keil C51 编译器相同;
- Raisonance RC-51 Compiler:支持保存 R0-R7 和 PSW 寄存器,使用方式与 Keil C51 编译器相同。
需要注意的是,每个编译器对应的使用方式可能会略有不同,具体需要参考编译器的文档。另外,需要根据实际情况选择需要保存的寄存器,不要一味地追求节省堆栈空间而忽略了程序的正确性和可维护性。
相关问题
51单片机中using对应的寄存器有哪些
在 C51 单片机中,使用 `using` 关键字可以将需要在中断服务函数中使用的寄存器保存在堆栈中,同时释放中断函数使用的寄存器。具体需要保存哪些寄存器,可以根据实际情况进行选择。
在 Keil C51 编译器中,通用寄存器 R0-R7 和寄存器 PSW 都可以使用 `using` 关键字进行保存。具体使用方式如下:
- `using 0`:保存 R0 寄存器;
- `using 1`:保存 R0 和 R1 寄存器;
- `using 2`:保存 R0-R2 寄存器;
- `using 3`:保存 R0-R3 寄存器;
- `using 4`:保存 R0-R4 寄存器;
- `using 5`:保存 R0-R5 寄存器;
- `using 6`:保存 R0-R6 寄存器;
- `using 7`:保存 R0-R7 寄存器;
- `using 8`:保存 PSW 和 R0 寄存器;
- `using 9`:保存 PSW、R0 和 R1 寄存器;
- `using 10`:保存 PSW、R0-R2 寄存器;
- `using 11`:保存 PSW、R0-R3 寄存器;
- `using 12`:保存 PSW、R0-R4 寄存器;
- `using 13`:保存 PSW、R0-R5 寄存器;
- `using 14`:保存 PSW、R0-R6 寄存器;
- `using 15`:保存 PSW、R0-R7 寄存器。
注意,以上使用方式只适用于 Keil C51 编译器,其他编译器可能会有不同的实现方式。同时,根据实际情况选择需要保存的寄存器,不要一味地追求节省堆栈空间而忽略了程序的正确性和可维护性。
C51中interrupt和using的用法——单片机
在C51单片机中,使用interrupt关键字可以定义中断函数,使用using关键字可以将某个寄存器与变量进行绑定。
1. interrupt关键字
在C51单片机中,使用interrupt关键字定义一个中断函数,其语法如下:
```
void interrupt_function_name (void) interrupt interrupt_number
{
//中断服务程序
}
```
其中,interrupt_function_name为用户定义的中断函数名,interrupt_number为中断号,可选值为0~31。当对应的中断事件发生时,程序会跳转到中断服务程序执行。需要注意的是,中断服务程序必须使用汇编语言编写,且必须以RET指令结束。
2. using关键字
使用using关键字可以将某个寄存器与变量进行绑定,使得变量在使用时直接访问寄存器中的值,而不需要通过内存中转。其语法如下:
```
using register_name = variable_name;
```
其中,register_name为用户定义的寄存器名,variable_name为用户定义的变量名。需要注意的是,只有特定的寄存器可以与变量进行绑定,具体可以查看单片机的datasheet。另外,使用using关键字会影响程序的可移植性,因此需要谨慎使用。
阅读全文