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

来源:本站
导读:目前正在解读《一种改进的51单片机大容量数据存储器的系统扩展》的相关信息,《一种改进的51单片机大容量数据存储器的系统扩展》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一种改进的51单片机大容量数据存储器的系统扩展》的详细说明。
简介:在51单片机应用系统中,有一些特殊的应用场合需要使用大容量的数据存储器。传统的用I/O口线直接控制大容量数据存储器的片选信号的扩展系统存在运行C51编译的程序时容易死机的缺点。文中根据作者实际使用的应用系统,介绍了一种改进的基于CPLD的51系列单片机大容量数据存储器的扩展方法,包括硬件组成和软件处理方法。实践证明基于这种设计的大容量数据存储器的扩展系统具有对存储器操作简便,系统运行稳定的特点。

引言

MCS-51 单片机系统扩展时,一般使用P0口作为地址低8位(与数据口分时复用),而P2口作为地址高8 位,它共有16根地址总线,最大寻址空间为64KB。但在实际应用中,有一些特殊场合,例如,基于单片机的图像采集传输系统,程控交换机话单的存储等,需要有大于64KB 的数据存储器。在以往的扩展大容量数据存储器的设计中,一般是用单片机的IO口直接控制大容量数据存储器的片选信号来实现,但是这种设计在运行以C51编写的程序(以LARGE 方式编译)时往往会出现系统程序跑飞的问题,尤其是在程序访问大容量数据存储器(如FLASH)的同时系统产生异常(如中断),由于此时由IO 口控制的片选使FLASH 被选中而SRAM 无法被选中,堆栈处理和函数参数的传递无法实现从而导致程序跑飞的现象。文章根据作者实际使用的应用系统,介绍一种基于CPLD 的大容量数据存储器的扩展系统,避免了上述问题的产生,提高了扩展大容量数据存储器系统的可靠性。该系统MCU 采用89C52,译码逻辑的实现使用了一片EPM7128 CPLD 芯片,系统扩展了一片128K 的SRAM,一片4M 字节的NOR FLASH,以上芯片均为5V 供电。下面介绍其硬件组成及软件处理方法。

系统的硬件组成

W241024A是128K×8 位的静态RAM,共需17 根地址线,其A0~A7 接经CPLD 锁存输出的A0-A7,A8-A14 接89C52 的A8-A14 ,A15 、A16 分别接CPLD 输出的SRAM_A15 、SRAM_A16;M29F032D是4M×8位的NOR型FLASH,共需22 根地址线。A0-A14 的接法与W241024A 的相同,A15~A21接经CPLD 锁存输出的AL15~AL21;所有数据存储器的读写控制线与M C U 相应的读写控制线相连。S R A M 和F L A S H 的片选信号由CPLD 内部译码产生:/CS_SRAM 接SRAM的片选,/CS_FLASH 接FLASH的片选。

CPLD 的功能实现

使用CPLD 器件可以提高系统设计的灵活性,并且可以简化电路设计,节省很多常规电路中的接口器件和I/O 口线。系统将单片机的地址线、各种控制和状态信号均引入CPLD,实现系统的地址译码和部分I/O 控制。系统中CPLD 采用的是MAX7000 系列的EPM7128STC100 - 10。AL15-AL22 为系统锁存出来的高8 位地址,该地址锁存器的地址为:0x7F00;状态缓冲器地址为:0x7F20,通过状态缓冲器可以读取FLASH 的当前状态,判断FLASH 当前状态是忙还是空闲,如果应用系统中还有其它状态信号可以接至该状态缓冲器的输入端。/CS2-/CS7 可以用作其他器件的片选。128K 的SRAM 被SRAM_A15 和SRAM_A16分成4个BANK ,每个BANK 均为32K ,其中BANK0地址范围是:0x0000~0x7EFF,当A15 为0 时BANK0 被选中,BANK0 可用来存储用户定义的各种变量,以LARGE 方式编译的C51 用户函数的参数传递也在该区实现,只要设置C51 编译器的片外SRAM 的大小为0x7F00 字节(32K-256 字节),起止地址为:0x0000。这样当系统在访问外部大容量数据存储器(如4M 的FLASH )并且系统产生中断时,由于系统在函数调用时自动使A15为0 ,故此时BANK0是可用的,这样保证了系统在这种情况下能稳定的运行。

由于访问BANK1-BANK3 时A15必须为1,故BANK1-BANK3 的地址范围均为:0x8000~0xFEFF,通过SRAM_A15 和SRAM_A16 来区分它们是属于哪个BANK 的,访问BANK1-BANK3 的前提是AL22 为0 。BANK1-BANK3 可用来存储用户数据。当AL22 和A15 均为1时4M的FLASH 被选中,FLASH 被AL15-AL21 分成了128页,每页为32K。下面介绍访问大容量数据存储器的软件实现。

软件处理方法

如用KEIL 编译C51 程序时,首先设置项目的编译模式为LARGE 模式,并设置片外XRAM的相关参数为:START :0x0000 ,SIZE:0x7F00。访问BANK0 时无需编写子程序,系统可以直接访问。访问S R A M 的BANK1-BANK3 步骤为:

①锁存高8位地址使AL22 为0 ,设置BANK值(要访问SRAM的绝对物理地址除于32K ,商为BANK值,余数为BANK内的偏移地址) ②在0x8000~0xFEFF 地址范围内操作SRAM(A15=1)。Write_Sram_Bank123 函数的功能为写一个字节数据至片外SRAM 的BANK1~BANK3,Read_Sram_Bank123 函数的功能是从SRAM 的BANK1~BANK3 读一个字节数据。相关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 ) && (bank <= 3))

{

addr_bank = address % 0x8000;// 余数为BANK 内地址。

XBYTE [0x7f00] = bank; // AL22=0,设置BANK 值。

XBYTE[0x8000+addr_bank] = val; // 写S R A M 。

}

}

unsigned char Read_Sram_Bank123(unsigned long

address)

{

unsigned char bank;unsigned int addr_bank;

bank = address / 0x8000;// 商为BANK 值。

if ((bank > = 1 ) && (bank <= 3))

{

addr_bank = address % 0x8000;// 余数为BANK 内地址。

XBYTE [0x7f00] = bank; // AL22=0,设置BANK值。

return XBYTE[0x8000+ addr_bank]; // 读SRAM 。

}

else return 0xff;

}

访问FLASH 的步骤如下:①锁存高8位地址使AL22 为1,同时设置要访问的7位页码值(要访问FLASH 的绝对物理地址除于32K ,商为页码值,余数为页内的偏移地址) ② 在0x8000~0xFEFF地址范围内操作FLASH(A15=1)。Write_Flash 函数实现了往4M FLASH 写一个字节的功能;Read_Flash 函数的功能是在FLASH 里读取一个字节内容。相关C 5 1 示例代码如下:

void Write_Flash(unsigned long address,unsigned

char val)

{

unsigned char data page,unsigned int data

addr_page;

page = address / 0x8000; // 商为页码值。

addr_page = address % 0x8000;// 余数为页内地址。

XBYTE [0x7f00] = 0x80 + page; // AL22=1,并设置page 值。

XBYTE[0x8000+addr_page] = val;// 写FLASH。

}

unsigned char Read_Flash(unsigned long address)

{

unsigned char data page,unsigned int data

addr_page;

page = address / 0x8000; // 商为页码值。

addr_page = address % 0x8000;// 余数为页内地址。

XBYTE [0x7f00] = 0x80 + page; // AL22=1,并设置page 值。

return XBYTE[0x8000+addr_page]; // 读FLASH

结束语

在作者设计的基于GPRS的远程图像采集系统中,由于采集图像时需要64K 以上的RAM空间,并且当GPRS传输通道出现故障时需要把大量的图像信息暂存于FLASH中,因此,采用了上述硬件设计方法及软件处理方法,实践证明基于这种方法扩展大容量数据存储器的单片机应用系统具有对数据存储器操作简便、系统运行稳定的特点,解决了系统在访问大容量数据存储器并且产生异常时程序跑飞的问题。而且,由于CPLD具有可编程重置特性,因而可以根据需要方便地改变内部逻辑功能,而且简单易行,易于系统调试及升级,同时具有很高的性价比。

提醒:《一种改进的51单片机大容量数据存储器的系统扩展》最后刷新时间 2024-03-14 01:09:53,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一种改进的51单片机大容量数据存储器的系统扩展》该内容的真实性请自行鉴别。