51单片机auxr寄存器_MCS-51单片机有几个工作寄存器

本文详细介绍了51单片机的工作寄存器组织,包括4组寄存器和其选择机制,以及通过PSW中的RS1、RS0进行切换。同时阐述了7种寻址方式,如寄存器寻址、直接寻址、立即寻址等,强调了这些寻址方式在提高程序运行效率上的作用。此外,还提及了如何利用寄存器组来支持多任务并行,避免频繁的现场保护操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作寄存器有4组,每组都是8个工作寄存器R0~R7,通过PSW中的RS1、RS0两位来选择使用哪一组,如果不选,默认是选择第0组。

RS1RS0组合为00时,选中第0组工作寄存器,R0~R7地址为00H~07H;

RS1RS0组合为01时,选中第1组工作寄存器,R0~R7地址为08H~0FH;

RS1RS0组合为10时,选中第2组工作寄存器,R0~R7地址为10H~17H;

RS1RS0组合为11时,选中第3组工作寄存器,R0~R7地址为18H~1FH。

ac18393207c50f22dec4332d6d573c9e.png

类似arm的usr模式svc模式irq模式fiq模式,

psw.4 psw.3

0 0 0区 r0-r7独立

0 1 1区 r0-r7独立

1 0 2区 r0-r7独立

1 2 3区 r0-r7独立

上边的每个区都由相同的名字r0-r7寄存器引用,但数据空间却不同,所以各自独立,

每组寄存器在物理上是独立的,也就是说,一共有32个寄存器。上电后默认是第0组,但四组寄存器的功能、优点完全相同。r0-r7支持丰富的寻址方式,可以大大提高运行效率。

所以,如果你有四个程序段(或者说线程)要交叉运行,都想使用到效率很高的r0-r7,就可以让它们各占一组,只要切换区域就行了,而不必频繁地保护现场。

a2d7960db0581c79442011d2b0e3e4e0.png

寻址方式:

51单片机有7种寻址方式。

1、寄存器寻址:前面提到了内部RAM中的00H-1FH地址单元作为工作寄存器使用。一共是有32各地址单元,分成四组,每组有8个寄存器,命名为R0-R7,每次可以使用其中的一组。当使用R0-R7来表示操作数时,就属于寄存器寻址方式。

例如:MOV A,R0;把寄存器R0的内容送入累加器A中

2、直接寻址:在指令中直接给出操作数地址,就属于直接寻址方式。此时指令的操作数部分直接是操作数的地址。

例如:MOV A,2AH ;把RAM地址2AH的内容送入累加器A中

3、立即寻址:

例如:MOV A,#3AH ;该指令就是表示把立即数3AH送入累加器A中,立即数前加上一个#,和直接寻址方式区分

f2d003098931c3ff2cee2691bff5ddd5.png

4、寄存器间接寻址:若以寄存器的名称直接给出操作数的地址,则称为寄存器间接寻址。

例如:MOV A,@R0 ;该指令是把RO里的内容作为地址,这个地址的数据送入累加器A,注意前面需要加@

5、变址寻址:变址寻址是以某个寄存器的内容为基本的地址,然后在这个基址上加以地址的偏移量,才是真正的操作数地址。

例如:MOV A,@A+DPTR ;地址是A+DPTR的值,这个地址的内容送如累加器A

6、相对寻址:相对转移指令需要用到相对寻址方式,此时操作数部分给出的是地址的相对偏移量部分。

目的地址 = 源地址 + 指令字节数 + rel(rel可正可负)

例如:SJMP rel

7、位寻址:概念就不做解释了。还是把reg52.h这个头文件贴出来说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值