51单片机的位寻址区问题
51单片机的位寻址区问题书上写着位寻址区是20H-2FH,位地址00H-7FH,这不是超过这个位寻址区了嘛,这两个区域是什么意思的?
是这样的,请你参考:
“51单片机的位寻址区问题书上写着位寻址区是20H-2FH”,这里的20H~2FH指的是片内RAM低128字节的“20H存储单元~2FH存储单元”,每个单元是一个字节,所以这里是16个字节,每个单元的地址分别是20H~2FH;
“位地址00H-7FH”,上面的16个字节,每个字节8位,总共128位,对这128各位又进行了编址,每个位的地址分别是00H~7FH;
位地址和单元地址虽然在数字上有所重复(00H~7FH包含有20H~·FH),但是在汇编指令上是能去分开的;比如:CLR 20H 这条指令是对位20H进行清零,不会对20H单元清零,因为对字节清零的汇编指令只有一条 CLR A,这是对累加器A进行清零。
所有的指令都能把位地址和单元地址去分开,上边只是个例子,不必担心。
希望对你有所帮助!!!!!
1.这个00H~7FH是不是就是用来存数据的(运算产生的数据存在里面),没有其他功能,不是对寄存器进行赋值操作(清零或置1等)
2.SFR的寄存器的位寻址,是不是例如:CLR DPH.1 CLR IE.2 SETB PCON.3 这样的。
我看SFR里的寄存器是有地址的,比如DPH是83H,IE是A8H,PCON是87H。如果直接用地址进行寻址达到我上述写的,那要怎么写的!
一、
1.00H~7FH这128个位,是RAM低1存储单元20H~27H这16个字节的每一个位;
20H单元对应 00H~07H 8个位
21H单元对应 08H~0FH 8个位
22H单元对应 10H~17H 8个位
。。。。。
2FH单元对应 78H~7FH 8个位
所以20H~2FH这16个存储单元(字节),既可以字节操作,也可以位操作;
而别的存储单元,比如 00H~1FH 这32个单元 和 30H~7FH 这80个单元,只能字节操作,不能位操作。
二、
SFR专用寄存器里边,有的(地址是以0或8结尾的)既可以字节操作,也可以位操作。而有的只能字节操作。比如你举得例子DPH,它地址是83H,只能字节操作,不能位操作。而 IE 的地址是A8H,由于它是8结尾,所以既可以字节操作也可以位操作。
CLR DPH.1 是错误指令,因为DPH的1位不能位寻址(PCON也不能位操作);
如果要让DPH 的1位清零,只能字节操作 ANL DPH,#FBH;
SETB PCON.3也错误,只能字节操作 ORL PCON,#08H;
CLR IE.2对,这是位操作,也可以字节操作 ANL IE,#FBH;
三、
SFT专用寄存器当然有地址,他是RAM的高128单元,接着RAM低128单元继续编制,不过不连续了:P0(80H)、SP(81H)等。
SFR里边可以位操作的位也都编了址,每个可操作的位都有位地址,这些位地址与位寻址区的地址不重复。你好好的看看书,书上都有,呵呵!!!
1.这个00H~7FH是不是就是用来存数据的(运算产生的数据存在里面),没有其他功能,不是对寄存器进行赋值操作(清零或置1等)
2.SFR的寄存器的位寻址,是不是例如:CLR DPH.1 CLR IE.2 SETB PCON.3 这样的。
我看SFR里的寄存器是有地址的,比如DPH是83H,IE是A8H,PCON是87H。如果直接用地址进行寻址达到我上述写的,那要怎么写的!