21ic首页 | IC库存 | 器件搜索 | 图书 | 社区 | 21ic官方微博 |

您当前的位置:首页 > 基础知识 > 单片机  > 单片机存储器

MCS-51单片机有几个工作寄存器?

来源: 作者:
关键字:MCS-51单片机    工作寄存器   

工作寄存器有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。

类似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,就可以让它们各占一组,只要切换区域就行了,而不必频繁地保护现场。

寻址方式:

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中,立即数前加上一个#,和直接寻址方式区分

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

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

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

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

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

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

例如:SJMP rel

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