① 怎样区分片外程序存储器和数据存储器
数据存储区 在掉电再上电的时候 里面的数据会丢失
外部程序存储区则不会,片外存储区的开始地址是1000H
内部程序存储区的地址是0000~0FFFH 可以根据地址来区分
外部数据存储区的地址是0000~FFFF
外部数据存储区和内部数据存储区根据指令来区分
② 80c51单片机的片内片外程序存储器和片内片外数据存储器访问如何区分
管腿EA接高电平,单片机首先访问内部ROM,当地址值超过4K(0FFFH)时自动访问外部ROM。EA接低电平,单片机只访问外部ROM。
对于数据的话,可以通过定义来区分,idata,即片内 RAM 从 0x00~0xFF;pdata,即片外 RAM 从 0x00~0xFF;xdata,即片外 RAM 从 0x0000~0xFFFF。
③ 单片机片内存储器和片外存储器的作用和概念
单片机片内存储器包括片内ROM和片内RAM,片内ROM用于存储程序代码,片内RAM包括寄存器和片内扩展RAM,比如STC的很多型号都有片内扩展EEPROM。
片外存储器包括片外ROM和片外RAM,片外ROM用户存储程序代码,片外RAM用于存储用户的可改写数据。
④ mcs—51单片机数据存储器RAM分布情况,说明片内和片外如何区分
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之类的,不是这种结构的。
⑤ 单片机的片内,片外存储器如何选择
程序存储器通过(/EA) /Vpp引脚选择。若(/EA) =0,则允许使用片内ROM;若 (/EA)=1则允许使用片外ROM。
数据存储器通过指令区分:访问片内RAM采用MOV指令,访问片外RAM采用MOVX指令。
⑥ 5.1单片机是怎么样分片内存储器和片外存储器的,麻烦大侠告诉下,谢谢
早期,片内存储器,还是片外存储器,确实是根据:他们是不是
在同一块
集成电路芯片上,来区分的。
数据存储器的传送指令,也有区别:片内传送,使用MOV,涉及片外了,就要用MOVX指令。
但是,科技发展了,有些单片机芯片,在同一块芯片上,还集成了少量的“片外存储器”,针对这些存储单元操作,就必须使用MOVX指令。
这样看来,片内,还是片外,区分的方法应该是使用什么指令,而不是他们是否分离成两块芯片。
⑦ 单片机是如何区分片内片外ROM的
AT89s51单片机的片外ROM可扩展64KB,片内ROM为4KB,两者独立。
该种单片机上有一个EA引脚
当在EA引脚上加上+5V的高电平时,CPU的程序计数器PC以“片内”0000H为初值开始取指令,但一旦PC的取值超出片内程序存储器的地址范围(0FFFH),PC自动地转向读取片外程序存储空间(1000H-FFFFH)
当在EA引脚上加上0V的低电平时,单片机会毫不犹豫地使用片外程序存储器,将可怜的片内程序存储器抛在一边
上述即为:单片机通过EA引脚上所加电平的高低决定怎样使用片内片外ROM
⑧ 用什么方法来区分,片外数据存储器与片内数据存储器分开编址而出现的地址重叠呢
片外数据储存器存取用MOVX指令
片内存储器存取使用MOV指令。
⑨ 2812片内和片外存储器地址相同怎么区分
我好像看懂了,就是片外存储器它的地址与片内存储器的地址是叉开的,比如zone0和1,地址是0x2000至0x6000,而这个地址在片内是保留,zone2和zone6也是对应片内保留的地址,这样就可以区分开片内和片外,是不是这样?希望路过的高手指点
⑩ 单片机中什么叫片内rom,片外rom,这个片内片外怎么理解
片内RAM:
Read Only Memory (a non volatile memory) --只读存储器(非易失存储器) 永久存储重覆使用的信息,比如数据表、电子显示器的字符等。和RAM不同,ROM的内容不能更改。在生产过程中使用可编程掩模。
片外RAM:
随机存储器(Random Access Memory)表示既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。我们通常购买或升级的内存条就是用作电脑的内存,内存条(SIMM)就是将RAM集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少RAM集成块占用的空间。目前市场上常见的内存条有4M/条、8M/条、16M/条等。