- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
任务九 外部RAM、ROM扩展 单片机并行扩展总线方法 单片机并行扩展总线方法 单片机并行扩展总线方法 地址译码方法 地址译码方法 地址译码方法 全地址译码法:将系统中未用到的全部高位地址作为译码信号的输入端,由此产生的译码输出信号作为片选信号的一种译码方式。 每个存贮单元只有唯一的一个地址和它一一对应,不存在地址重叠现象。 地址译码方法 地址译码方法 部分地址译码法:单片机片选线中只有一部分参加了译码,其余部分是悬空的,在实际应用中这种使用方式不太多。 存贮器每个存贮单元的地址不是唯一的,存在地址重叠现象。 片外存储器的扩展 对于用内部无ROM的芯片8031,8032来建立系统,则必须外部扩展程序存贮器。 对于仅靠内部ROM,其ROM容量不能满足要求的情况,则可外部扩展程序存贮器。 程序存贮器的作用:用于存贮程序代码或程序常数。 片外存储器的扩展 程序存储器的扩展 常用的程序存储器芯片介绍 EPROM:紫外线可擦除电可编程的半导体只读存贮器,掉电后信息不会丢失。 EPROM中的程序由专门的编程器写入,由专门的擦除器擦除(擦除后全为1状态),擦除时紫外线强度为12000mw/cm2,波长为l=2537? ,时间为10~20min。 常用的EPROM有:2716,2732,2764,….。 片外存储器的扩展 E2PROM: 电可擦除电可编程的半导体存贮器,掉电后信息不会丢失。 编程时简单,不需要专门的编程器和擦除器。 E2PROM兼有程序存贮器和数据存贮器的特点,故既可作为程序存贮器,又可作为数据存贮器。 常用的并行E2PROM有:2816,2864。 片外程序存储器的扩展 片外程序存储器的扩展 片外数据存储器的扩展 数据存储器的扩展:单片机内部已具有128B或256B的RAM,但对需要大容量数据缓冲器的应用系统(如数据采集系统),就须外部扩展RAM。 常用的数据存储器芯片介绍 半导体静态随机存取存贮器SRAM:如6116,6264,62256。 E2PROM也可作外部RAM (但速度慢),但因它掉电后信息不丢失,对某些要求不间断工作、对于一些关键性的实时数据不允许丢失的场合较合适。 片外存储器的扩展 片外数据存储器的扩展 片外数据存储器的扩展 片外数据存储器的扩展 片外存储器扩展举例 扩展一片27256(32K)EPROM 一片62256(32K)SRAM 片外存储器扩展举例 #include reg51.h unsigned char code *point1; //定义指向ROM的指针变量 unsigned char xdata *point2; //定义指向外部RAM的指针变量 void main( ) { while(1) { point1=0x0000; //指向ROM的0000H单元 point2=0x5fff; //指向外部RAM的5FFFH单元 *point2=*point1; //将0000H单元数据传送给5FFFH单元 } } 硬件连接 P2.7-----/CE(6264) P2.4-P2.0----A12-A8(6264) P0---D(373) P0---D(6264) Q(373)---A7-A0(6264) /WR---/WE(6264) /RD---/OE(6264) 实验内容 存储器间的数据传送 1)片内RAM从30H开始的10个字节单元填充0-9,并依次传送到片内RAM从40H开始的单元中 2)片内RAM从30H开始的5个字节单元填充5-1,并依次传送到片外RAM从1000H开始的单元中 3)将片内ROM从20H开始的6个字节数据,依次传送到片内RAM从40H开始的6个单元中 #include reg51.h unsigned char data *point1; unsigned char data *point2; void main( ) { unsigned char data i; while(1) { point1=0x30; point2=0x40; for(i=0;i10;i++) { *point1=i; *point2=*point1; point1++; point2++; } } } #include reg51.h unsigned char code *point1; unsigned char data *point2; void main( ) { unsigned char data i; while(1)
文档评论(0)