程序存储器:
① 用于存放程序(可执行的二进制代码映像文件,包括程序中的数据信息),还包括初始化代码等固件。
② 为只读存储器。注意,这里的“只读”,是指单片机(cpu)在正常工作时对其的访问方式是只读的;而现在大多数单片机的程序存储器(不管是内部还是外部)都采用了flash rom,来取代以前所用的rom、e2prom等,可方便地进行在线编程(isp)。
③ 标准8051的内部程序存储器大小为4kb(0x0000 ~ 0x0fff);而具体的51核的兼容单片机的内部rom大小需要参考其datasheet,例如p89c51ra2xx的内部程序存储器是8k的flash。
④ 内部、外部存储器统一编址,在软件设计上(指令系统中)没有差别;是否使用外部程序存储器是通过引脚ea在硬件电路上控制的:不使用外部程序存储器时,ea=0(接地);如果扩展了外部程序存储器,则使ea=1,当寻址到内部存储空间以外时,会自动转向外部程序存储器空间(与扩展外部程序存储器有关的还有psen和ale的时序配合,以及p0和p2口用于地址线)。
[注] 一般直接选用内部程序存储器满足代码大小要求的单片机型号,避免扩展外部存储器,造成系统软硬件设计上的复杂和额外开销。
数据存储器:
为ram。首先必须要强调的是,不管是物理上还是逻辑上,51单片机的内部、外部数据存储器都在不同的地址空间。两者不是一回事,用途也不一样,访问的指令也不同(内部ram为mov指令,外部为movx)。
1、内部数据存储器(内部ram)
相当于内存,为程序(进程)中的变量和常量分配存储空间,掉电后内容消失。
标准8051的内部ram为256b(0x00 ~ 0xff):其中可供用户自由使用的是低128b(0x00 ~ 0x7f)区域,高128b中定义了26b的特殊功能寄存器(sfr),其余没有定义,因而没有意义。
p89c51ra2xx的片内ram是512b(片内ram不等于内部ram,见释疑2)。
[说明] 关于内部ram中的sfr,其中不但定义了一些控制字段,还包括累加器(acc)、程序状态字(psw)、数据指针(dptr)、堆栈指针(sp)等,值得注意的是,片上i/o口p0 ~ p3的地址也在这里定义(即有3个特殊功能寄存器的地址实际上是p口的地址)——这是因为51单片机的i/o口与存储器是统一编址的*。
2、外部数据存储器(外部ram)
上面谈到“i/o口与存储器统一编址”的问题,因此,这里称作外部ram空间更为合适。在这个64kb地址空间中(0x0000 ~ 0xffff),除了可以扩展外部ram外,还可以扩展外部i/o设备。
外部ram主要用于存储程序运行时产生的重要数据(如数据采集结果、数据处理结果、系统日志等),这时一般需要外加电源进行掉电保护,以在系统掉电时保存其中的数据信息;也可用于数据的暂时存储,供cpu正常读写操作使用。因此外部ram主要是使用其“可随机访问、读写方便且高速”的特性。
* 所谓i/o口与存储器统一编址,是指i/o口与主存在同一地址空间,将处理器的可寻址存储空间中专门划出一部分地址空间分配给i/o口使用。这与pc机的x86处理器不同,x86体系结构为i/o口专门定义了独立于存储空间之外的地址空间(事实上,除x86外,其他体系结构的处理器都对i/o口与存储器统一编址,可参考《linux device drivers》)。
释疑1:51只有16根地址线,为什么能同时将程序存储器和外部数据存储器都扩展到64kb呢?即外部即有rom,又有ram,如何知道访问的是哪个?
在体系结构上,程序存储器和数据存储器是不同的地址空间,两者的访问是不会相互干扰的,这主要是通过在硬件和指令集设计上来实现的。
在硬件上,访问外部rom是通过ea和psen引脚来控制的;访问外部ram则是通过wr和rd信号来控制的;
在指令集上,访问外部rom不需要使用显示指令,是通过pc(指令计数器)来控制取指地址的(跳转指令也可能引起pc跳转);而访问外部ram则需要在程序设计上使用指令movx来执行。另外,访问内部ram则使用了指令mov,以区分外部ram的访问。
释疑2:p89c51ra2xx的片内ram是512b,是如何组织的?
p89c51ra2xx的片内ram是512b:其中内部ram为256b(使用mov指令访问,定义与标准51相同);另外的256b为xram(片内的外部数据存储器),属于外部存储器的范畴,因此用途也同外部ram,使用movx指令访问,当程序中的全局变量或单个局部变量需占较大存储空间时,可以定义为xdata型,保存到xram区。注意这个片内的xram掉电后其数据也会丢失;另外,如果要扩展外部ram,则一般是设置xram为禁用态。
iOS10.3Beta6时隔3天!iOS10.3Beta7来了苹果你是疯了还是搞事情
手环vs手表,谁将更强?
探究Redis网络模型究竟有多强大(下)
区块链技术能否推动经济社会的发展繁荣
需要了解的Linux模块编程框架
一文详解51单片机的存储器组织结构
人工智能在教育行业的应用
区块之间是如何相互链接
烙铁头由哪些材料组成
2021什么蓝牙耳机好用平价?性价比高的无线蓝牙耳机推荐
AI时代应该具备怎样的嵌入式思维
西门子MES平台在湖北卷烟厂中的应用
自制万用表升压电路(三款万用表升压电路设计方案详解)
基于有限状态机(FSM)的SiC MOSFET开关瞬态建模
为何对区块链技术如此重视
特斯拉车型的需求旺盛而交不了车?
C语言中指针变量简述
国民技术与Intel达成合作推进可信计算
回顾六大亮点推动生态圈建设的相关活动和介绍
激光雷达激烈战,Velodyne推新款128线激光雷达传感器