小白学习 发表于 2026-8-19 22:44

51单片机4组工作寄存器R0-R7会不会弄混?任何区分它们


51 单片机工作寄存器组区用来干什么豆包的回答如下

STC51规格书的图片示意




每个工作寄存器组分R0-R7,那么我们赋值和调用时任何保证不会弄混,赋值工作组0中的R0不会赋值到工作组1或其它组中的R0去呢?
这就好比你作为校长的你在大学里,大一有叫R0-R7的学生,大二有叫R0-R7的学生,大三有叫R0-R7的学生,大四有叫R0-R7的学生,你叫一声R0肯定有四个人回应你,但是你如果先喊一声所在年级,比如大一的R0,那么肯定只有一个人回应你,然后你继续说一大堆话,这一堆话肯定是对着大一的R0说的,其它大二、大三、大四的R0肯定都不叼你,说完后你又喊了句大四的R0,那么大四的R0肯定屁颠屁颠的跑过来听你讲话安排工作
单片机一样,第一次进来默认R0是工作组0中的,如果想要用其它组的R0,需要通过已下寄存器来配置

汇编测试代码如下:

ORG 0000H      ; 让PC内容为0000H,PC相当于CPU导航,接下来往后的程序,从程序存储器地址0000H开始摆放。
        MOV R0,#03H   ;这个R0实际操作RAM 00H单元也就是0组中的R0 单片机上电RS1\RS0=0默认使用该组
       
        SETB PSW.3    ; RS0=1
        CLRPSW.4    ; RS1=0
        MOV R0,#01H   ; 这个R0实际操作RAM 08H单元也就是1组中的R0
       
        CLR PSW.3   ; RS0=0
        SETBPSW.4   ; RS1=1
        MOV R0,#02H   ; 这个R0实际操作RAM 10H单元也就是2组中的R0
       
        CLR PSW.3   
        CLR PSW.4   ;清零RS1、RS0 返回到默认工作组0
       
        MOV A,R0      ;执行完这行代码后,A的值是03(使用的是默认工作组0中的R0的值是3)
END            ; 汇编源代码结束标记


执行完 最后一行MOV A,R0后,左边A的值变为3,证明R0的值就是3,也就是第一次赋值的3


bidezhi7777 发表于 2026-8-20 05:00

江波波 发表于 2026-8-20 07:30

谢谢分享

13412678220 发表于 2026-8-20 08:06

power3 发表于 2026-8-20 08:10

谢谢分享

mcufan 发表于 2026-8-20 08:31

谢谢分享

longxuekai 发表于 2026-8-20 08:54

来看一下的

790 发表于 2026-8-20 08:54

private80 发表于 2026-8-20 08:56

感谢版主的分享,赞一个;P

gfshao 发表于 2026-8-20 08:57

谢谢分享
页: [1] 2 3
查看完整版本: 51单片机4组工作寄存器R0-R7会不会弄混?任何区分它们