单片机大容量数据存储器的系统扩展.docx

上传人:b****5 文档编号:8203094 上传时间:2023-01-29 格式:DOCX 页数:13 大小:61.10KB
下载 相关 举报
单片机大容量数据存储器的系统扩展.docx_第1页
第1页 / 共13页
单片机大容量数据存储器的系统扩展.docx_第2页
第2页 / 共13页
单片机大容量数据存储器的系统扩展.docx_第3页
第3页 / 共13页
单片机大容量数据存储器的系统扩展.docx_第4页
第4页 / 共13页
单片机大容量数据存储器的系统扩展.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

单片机大容量数据存储器的系统扩展.docx

《单片机大容量数据存储器的系统扩展.docx》由会员分享,可在线阅读,更多相关《单片机大容量数据存储器的系统扩展.docx(13页珍藏版)》请在冰豆网上搜索。

单片机大容量数据存储器的系统扩展.docx

单片机大容量数据存储器的系统扩展

 

数理与信息工程学院

课程设计

 

题目:

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

专业:

姓名:

学号

指导老师:

成绩:

 

目录

第1节引言………………………………………………………………………3

1.1概述…………………………………………………………………………3

1.2本设计任务……………………………………………………………………3

1.3系统主要功能…………………………………………………………………3

第2节硬件设计………………………………………………………………4

2.1系统的硬件设计及功能………………………………………………………4

2.2CPLD的功能介绍……………………………………………………………5

2.3AT89C52的功能介绍……………………………………………………………5

2.4简单大容量数据存储器系统扩展……………………………………………9

第3节系统软件设计……………………………………………………………12

第4节结束语………………………………………………………………………14

参考文献…………………………………………………………………………14

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

 

第1节引言

1.1概述

在51单片机应用系统中,有一些特殊的应用场合需要使用大容量的数据存储器。

传统的用IO口线直接控制大容量数据存储器的片选信号的扩展系统存在运行C51编译的程序时容易死机的缺点。

文中先介绍一种传统I/O口线直接控制大容量数据存储器,比较简单.后根据实际使用的应用系统,介绍了一种改进的基于CPLD的51系列单片机大容量数据存储器的扩展方法,包括硬件组成和软件处理方法。

1.2本设计任务

大容量数据存储器的扩展

1.3系统主要功能

MCS-51单片机系统扩展时,一般使用P0口作为地址低8位(与数据口分时复用),而P2口作为地址高8位,它共有16根地址总线,最大寻址空间为64KB。

但在实际应用中,有一些特殊场合,例如,基于单片机的图像采集传输系统,程控交换机话单的存储等,需要有大于64KB的数据存储器。

在以往的扩展大容量数据存储器的设计中,一般是用单片机的IO口直接控制大容量数据存储器的片选信号来实现,但是这种设计在运行以C51编写的程序(以LARGE方式编译)时往往会出现系统程序跑飞的问题,尤其是在程序访问大容量数据存储器(如FLASH)的同时系统产生异常(如中断),由于此时由IO口控制的片选使FLASH被选中而SRAM无法被选中,堆栈处理和函数参数的传递无法实现从而导致程序跑飞的现象。

文章介绍一种基于CPLD的大容量数据存储器的扩展系统,避免了上述问题的产生,提高了扩展大容量数据存储器系统的可靠性。

该系统MCU采用89C52,译码逻辑的实现使用了一片EPM7128CPLD芯片,系统扩展了一片128K的SRAM,一片4M字节的NORFLASH,以上芯片均为5V供电。

第2节

硬件设计

2.1系统的硬件构成及功能

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;所有数据存储器的读写控制线与MCU相应的读写控制线相连。

SRAM和FLASH的片选信号由CPLD内部译码产生:

/CS_SRAM接SRAM的片选,/CS_FLASH接FLASH的片选。

2.2CPLD的功能实现

CPLD(ComplexProgrammedLogicalDevice)直接翻译就是复杂可编程逻辑器件复杂可编程逻辑器件(CPLD)。

CPLD提供的逻辑资源少得多-最高约1万门。

但是,CPLD提供了非常好的可预测性,因此对于关键的控制应用非常理想。

而且如XilinxCoolRunner™系列CPLD器件需要的功耗极低,并且价格低廉,从而使其对于成本敏感的、电池供电的便携式应用(如移动电话和数字手持助理)非常理想。

EPM7128是可编程的大规模逻辑器件,为ALTERA公司的MAX7000系列产品,具有高阻抗、电可擦等特点,可用门单元为2500个,管脚间最大延迟为5ns,工作电压为+5V。

IDT7205为FIFO型异步读写的存储器芯片,容量为8192×9比特,存取时间为12ns,有空、半满、满三个标志位,最大功耗为660mW,工作电压为+5V。

MSM486DX属于PC104嵌入式系统的5X86系列,为AMD-133MHzCPU,具有COM1、COM2两个串口,一个LPT并口,一个FLOPPY接口,一个IDE接口,一个VGA/LCD接口,一个AT-KEYBOARD接口,16个中断,额定功率为8W,工作电压为+5V。

使用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。

图2CPLD的内部结构图

2.3AT89C52简介

89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8Kbytes的可反复擦写的只读程序存储器和256byte的随机数据存储器,器件采用ATMEL公司高密度\非易失性存储技术生产,与标准的51指令系统以8052产品引脚兼容,片内置通用8位中央处理器和FLASH存储单元,功能强大89C52单片机适合于许多较为复杂控制应用场合.

主要性能参数:

.与MCS-51产品指令和引脚完全兼容

.8K字节可重擦写FLASH闪速存储器

.1000次擦写周期

.全静态操作:

0Hz-24Hz

.三级加密程序存储器

.256*8字节内部RAM

.32个可编程I/O口线

.3个16位定时/计数器

.8个中断源

.可编程串行UART通道

.低功耗空闲和掉电模式

功能特性概述:

AT89C52提供以下标准功能:

8K字节FLASH闪存存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两极中断结构,一个全双工串行通信口,片内振荡器及时钟电路.同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式:

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

引脚功能说明

.vcc:

电源电压

.GND:

.P0口:

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据复用,在访问期间激活内部上拉电阻。

在FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

.P1口:

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时输出一个电流。

与AT89C51不同之处,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)HE输入(P1.1/T2EX)

.P2口:

P2是一个带有内部上拉电阻的双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉倒高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器时,P2口输出P2锁存器的内容。

FLASH编程或校验时,P2亦接收高位地址和一些控制信号。

.P3口:

P3口是一组带有内部上拉电阻的双向8位I/O。

P3口输出缓冲级可驱动4个TTL逻辑门电路。

对P3口写“1”时,它们被内部上拉电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流。

P3口除了作为一般的I/O线外,更重要的用途是它的第二功能

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行口输出口)

P3.2

INT0(外中断0)

P3.3

INT1(外中断1)

P3.4

T0(定时/计数器0)

P3.5

T1(定时/计数器1)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器选通)

此外,P3口还接收一些用于FLASH闪存存储器编程器和程序校验的控制信号。

.RST:

复位输入,当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。

.ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE输出脉冲用于所村地址的8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

.PSEN:

程序储存允许输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令时,每个机器周期两次有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

.EA/VPP外部访问允许。

欲使CPU仅访问外部程序存储器,EA端必须保持低电平。

.XTAL1:

振荡器反向放大的及时内部时钟发生器的输入端。

.XTAL2:

振荡器反向放大的输出端。

.特殊功能寄存器:

在AT89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器。

AT89C52除了与AT89C51所有的定时/计数器和定时/计数器外,还增加了一个定时/计数器2。

定时/计数器2的控制和状态位位于T2CONT2MOD,寄存器对是定时器2在16位捕捉或16位自动重装方式下捕捉/自动重装载寄存器。

.中断寄存器:

AY89C52有6个中断源,2个中断优先级,IE寄存器控制各中断位,IP寄存器中6个中断源的每一个可定为2个优先级。

.数据存储器AT89C52有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器地址是重叠的,也就是高128字节的RAM和特殊功能寄存器的地址是相同的,但物理上它们是分开的。

.定时器0和定时器1:

AT89C52的定时器和定时器1的工作方式与AT89C51相同。

.定时器2:

定时器是一个16位定时/计数器。

它既可当定时器使用,也可作为外部时间计数器使用,其工作方式由特殊功能寄存器T2CON的C/T2位选择。

定时器2有三种工作方式:

捕捉方式,自动重装载方式和波特率发生器方式,工作方式由T2CON的控制位来选择。

见表

RCLK+TCLK

CP/RL2

TR2

MODE

0

0

1

16-BITAUTO-RELOAD

O

1

1

16BIT-CAPUTURE

1

X

1

BAUDRATEENERATOR

X

X

0

OFF

定时器2由两个8位寄存器TH2和TL2组成,在定时器工作方式中,每个机器周期TL2寄存器的值加1,由于一个机器周期由12个振荡时钟构成,因此,计数速率为振荡频率的1/12。

在计数工作方式时,当T2引脚上外部输入信号产生由1至0下降沿时,寄存器的值加1,在这种方式下,每个机器周期的5SP2期间寄存器加1。

由于识别1至0的跳变需要2个机器周期,因此,最高计数速率为振荡的1/24。

为确保采样的正确性,要求输入的电平在此变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。

图AT89C52框图

2.4基本单片机系统大容量数据存储器系统扩展

MCS-51单片机系统扩展时,一般使用P0口作为地址低8位(与数据口分时复用),而P2口作为地址高8位,它共有16根地址总线,寻址空间为64KB。

但在实际应用中,有一些特殊场合,例如,语音信号的采集,程控交换机话单的存储,地形图信号的收取等,需要有大于64KB的数据存储器。

文章根据作者实际使用的应用系统,介绍一种大容量数据存储器的扩展系统。

该系统主机采用51芯片,扩展了三片62256,共96KB的动态数据存储器。

系统的硬件组成:

62256是32K×8位的数据存储器,共有15根地址线,扩展96KB数据存储器的硬件连接原理如图1所示:

为了给系统进行其它外设的扩展,占用了系统14根地址线。

三片62256的第15根地址线都与8031的I/O口P1.0相连,而62256

(1)的片选端与P1.1相连,62256

(2)的片选端与P1.2相连,62256

(2)的片选端与P1.3相连,这样的连接方式使96KB的存储空间分为6页,每片62256都占用2页存储空间。

各片地的地址分配如下:

62256

(1):

P1.0=0P1.1=0P1.2=1P1.3=10000H~3FFFH

P1.0=1P1.1=0P1.2=1P1.3=10000H~3FFFH

62256

(2):

P1.0=0P1.1=1P1.2=0P1.3=10000H~3FFFH

P1.0=1P1.1=1P1.2=0P1.3=10000H~3FFFH

62256(3):

P1.0=0P1.1=1P1.2=1P1.3=00000H~3FFFH

P1.0=1P1.1=1P1.2=1P1.3=00000H~3FFFH

软件处理方法:

当访问数据存储器时,采用分页查找的方法,首取找到要访问的页数,再打开该页,在该页内查找某一单元。

软件上打开某页都事先编好子程序。

要访问96KB的存储空间,即地址范围为00000H-17FFFH,显然16位地址寄存器DPTR是无法寄存的,这里将地址装入PAM的起始三个连续单元中,即62256

(1)起始三个单元中的内容(即要访问的某单元地址),将该数据除以4000H,得商即为该单元的页数,余数即为该页中的地址,然后利用MCS-51指令中的散转指令打开页,访问页中的单元。

具体软件实现见下面的程序清单。

#BUFEQU#30H

CLRP1.0

CLRP1.1

SETBP1.2

SETBP1.3

MOVDPTR,#0

MOVR7,#3

MOVR0,#20H

RDPAGE:

MOVXA,@DPTR

MOV@R0,A

INCR0

DJNZR7,RDPAGE

LCALLFPAGE

MOVB,#3

MULAB

MOVDPTR,#TABLE

JMP@A+DPTR

FPAGE:

MOVA,21H

ANLA,@0F0H

ADDA,20H

SWAPA

MOVB,#1

DIVAB

PUSHACC

MOVA,21H

ANLA,0FH

XCHA,B

MOV21H,A

POPACC

RET

TABLE:

LJMPPAGE1

LJMPPAGE2

LJMPPAGE2

LJMPPAGE4

LJMPPAGE5

LJMPPAGE6

CLRP1.1

SETBP1.2

SETBP1.3

LJMPWRRAM

PAGE3:

CLRP1.0

SETBP1.1

CLRP1.2

SETBP1.3

LJMPWRRAM

PAGE:

SETBP1.1

SETBP1.2

CLRP1.3

LJMPWRRAM

WRRAM:

MOVDPH,21H

MOVR0,#BUF

MOVA,@R0

MOVX@DPTR,A

                                                      

 

第3节系统的软件设计

3.1系统主程序设计

如用KEIL编译C51程序时,首先设置项目的编译模式为LARGE模式,并设置片外XRAM的相关参数为:

START:

0x0000,SIZE:

0x7F00。

访问BANK0时无需编写子程序,系统可以直接访问。

访问SRAM的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示例代码如下:

voidWrite_Sram_Bank123(unsignedlongaddress,

unsignedcharval)

{

unsignedcharbank;unsignedintaddr_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;//写SRAM。

}

}

unsignedcharRead_Sram_Bank123(unsignedlongaddress)

{

unsignedcharbank;unsignedintaddr_bank;

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

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

{

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

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

returnXBYTE[0x8000+addr_bank];//读SRAM。

}

elsereturn0xff;

}

访问FLASH的步骤如下:

①锁存高8位地址使AL22为1,同时设置要访问的7位页码值(要访问FLASH的绝对物理地址除于32K,商为页码值,余数为页内的偏移地址)②在0x8000~0xFEFF地址范围内操作FLASH(A15=1)。

Write_Flash函数实现了往4MFLASH写一个字节的功能;Read_Flash函数的功能是在FLASH里读取一个字节内容。

相关C51示例代码如下:

voidWrite_Flash(unsignedlongaddress,unsignedcharval)

{

unsignedchardatapage,unsignedintdata addr_page;

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

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

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

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

}

unsignedcharRead_Flash(unsignedlongaddress)

{

unsignedchardatapage,unsignedintdata

addr_page;

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

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

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

returnXBYTE[0x8000+addr_page];//读FLASH

}

 

结束语

其实如果只是要扩充96KB大容量的数据存储器可以直接利用汇编语言和62256扩展,用8031就可以了,这个是相比较下容量扩展的简单内设计。

如果是在设计的基于GPRS的远程图像采集系统中,由于采集图像时需要64K以上的RAM空间,并且当GPRS传输通道出现故障时需要把大量的图像信息暂存于FLASH中,因此,采用了上述硬件设计方法及软件处理方法,实践证明基于这种方法扩展大容量数据存储器的单片机应用系统具有对数据存储器操作简便、系统运行稳定的特点,解决了系统在访问大容量数据存储器并且产生异常时程序跑飞的问题。

而且,由于CPLD具有可编程重特性,因而可以根据需要方

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

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1