怎么读51单片机的内部数据?

如题所述

51单片机有以下几个内存模块组成:
1】ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。
程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩
片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义常量,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改;
2】RAM有------内部RAM的低128位(00-7F),对应C语言就是data,比如我定义一个变量,
data unsigned char Var = 0;
那么,这个 Var变量就是放在内部的低128位Ram中
-------内部RAM的高128位(80-FF),对应C语言就是idata,比如我定义一个变量,
idata unsigned char Var = 0;
那么,这个 Var变量就是放在内部的高128位Ram中
-------特殊功能寄存器(SFR)(80-FF),对应C语言就是Sfr比如我定义一个变量,
Sfr unsigned char Var = 0x90;
那么,这个 Var变量就是放在内部的特殊功能寄存器中,这是你对Var操作,相当于操作一个特殊的寄存器,但是小心,不能随便定义Sfr变量,很危险
------外部RAM 64K(0000-FFFF)
外部的RAM可以扩展到65536个,但是前256个算是一页,这一页比较特殊,是用
pdata来修饰的,当然,也可以用xdata来修饰。
除了第一页的256个以外的其他65280个空间,只能用xdata来修饰;
回过头来讨论pdata和xdata,这两个都能修饰外部Ram的第一页,但是,Pdata只能修饰第一页,即最前面的256个外部Ram,那么,这最前面的256个到底用Pdata还是Xdata好的呢?
答案是Pdata,因为Xdata修饰的变量,用的是DPTR寻址,Pdata用的是R0和R1.DPTR因为是16位的,所以可以覆盖整个的64K外部Ram,R0和R1是8位,所以只能寻址最前面的256个,也就是外部Ram的第一页,但是,用R0寻址,比DPTR快一倍,代码也小的很多

楼主又疑惑了,好多地址是重复的,比如,我向80H地址写一个数值,单片机怎么知道读的是内部的高128位RAM?还是SFR?还是外部64K的RAM呢?

答案是用指令,如果是直接寻址,那么访问的就是SFR,如果是R0或者R1间接寻址,就是内部高128位RAM,如果是DPTR或者是R0,R1间接寻址,且配合的是MovX指令,那么就是访问外部64KRAM中的第80H个地址。

概括一下来说,51的内存由以下组成:
1----程序存储器(包括片内Flash或Rom,也包括片外Flash或Rom,C语言用Code定义)
2----内部低128位Ram,C语言用data定义
3---内部高128位Ram,C语言用idata定义
4---内部SFR,C语言用Sfr定义
5---外部65536个Ram(通常,很多单片机厂家不会给你扩展那么多的,一般来说扩展256个字节或者1024个字节就差不多了,最近宏晶的出了个扩展4096字节的。这65536字节的Ram,前256个可以用Pdata修饰,也可以用Xdata修饰,超过256个之后的,只能用Xdata修饰)

以上所说的只是针对51内核的单片机,其他内核的,像ARM之类的,不是这种结构的。
温馨提示:内容为网友见解,仅供参考
无其他回答

怎么读51单片机的内部数据?
1---程序存储器(包括片内Flash或Rom,也包括片外Flash或Rom,C语言用Code定义)2---内部低128位Ram,C语言用data定义 3---内部高128位Ram,C语言用idata定义 4---内部SFR,C语言用Sfr定义 5---外部65536个Ram(通常,很多单片机厂家不会给你扩展那么多的,一般来说扩展256个字节或者1024个字节就...

这样才能读取51单片机内程序代码
利用软件读出器件内的程序代码(二进制),保存成HEX格式的文件。第二步:在仿真器的计算机端软件中,利用反汇编功能,打开刚才保存的HEX格式文件,如果单片机内的程序在编译时设置了允许注释,那么,您可以很快得到原程序代码(汇编语句),如果没有注释,那只好根据反汇编的出来的语句(汇编代码),去查询...

51单片机stc8f181s2怎么看程序
1连接编程器和单片机,打开STC-ISP软件 2选择单片机型号和串口号。3点击“读出”按钮,可以将单片机内部程序读 取出来。注意,使用STC-ISP软件读取单片机程序需要先将单片机上电,否则读取不到程序 2.使用仿真器或者调试器读取程序STC8F1K08S2单片机支持仿真器或者调试器功能,可以将单片机与PC机连接,通过仿...

51单片机的HEX文件怎么读取和写入?
1、首先在电脑上用proteus软件打开目标文件。然后用鼠标左键双击51单片机图标,如图所示。然后在出现的窗口中,点击下图中的文件夹图标。然后在电脑文件夹中找到编译好的HEX文件导入。2、keil里编译时,设置输出文件为.HEX文件格式。然后在proteus中打开CPU属性,在程序设定栏填入HEX文件路径及名称(也可以通...

怎样能读出51单片机里的程序结构
单片机里的程序, 如果烧录程序时加密后 就不能读出来了,如果没有加密,那么可以用 烧录软件 直接读出来,不过都是 十六进制的机器码,要看懂是不容易的。

怎么通过串口读取51单片机某个地址的数据?请用C语言写出来。
首先,你要明确在C语言中读取内存地址是基于指针的。3.比如读取内存地址0x22中的数据 C语言中对于内存的访问是基于指针的,这个毋庸置疑,具体操如下 unsigned int *p= (unsigned int*)0x22 ;\/\/定义指针,并且使指针指向了0x22这个 内存地址;那么*p就是最终你要读取的数据了。4.至于如何通过...

怎样读51单片机内程序
ISP_CMD指令为0000 001,读取用户的应用程序flash区及数据flash

51单片机怎么使用内部EEPROM,上电次数、断电记忆,怎么实现计到最大...
STC 很多都有内部EEPROM,如11或12系列的STC单片机,读写内部EEPROM有一定限制,比如写,必须先擦除再写,而且一次必须擦除一个扇区,所以还是很麻烦的,只能覆盖。要实现你的功能,一点问题没有,上电后先读取上次的计数值,再加1重新写进去就可以了。以下是EEPROM读写子程序供参考:;--- ;读一字节...

编程飞读8051单片机T0计数器的16位计数值,并存到内部RAM的(31H)(30H...
读出51单片机T0计数器的计数值,并存到内部RAM的(31H)(30H)中,这很简单,用两条指令就行。MOV 30H,TL0 MOV 31H,TH0 例如:MOV A,30h CJNE A,#10,LOOP MOV 31H,#1 ;A=10 JMP EXIT LOOP:JNC LOP1 ;CY=0,理解为没借位 MOV 31H,#3 ;有借位A<10 JMP EXIT LOP1: MOV 31H,...

51单片机如何读写片内EEPROM
片内的?STC的吧,那玩意是FLASH其实,不是按字节读写的,用的是ISP的代码。网上很多,一查就有。如果真是如你说的片内的真正意义上的EEPROM,那么你直接按地址读写字节也就行了呗,呵呵呵。

相似回答
大家正在搜