51单片机中程序指针PC和数据指针DPTR各自有什么用途?电路复位后,二者的值各是多 少?

51单片机中程序指针PC和数据指针DPTR各自有什么用途?电路复位后,二者的值各是多 少?,第1张

程序计数器PC(program Counter)

程序计数器在物理上是独立的,它不属于特殊内部数据存储器块中。PC是一个16位的计数器,

用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。PC本身并没有地址,因而不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序按我们的要求去执行。

复位后为0000H(16位)

数据指针(DPTR)

数据指针为16位寄存器,编程时,既可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即高位字节寄存器DPH和低位字节DPL。

DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,此时,使用如下两条指令:

MOVXA, @DPTR

MOVX@DPTR, A

在访问程序存储器时,DPTR可用来作基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据。

MOVCA, @A+@DPTR

复位后为0000H(16位)

这个PC 是Program Counter的缩写,是通用寄存器中的一个,但有其特殊用途。

通常是用它来指向当前运行指令的下一条指令的指针。计算机取指令也就是根据PC指针所指向的那条指令来进行取指的,接着就是译码等 *** 作

首先,你要明白一个概念,指针,是做什么的?答案是,指针,是指向地址的。\x0d\x0a程序指针,指向的空间,在物理上是Flash,在逻辑上,就是代码空间。比如说51单片机的PC指针,指向的就是Flash,即程序下一步要执行的指令的地址。\x0d\x0a\x0d\x0a数据指针,指向的空间,在物理上有Flash和RAM,在逻辑上是Flash里的常数空间和数据空间,注意,是对于单片机来说,对于我们的电脑,常数空间不是在Flash上。\x0d\x0a比如说51单片机的DPTR,如果用MOVC A,@A+DPTR,此时,就是指向常数空间,如果用\x0d\x0aMOVX A,@A+DPTR就是指向的数据空间。\x0d\x0a\x0d\x0a堆栈指针,指向的空间,在物理上是RAM,在逻辑上,就是数据空间,是特定的数据空间,堆栈是数据空间中单独划分出来,专门用于寄存中间结果的内存空间。\x0d\x0a\x0d\x0a数据指针和堆栈指针主要有两个区别:\x0d\x0a一是数据指针可以指向Flash,即可以指向常数,比如说我们定义一个数组 unsigned char code Table[99],此时,就是DPTR可以指向常数空间。堆栈指针是不可以的,只能是指向RAM。\x0d\x0a\x0d\x0a第二个区别,堆栈指针指向的是特定的数据空间,这个特定的数据空间,是从整个数据空间里划分出来,专门用于作堆栈用的,堆栈区间一旦划分出来,堆栈指针在规则上,就只能在这个范围内活动,如果出了这个范围,可能导致整个程序的崩溃。而数据指针在规则上,可以指向整个数据空间,但是,可以读堆栈空间,不应该去修改,否则也可能导致程序的崩溃。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11430023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存