中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 存储设计 >>电子行业新闻正文

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

时间:2006/9/29 11:38:00  作者:  来源:ic72  浏览人数:1723
 
 

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

      引言

      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单片机大容量数据存储器的系统扩展
·高速大容量固态存储系统的设计
·DSP片外高速海置SDRAM存储系统设计
·分页烧写Flash的多页程序并行自举方法
·基于M—BUS的趣低功耗数据采集系统
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9