工作寄存器有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这个头文件贴出来说。

51单片机auxr寄存器_MCS-51单片机有几个工作寄存器相关推荐

  1. 51单片机auxr寄存器_AT89S51存储器的结构

    AT89S51单片机存储器结构的特点之一是将程序存储器和数据存储器分开(称为哈佛结构),并有各自的对这两个不同的存储器空间的访问指令. AT89S51的存储器空间可划分为如下4类. 1.程序存储器空间 ...

  2. 51单片机的工作寄存器R0~R7位于内部RAM什么位置

    转自:https://zhidao.baidu.com/question/1495509806096353459.html 51单片机的工作寄存器一共有32个,为RAM中的00H--1FH单元,分为4 ...

  3. 单片机如何使用?51单片机C语言编程实例有哪些?

    大家好,我是无际单片机编程的徐明,今天和大家一起探讨一下"单片机如何使用?" 单片机如何使用,我们要知道单片机在哪里使用? 单片机是很多电子产品的核心器件,它具有一定的逻辑判断和事 ...

  4. 单片机位寻址举例_单片机学习:51单片机寻址方式详解

    51单片机是对所有兼容Intel 8031指令系统的单片机的统称.该系列单片机的始祖是Intel 8031单片机,后来随着Flash rom 技术的发展,8031单片机取得了长足的发展,成为了应用最广 ...

  5. 51单片机按键计数器程序_51单片机是如何存储程序和数据的

    在学校很少用到外扩ROM/RAM的情况,都是用C语言编程,不差空间,代码太大了,买个大ROM的芯片就行了.现在工作了,单位是做SoC的,采用了51的IP核,才算对51的代码/数据空间有了清晰的认识. ...

  6. 51单片机c语言编程函数,单片机C语言教程:C51函数

    其实一直出现在例子中的 main()也算是一个函数,只不过它比较特殊,编译时以它做为程序的开始段.有了函数C 语言就有了模块化的优点,一般功能较多的程序,会在编写程序时把每项单独的功能分成数个子程序模 ...

  7. 51单片机(十二)—— 单片机复位

    一.复位介绍 复位为单片机提供了一条从已知初始条件启动处理的途径.复位期间,大部分控制和状态寄存器被迫使用初始值,单片机的外围模块被禁止,单片机用于复位的复位源有加电复位.外部RESET管脚复位.看门 ...

  8. 51单片机真的过时了吗?单片机、ARM、DSP、FPGA/CPLD

    现在在大学里,51单片机仍是电子类专业必修的课程,然而这几年随着ARM的火爆,很多51的学习者有了专业一个疑问:既然大家都在用ARM,我们为什么还要学51?而且找工作的时候人家也比较关注有过ARM使用 ...

  9. 51单片机编程入门用什么单片机比较好?

    每个男人心中其实都有一个"钢铁侠"梦. 希望自己拥有像男主一样的技术,通过技术去改变世界. 不过想做到这一步,需要学的东西实在太多太多,可能这辈子都学不完. 就是这种遥不可及的事情 ...

最新文章

  1. 项目微管理13 - 新人
  2. QTcpServer / QTcpSocket 简单示例
  3. 大型网络架构变迁和知识图谱
  4. WebGL之物体选择
  5. 【Pytorch】expand()用法==》扩展某个维度
  6. 设计模式学习笔记——享元(Flyweight)模式
  7. 2016年 1月15号 cocoapods的导入
  8. php 502状态码,Nginx502状态码处理
  9. 对运算符重载的函数1
  10. 福建省c语言二级题库,福建省二级 C语言 题库
  11. 登录注册HTML页面代码
  12. 微信小程序获取后端数据
  13. Select, Supplement and Focus for RGB-D Saliency Detection CVPR2020 卢湖川团队
  14. 2021信息管理与信息系统专业保研(情报学|管理科学与工程)
  15. 蓝牙技术|传统手表品牌加入智能手表竞争,智能手表市场持续火热
  16. 耦合度如何降低耦合度
  17. C# async / await 任务超时处理
  18. centos7 Qt5.9.1 ucal_close_53错误解决
  19. 2.1.4.2 端口Banner信息获取
  20. 线上培训上课实录整站设计制作开发全能培训-彭亮-专题视频课程

热门文章

  1. 如何在myeclipse中导入jar包?
  2. 静态编译和动态编译区别
  3. 搜索时,怎样排除不需要的关键字
  4. 6个步骤卸载wine
  5. 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...
  6. epic转移游戏_Epic游戏商城更改退款政策 和steam一模一样
  7. android 包裹内容,Android开发中Bundle用法 包裹数据
  8. datetime unix php,PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】...
  9. Failed to compile. ./src/utils/request.js Module not found: Error: Can‘t resolve ‘util-merge‘ in ‘C
  10. mysql binary blob区别_SQL中binary 和 varbinary的区别 blob