关于单片机中DPTR,SFR和工作寄存器的问题

不知道自己说的对不对 求教
SFR是指特殊功能寄存器 Special Function Register 是在片内RAM的高128字节
工作寄存器是在片内RAM的低128字节的00H到1FH 的32个单元 根据RS0与RS1的电平
选择不同的工作组 一共4组 每组都有R0~R78个单元 每个单元能容纳8位二进制码(对么?) 貌似其中R0,R1,R2有特殊作用 作用是什么呢?
DPTR是指针吧?这个弄不太懂 既然R0,R1都可以自增自减(相当于指针)那为什么还用DPTR呢 用R0,R1可以么?还是说片外访问的时候必须用DPTR不能用片内的寄存器呢?
求教 最好详细些 有加分(昨天您给解答来着,但是分数给另一位了 今天向您求教O(∩_∩)O)

你说的并不对!
第一,SFR是指特殊功能寄存器 Special Function Register ,但是....并不是是在片内RAM的高128字节,SFR是一个单独的物理空间,虽然他的地址也是80--FFH,但是,它不属于内部RAM!
有关这个结构问题,你看一下我以前的回答:
http://zhidao.baidu.com/question/400032408.html?oldq=1

第二,"工作寄存器是在片内RAM的低128字节的00H到1FH 的32个单元 根据RS0与RS1的电平
选择不同的工作组 一共4组 每组都有R0~R78个单元 每个单元能容纳8位二进制码",这个是对的.
R0,R1有特殊作用,这也可以说是对的,因为在寻址高128字节的内部RAM时,用到的R0,R1
进行间接寻址,注意,是访问内部高128字节的RAM,不是SFR.

第三,DPTR是指针吧?严格的说,DPTR就是SFR中的一个,只是它的作用是指针,我在第二条里
说过, R0,R1可以用来访问内部高128字节RAM,它们也可以用来访问外部RAM,但是,
由于R0,R1都只有8位,所以,它们只能访问最多 256个字节,也就是说,它们只能访问
外部RAM最多256字节.
如果想访问更多的,那么就要用DPTR,因为DPTR是16位的,所以可以访问65536字节.
所以,访问外部RAM,可以用R0,R1,也可以用DPTR.

第四,DPTR也可以用来访问ROM,配合MOVC指令使用,进行查表.追问

好详细 追问个 不介意吧
在做题 感觉答案不太对 求解
题目 将片内RAM中0FH单元的内容送到寄存器B,要求进行直接寻址
答案给的是MOV B,#0FH 这样不就是将0FH这个数送到B寄存器了么 也不是单元啊 求解
另 大体上会区别是多少字节的命令 但是周期如何看~
麻烦您了 可能问题有些小白 请别介意 真心求教

追答

哦,没关系,那个是错误的.
MOV B,#0FH 是立即数寻址,意思是把 0FH这个数值传递给 B寄存器
正确的答案是 MOV B,0FH

单片机是采用复杂指令集结构,所以每个指令的字节数,指令周期数可能都不一样,关于周期如何看,我也没办法,我以前都是在百度上查到的,然后背下来的,而现在我已经不怎么用汇编了,所以也记不住了.

追问

看了您给的那个链接 答复很精妙 有一点问题
89C51单片机 没有片内高128B 那么是不是不能用寄存器间接寻址?如果用了 会有什么后果?
最后一个问题了 嘿嘿

追答

对的,AT89C51没有内部高128B,所以,它的寻址有以下:
直接寻址:访问内部低128B
直接寻址:访问SFR
配合MOVX间接寻址:访问外部RAM
配合MOVC变址寻址:查表ROM

如果AT89C51有了内部高128B,那就不叫AT89C51了,就成了AT89C52或者其他的型号了.
也就有间接寻址了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-07-08
是这样的,R0、R1可以作为间址寄存器访问包括RAM的低128单元及高128单元的非SFR区。DPTR既可以作为间址寄存器访问外部RAM,但是不能访问低128单元;其次,DPTR也可以通过变址寻址的方式访问程序存储器ROM(包括内部ROM和外部ROM)注意访问的方式,RAM是可读可写,ROM是只可读不可写
第2个回答  2013-01-16
DPTR是数据指针啊!主要功能是存放16位地址,是地址,R0,R1的话可以用间接寻址

参考资料:http://www.eeworld.com.cn/gykz/2011/0828/article_8399.html

相似回答