
51的存储器从功能上来说可以分为程序存储器和数据存储器,至于到底能扩展多少存储空间,要看你扩展的是哪一类存储器。
访问存储空间时,需要用到两个指针变量,为DPTR何PC。其中pc为程序计数器,指向下一条需要执行的指令的地址,DPTR为数据指针寄存器,这两个变量的长度都为16位,这是51单片机内部结构决定的,无法改变。所以这两个指针的寻址能力都为64K。这样看来,两类存储器的扩展能力都为64K
。但是,如果你实际扩展过存储器,你就可以发现程序存储器的扩展能力并没有64K!!!
这是为什么呢????
这得从51单片机的存储空间的编址说起。这里仅作简单说明,具体可以看教科书。简单地说,内部程序存储器和外部程序存储器是一起编址的,它们分别占用64K地址的一部分,所以外部扩展时要减去内部的地址空间,当然小于64K啦。而数据存储器是内外部分别编址,内外部数据存储器用不同的指令进行访问,所以不用担心单片机会混淆内外部数据存储器,所以外部数据存储器扩展能力有64K
外部中断0设置为低电平触发,去掉while循环后一直按下按键实际代码为
delay();
p1=0xfe;
delay();
ex0=0;
p1=_crol_(p1,1);
delay();
ex0=1;
p1=0x00;
一直重复
之前的代码进入中断后会一直循环,并不会退出中断。正确做法中断应该改为:
void
tx0()
interrupt
0
using
0
{
unsigned
char
i;
delay();
p1=0xfe;
delay();
ex0=0;
while(1)
{
p1=_crol_(p1,1);
delay();
if(p3&0x04)
//判断是否松开中断0的按键
{
break;
}
}
ex0=1;
p1=0x00;
}
地址是一样的,只是选通不一样。片选,你如果想简单一点的话,可以用一个IO口控制两个存储器的选通。
P0外接一个地址锁存器74HC373或者573。具体接法可以参考并行扩展。
地址信号从P0和P2口出去,低位在P0,高位在P2,数据从P0读入。
不过一般并行扩展都只扩展一块芯片。如果你的系统里面同时要用RAM和ROM,建议RAM部分采用并行扩展(因为RAM一般要求速度快,并行有这个优势),ROM使用串行EEPROM,比如AT24C256。这样不容易冲突。程序也相对简单。
片外的储存器当然都是用户自己扩展的。针对于你提出的问题,我之前也有过相似的疑问,后来我觉得所谓rom,即只读存储器并不是说你根本就不能改变里面的数据,而是说在单片机运行期间里面的东西是不能改变的,因为里面存的是程序。(你想想,程序在运行期间,自己改变了,那还能当程序吗???)比如说数据存储器,它是ram,里面存的是数据,可以改变,就可以在单片机运行期间被读写!
综上,rom(程序存储器)可以在烧程序时被改变,而ram(数据存储器)在单片机运行期间被改变!
所以用户程序就是存在那4kb里面!
希望能帮到你!!!
以上就是关于MCS-51单片机可扩展的程序存储器和数据存储器的地址空间各为多少全部的内容,包括:MCS-51单片机可扩展的程序存储器和数据存储器的地址空间各为多少、C51单片机外部中断扩展程序设计、当89C51单片机外部的程序存储器和数据储存器同时扩展时的地址分配等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)