⑴ 为什么要对单片机系统进行存储器扩展
如果单片机系统原有的资源不够充足、不能满足应用所需的要求,那么就需要进行存储器的扩展。
可能需要扩展片外的程序存储器,也可能需要扩展片外的数据存储器,某些情况下还需要结合软件进行更复杂的存储器接口扩展(例如大容量的SPI Flash或者走SPI子协议的SD卡等等)。
⑵ 如图,单片机,数据存储器的扩展,这题怎么算,求过程
8K*8存储器地址最大为:1FFFH,二进制:0001 1111 1111 1111
3-8译码器分配给4片存储器的地址组合是:
前3位 对应的最高地址 地址范围
第一片:000 0001 1111 1111 1111 0000H--1FFFH
第二片:001 0011 1111 1111 1111 0000H--3FFFH
第三片:010 0101 1111 1111 1111 0000H--5FFFH
第四片:011 0111 1111 1111 1111 0000H--7FFFH
⑶ 为单片机拓展外部程序存储器时,多片ROM芯片的容量不同如何拓展
拓展外部存储器,通常都会选择相同容量的芯片,因为这样构建译码电路会比较简单。如果因一些特殊需要,必须使不同容量的器件,那要看扩展的存储空间是否要求连接的地址。若必须是连接地址,地址译码电路比较复杂,适合采用CPLD或FPGA等可编程器件来实现。如果每片扩展存储器之间,并不要求连续地址,也可考虑按最大容量器件的地址范围来设计译码。
⑷ 51单片机的扩展原理
51单片机具有八位数据总线(p0口)和16为地址中线(p2p0口),所以其扩展原理就是利用数据和地址总线的方式来扩展外部rom或者ram的。且又专门的指令来读写扩展的存储器数据。分别是movx和movc。
⑸ 单片机程序存储器扩展电路问题
答:在设计片外程序存储器之前,首先要决定EA引脚的电平。
EA=0,单片机只访问外部程序存储器,对于8031单片机此引脚必须接地.EA=1,单片机访问内部程序存储器,对于内部有程序存储器的8XX51单片机,此引脚应接高电平,但若地址值超过4KB范围,单片机将自动访问外部程序存储器。
设定好EA后,单片机自动按程序所设定的次序执行。
在编程中不需要专门的语句指定调用的是外部程序存储器。比如设定EA接高电平,则程序在执行完片内的程序存储器指令后自动转入片外程序存储器,而无需特殊命令。这就是所谓的程序存储器是片内外统一编址,而数据存储器则用Mov和Movx分别对待的。
但楼主要知道程序在读取片外指令代码时的过程:先寻址,再取数。单片机会根据PC的值先给P2和p0送一个选通地址(PC的值),接下来从片外程序存储器读取代码。因为PC的值一般是连续的,这就要求片外的程序存储器空间要连续分布,这和数据存储器不同。如果不连续分布,就要用特殊的行号改变PC的值,使它和片外程序存储器分布能够对应。
⑹ 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直接地址访问方式与自动分配存储空间方式最好不要混用,否则可能产生冲突。
摘自《单片机控制装置安装与调试》下册,雷林均主编
⑺ 单片机实验思考题答案
P1 口输入/输出实验
ORG 00H
AJMP START
ORG 30H
START:mov P1,#0FFH
LP:mov A,P1
MOV DPTR,#4200H
ANL A,#00000011B
MOVC A,@A+DPTR
MOV P1,A
LJMP LP
ORG 4200H
DB 0FBH ,0F7H,0EFH,0DFH
END
定时器实验
ORG 00H
LJMP START
ORG 30H
START:MOV A,#0FFH
CLR C
MOV TMOD,#01H
MOV TH0,#0D8H
MOV TL0,#0F0H
SETB TR0
LP1:RRC A
MOV P1,A
LP2:JBC TF0,LP3
LJMP LP2
LP3:MOV TH0,#0D8H
MOV TL0,#0F0H
LJMP LP1
END
这两个试验我做过了,第三第四也做了,如果要电路图可以发我邮箱771635147@qq.com。
⑻ 试设计一个单片机的存储器扩展系统,并确定各个存储器芯片的地址范围。要求:(1)单片机采用8031;
自己找8051外设接口这章学习下。
⑼ 单片机进行存储式器扩展时有哪些地址译码方式
线选法----用单片机的I/O口线选中外部存储器的片选端
部分译码法----扩展亮不是很大,只需要少量片选
完整译码法----全部设计出64K的16条地址线
⑽ 51单片机程序存储器扩展的一些问题
RAM还是RAM,当然有起作用了,如果RAM不够就要扩展,51RAM只有128B,有时确实不够用,也可以用52、53的单片机,看看程序有没写错了。
有点奇怪,为什么要用AT28C64呢,可以用AT89S52内部就有8KB的FLASH,而且两种价格相当,我这52跟51是一样的。
还是建议你不要用扩展的ROM,用来玩还可以,用来做设计不实用,占用太多IO口不说,安全性不高,你也不想自己苦写的程序被人盗走吧。
你可以提高编程技巧,使程序简捷,减少占用空间。或改用其它内带大容量ROM的芯片。
51的ROM确实小,不过我还没写出超出8K的(汇编),用AVR的吧如:ATmega32吧,内部就有32K的FLASH,2KBRAM,1KBEEPROM跟51一样40个脚,速度大约是51的8倍。ATmega128有128K的FLASH(不过管脚有点多),跟AT89S51是同一个厂家.