MCS-51单片机的程序存储器有片内和片外之分。对于内部无ROM型号,工作时只能扩展外部ROM,最多可扩展64KB,地址范围为0000H~FFFFH;对于片内有4KB字节的ROM或EPROM或E2 PROM,地址范围为0000H~0FFFH;对于片内有8KB字节的ROM或EPROM或E2 PROM,地址范围为0000H~1FFFH。例如,对于51子系列产品,8051单片机在芯片内部设置了4KB的ROM,8751单片机在芯片内部设置了4KB的EPROM,89C51单片机片内有4KB的E2 PROM(Flash ROM),8031单片机片内无ROM,需要在单片机外部配置EPROM或E2 PROM。当不够使用时,可以扩展片外程序存储器,由于MCS-51单片机的程序计数器PC是16位的计数器,因此程序存储器可扩展的最大空间是64KB,地址范围为0000H~FFFFH。MCS-51单片机的程序存储器的编址结构如图2-7所示。
图2-7 MCS-51单片机的程序存储器的编址结构
对于内部有ROM的芯片,根据情况外部可以扩展ROM,但内部ROM和外部ROM共用64KB存储空间,因此,对于带有片内程序存储器的单片机来说,片内程序存储器地址空间和片外程序存储器的低地址空间重叠,其中51子系列重叠区域为0000H~0FFFH(4K);而52子系列重叠区域为0000H~1FFFH(8K)。如果引脚为高电平(即)时,CPU将首先访问片内存储器,当指令地址超过0FFFH(51子系列)/1FFFH(52子系列)时,自动连续地转向片外ROM去取指令;而当引脚为低电平(即)时,CPU只能从外部程序存储器取指令。因此,对于无ROM的单片机(如8031、80C31、8032、80C32)来说,引脚一定要接地。
程序存储器低端的一些地址被固定地用作特定程序的入口地址,见表2-4。(www.xing528.com)
表2-4 程序存储器低端的一些地址作用
单片机复位后PC的内容为0000H,故单片机复位后将从0000H单元开始执行程序。程序存储器的0000 H单元地址是系统程序的启动地址。这里用户一般放一条转移指令,转到后面的用户程序。5/6个中断源的地址之间仅隔8个单元,存放中断服务程序往往不够用,所以通常这8个单元用于存放一条转移指令(如LJMP或AJMP),通过转移指令指向真正的中断服务程序,而真正的中断服务程序是放在后面更大空间的ROM中。因此,真正的用户主程序一般存放在0033 H单元以后。也就是说,编程时通常在这些入口地址开始的两、三个单元中,放入一条AJMP(2个字节)或LJMP(3个字节)无条件转移指令,以使相应的服务与实际分配的程序存储器区域中的程序段相对应(仅在中断服务子程序较短时,才可以将中断服务子程序直接放在相应的入口地址开始的几个单元中)。
【例2-3】 编写MCS-51单片机的主程序及中断服务程序的存放位置程序。复位后PC=0000H,即从程序存储器的0000H单元读出第一条指令,因此可在0000H单元内放置一条跳转指令,如LJMP××××(××××表示主程序入口地址)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。