㈠ 关于51单片机外扩RAM的问题。请大侠们帮忙解答,先谢过。
现在的rom和ram都很丰富,rom有好几k的,你写程序肯定够了,除非你要用大量的数据,才会使用大量的程序空间,比如几十k,才会考虑去扩充。
扩充是用p0口和p2口扩充,p0口是数据,p2口是地址,用373锁存就可以扩展了。地址如果不是很大,可以用138译码,这样可以扩展多片芯片,如果很大,就采用线选咯。
㈡ 51单片机的扩展原理
51单片机具有八位数据总线(p0口)和16为地址中线(p2p0口),所以其扩展原理就是利用数据和地址总线的方式来扩展外部rom或者ram的。且又专门的指令来读写扩展的存储器数据。分别是movx和movc。
㈢ MCS-51单片机扩展外部数据存储器和数据存储器如何编址
51的P0口和P2口用作地址线,具体的编制要看你的存储器的控制接口,一般有片选线和数据线,外部数据存储器的地址就是使片选有效的P2口用作高8位P0口用作低8位的地址,例如P2.7用作低电平有效的外部RAM片选控制信号,其地址就为0x7fff
㈣ 51单片机扩展外部数据存储器6264,怎么用C语言实现对其操作
2.扩展RAM编程基础
(1)弄清扩展器件的地址
在图7.2.5中,U3的ABC接单片机A13,A14,A15,所以片选信号对应地址最高位,即:“CBAxxxxx xxxxxxxx”(x为任意)。U4片选接CS1,即Y1,CBA=001,可得U4的地址范围是0x2000~0x3fff。U5接CS3,即Y3,CBA=011,地址为0x6000~0x7fff。U6接CS4,即Y4,CBA=100,地址为0x8000~0x9fff。知道了器件地址,可以利用直接地址、外部数据指针来访问存储器。通过设置,也可以让编译器在扩展RAM中自动分配存储单元。
(2)直接地址访问
①向U4写数据:
XBYTE[0x2000+addr]=dat; //addr为U4内部地址,取值为0~0x1fff;dat为数据。
②读出U4数据:
dat=XBYTE[0x2000+addr];
也可以用页访问方式。页访问方式,实际就是先把16位地址高8位送P2口,通过低8位地址读写。
③按页读写U4:
P2=0x20+page; // page为页,取值为0x00~0x1F。
PBYTE[addr]=dat; // addr为页内地址,取值为0x00~0xFF。
dat=PBYTE[addr];
④读U6
dat=XBYTE[0x8000];//读U6,地址取0x8000~0x9fff任何值,都一样。
⑤写U5
XBYTE[0x6000]=dat; //写U5,地址取0x6000~0x7fff任何值,都一样。
(3)数据指针
如,读写U4,可以这样写:
unsigned char xdata *p=0x3000; //声明指针p,并初始指向0x3000单元
x=*p; //读指针所指向的位置
p=p+1; //指针指向下一单元
*p=0x16; //向指针所指向的位置写入数据
(4)让编译器自动分配存储空间
①为了能让编译器自动分配存储空间,并使用扩展RAM,必须设置扩展RAM地址。在Keil编程软件中,点击工具栏快捷图标“ ”,弹出目标选项对话框。按图7.2.6所示,设置RAM起始地址和长度。
②变量声明时使用xdata关键词。如:
unsigned char xdata a;//变量a使用扩展RAM空间。
特别注意,扩展RAM直接地址访问方式与自动分配存储空间方式最好不要混用,否则可能产生冲突。
摘自《单片机控制装置安装与调试》下册,雷林均主编
㈤ 单片机 外扩数据存储器地址的问题
若MCS-51外扩16KB×8数据存储器的末地址若为9000H,则首地址为( )H。
需要知道计算的过程
----------------
末地址若为 9000H?
不可能的。
题目,出错了。
末地址,不可能是偶数。
有可能是 8FFFH。
㈥ 51单片机的外部存储器扩展
不对啊。外部存储器可以存放不同的程序。比如在同一个系统中使用不同的程序会完成不同的工作,直接换外部程序存储器就能很方便的换程序而不用换芯片或再烧写。
㈦ 51系列单片机如果需要外扩存储器,地址总线,数据总线,控制总线是如何构成的
51系列单片机如果需要外扩存储器,地址总线,数据总线,控制总线是如何构成的