51单片机外部存储连接
‘壹’ 51单片机与外部存储器之间是怎么通信的
51单片机与外部扩展存储器之间是通过数据总线(P0)及其相应电路来实现读写操作的。使用的指令是MOVX
‘贰’ 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直接地址访问方式与自动分配存储空间方式最好不要混用,否则可能产生冲突。
摘自《单片机控制装置安装与调试》下册,雷林均主编
‘叁’ 请问C51如何访问外部存储器,请用c程序说明,谢谢!
简单地说,注意两个方面:
软件部分:
1.添加头文件#include<absacc.h>
2.在需要读写的地方用XBYTE就行,具体做法如下:
比如要访问0xA0B0这个地址(读数据):变量名=XBYTE[0xA0B0]就行
反过来要给0xA0B0这个地址赋一个值(写数据):XBYTE[A0B0]=变量名
硬件部分:
硬件连接,将51MCU的P2口接外部存储器的高8位,P0口接数据并通过锁存器接外部存储器的低8位,锁存器的锁存端接51MCU的ALE,
51MCU的读写端要与外部存储器的控制端相连,就可以了。
‘肆’ 单片机C51芯片用于控制存储器的主要三个引脚是什么说明连接方法及实现的功能。
应该是单片机用于控制外部数据存储器的主要引脚有两个,即是控制信号RD和WR,RD为读信号,接到存储器的OE端,WR为写信号,接到存储器的WE端。其实应该叫三组总线:地址总线、数据总线和控制总线,RD和WR为控制总线。
‘伍’ 51单片机有外部数据存储器的时候怎么开始AD转换
movx @dptr,A,开启AD转换会与外部数据存储器发生冲突,那是因为DPTR中的地址没有指向AD转换器的端口地址,或者AD端口地址与外部数据存储器的地址重复了。没有具体电路,真正原因不好确定。
单片机可采用端口模式与AD转换器连接比较好,见下图。