收藏 分享(赏)

种改进的51单片机大容量数据存储器的系统扩展-Read.doc

上传人:weiwoduzun 文档编号:2326780 上传时间:2018-09-10 格式:DOC 页数:3 大小:17.50KB
下载 相关 举报
种改进的51单片机大容量数据存储器的系统扩展-Read.doc_第1页
第1页 / 共3页
种改进的51单片机大容量数据存储器的系统扩展-Read.doc_第2页
第2页 / 共3页
种改进的51单片机大容量数据存储器的系统扩展-Read.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、种改进的 51 单片机大容量数据存储器的系统扩展 摘要:在 51 单片机应用系统中,有一些特殊的应用场合需要使用大容量的数据存储器。传统的用 I/O 口线直接控制大容量数据存储器的片选信号的扩展系统存在运行 C51编译的程序时容易死机的缺点。文中根据作者实际使用的应用系统,介绍了一种改进的基于 CPLD 的 51 系列单片机大容量数据存储器的扩展方法,包括硬件组成和软件处理方法。实践证明基于这种设计的大容量数据存储器的扩展系统具有对存储器操作简便,系统运行稳定的特点。关键词:单片机;CPLD;大容量数据存储器引言MCS-51 单片机系统扩展时,一般使用 P0 口作为地址低 8 位(与数据口分时

2、复用) ,而 P2口作为地址高 8 位,它共有 16 根地址总线,最大寻址空间为 64KB。但在实际应用中,有一些特殊场合,例如,基于单片机的图像采集传输系统,程控交换机话单的存储等,需要有大于 64KB 的数据存储器。在以往的扩展大容量数据存储器的设计中,一般是用单片机的 IO 口直接控制大容量数据存储器的片选信号来实现,但是这种设计在运行以 C51 编写的程序(以 LARGE 方式编译)时往往会出现系统程序跑飞的问题,尤其是在程序访问大容量数据存储器(如 FLASH)的同时系统产生异常(如中断) ,由于此时由 IO 口控制的片选使 FLASH 被选中而 SRAM 无法被选中,堆栈处理和函数

3、参数的传递无法实现从而导致程序跑飞的现象。文章根据作者实际使用的应用系统,介绍一种基于 CPLD 的大容量数据存储器的扩展系统,避免了上述问题的产生,提高了扩展大容量数据存储器系统的可靠性。该系统 MCU 采用 89C52,译码逻辑的实现使用了一片 EPM7128 CPLD 芯片,系统扩展了一片 128K 的 SRAM,一片 4M 字节的 NOR FLASH,以上芯片均为 5V 供电。下面介绍其硬件组成及软件处理方法。系统的硬件组成系统的硬件组成W241024A 是 128K8 位的静态 RAM,共需 17 根地址线,其 A0A7 接经 CPLD 锁存输出的 A0-A7,A8-A14 接 89

4、C52 的 A8-A14 ,A15 、A16 分别接 CPLD 输出的SRAM_A15 、SRAM_A16;M29F032D 是 4M8 位的 NOR 型 FLASH,共需 22 根地址线。A0-A14 的接法与 W241024A 的相同,A15A21 接经 CPLD 锁存输出的 AL15AL21;所有数据存储器的读写控制线与 M C U 相应的读写控制线相连。S R A M 和 F L A S H 的片选信号由 CPLD 内部译码产生:/CS_SRAM 接 SRAM 的片选,/CS_FLASH 接 FLASH 的片选。CPLD 的功能实现使用 CPLD 器件可以提高系统设计的灵活性,并且可以

5、简化电路设计,节省很多常规电路中的接口器件和 I/O 口线。系统将单片机的地址线、各种控制和状态信号均引入 CPLD,实现系统的地址译码和部分 I/O 控制。系统中 CPLD 采用的是 MAX7000 系列的EPM7128STC100 10。AL15-AL22 为系统锁存出来的高 8 位地址,该地址锁存器的地址为:0x7F00;状态缓冲器地址为:0x7F20,通过状态缓冲器可以读取 FLASH 的当前状态,判断 FLASH 当前状态是忙还是空闲,如果应用系统中还有其它状态信号可以接至该状态缓冲器的输入端。/CS2-/CS7 可以用作其他器件的片选。 128K 的 SRAM 被SRAM_A15

6、和 SRAM_A16 分成 4 个 BANK ,每个 BANK 均为 32K ,其中 BANK0 地址范围是:0x00000x7EFF,当 A15 为 0 时 BANK0 被选中,BANK0 可用来存储用户定义的各种变量,以 LARGE 方式编译的 C51 用户函数的参数传递也在该区实现,只要设置 C51 编译器的片外 SRAM 的大小为 0x7F00 字节(32K256 字节) ,起止地址为:0x0000。这样当系统在访问外部大容量数据存储器(如 4M 的 FLASH )并且系统产生中断时,由于系统在函数调用时自动使 A15 为 0 ,故此时 BANK0 是可用的,这样保证了系统在这种情况下

7、能稳定的运行。由于访问 BANK1-BANK3 时 A15 必须为 1,故 BANK1-BANK3 的地址范围均为:0x80000xFEFF,通过 SRAM_A15 和 SRAM_A16 来区分它们是属于哪个 BANK 的,访问 BANK1-BANK3 的前提是 AL22 为 0 。BANK1-BANK3 可用来存储用户数据。当AL22 和 A15 均为 1 时 4M 的 FLASH 被选中,FLASH 被 AL15-AL21 分成了 128 页,每页为 32K。下面介绍访问大容量数据存储器的软件实现。软件处理方法如用 KEIL 编译 C51 程序时,首先设置项目的编译模式为 LARGE 模式

8、,并设置片外XRAM 的相关参数为: START :0x0000 ,SIZE:0x7F00。访问 BANK0 时无需编写子程序,系统可以直接访问。访问 S R A M 的 BANK1-BANK3 步骤为:锁存高 8 位地址使 AL22 为 0 ,设置 BANK 值(要访问 SRAM 的绝对物理地址除于32K ,商为 BANK 值,余数为 BANK 内的偏移地址) 在 0x80000xFEFF 地址范围内操作 SRAM(A15=1) 。Write_Sram_Bank123 函数的功能为写一个字节数据至片外SRAM 的 BANK1BANK3,Read_Sram_Bank123 函数的功能是从 SR

9、AM 的BANK1BANK3 读一个字节数据。相关 C51 示例代码如下:void Write_Sram_Bank123(unsigned long address,unsigned char val) unsigned char bank;unsigned int addr_bank; bank = address / 0x8000;/ 商为 BANK 值。 if (bank = 1 ) / AL22=1,并设置 page 值。 XBYTE0x8000+addr_page = val;/ 写 FLASH。 unsigned char Read_Flash(unsigned long addr

10、ess) unsigned char data page,unsigned int data addr_page; page = address / 0x8000; / 商为页码值。 addr_page = address % 0x8000;/ 余数为页内地址。 XBYTE 0x7f00 = 0x80 + page; / AL22=1,并设置 page 值。 return XBYTE0x8000+addr_page; / 读 FLASH结束语在作者设计的基于 GPRS 的远程图像采集系统中,由于采集图像时需要 64K 以上的 RAM空间,并且当 GPRS 传输通道出现故障时需要把大量的图像信息暂存于 FLASH 中,因此,采用了上述硬件设计方法及软件处理方法,实践证明基于这种方法扩展大容量数据存储器的单片机应用系统具有对数据存储器操作简便、系统运行稳定的特点,解决了系统在访问大容量数据存储器并且产生异常时程序跑飞的问题。而且,由于 CPLD 具有可编程重置特性,因而可以根据需要方便地改变内部逻辑功能,而且简单易行,易于系统调试及升级,同时具有很高的性价比。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报