51单片机大容量数据存储器的扩展解读.docx
- 文档编号:29796015
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:16
- 大小:44.03KB
51单片机大容量数据存储器的扩展解读.docx
《51单片机大容量数据存储器的扩展解读.docx》由会员分享,可在线阅读,更多相关《51单片机大容量数据存储器的扩展解读.docx(16页珍藏版)》请在冰豆网上搜索。
51单片机大容量数据存储器的扩展解读
郑州航空工业管理学院
《单片机原理与应用》
课程设计说明书
10级自动化专业1006112班级
题目51单片机大容量数据存储器的系统扩展
姓名杨向龙学号100611234
指导教师王义琴职称讲师
二О一三年六月十日
目录
一、51单片机大容量数据存储器的系统扩展的基本原理4
二、设计方案4
三、硬件的设计..........................................................................5
3.1系统的硬件构成及功能5
3.2硬件的系统组成5
3.2.1、W241024A5
3.2.2、CPLD的功能实现5
3.2.3、AT89C52简介6
3.2.4、SRAM的功能及其实现9
3.3、基本单片机系统大容量数据存储器系统扩展9
五、结论13
六、参考资料13
51单片机大容量数据存储器的系统扩展
摘要:
在单片机构成的实际测控系统中,仅靠单片机内部资源是不行的,单片机的最小系统也常常不能满足要求,因此,在单片机应用系统硬件设计中首先要解决系统扩展问题。
51单片机有很强的外部扩功能,传统的用IO口线直接控制大容量数据存储器的片选信号的扩展系统存在运行C51编译的程序时容易死机的缺点。
文中介绍了一种改进的基于CPLD的51系列单片机大容量数据存储器的扩展方法,包括硬件组成和软件处理方法。
关键字:
W241024A、CPLD、AT89C52、SRAM
一、51单片机大容量数据存储器的系统扩展的基本原理
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供电。
第三节硬件设计
3.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的片选。
3.2硬件的系统组成
3.2.1、W241024A
W241024A是128Kx8位的静态RAM,共需17根地址线,
其AO-A7接经CPLD锁存输出的AO-A7,A8-A14接89C52的A8-A14,A15,A16分别接CPLD输出的SRAM-A15,
SRAM-A16;M29FO32D是4Mx8位的NOR型FLASH,共
需22根地址线。
AO-A14的接法与W241024A的相同,A15-A21
接经CPLD锁存输出的AL15-AL21;所有数据存储器的读写控制线与MCU相应的读写控制线相连。
SRAM和FLASH的片
选信号由CPLD内部译码产生:
/CS-SRAM接SRAM的片
选,/CS-FLASH接FLASH的片选。
3.2.2、CPLD的功能实现
CPLD就是复杂可编程逻辑器件复杂可编程逻辑器件(CPLD)。
CPLD提供了非常好的可预测性,因此对于关键的控制应用非常理想。
CPLD主要是由可编程逻辑宏单元(MC,MacroCell)围绕中心的可编程互连矩阵单元组成。
其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。
由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。
使用CPLD器件可以提高系统设计的灵活性,并且可以简化电路设计,节省很多常规电路中的接口器件和I/O口线。
系统将单片机的地址线、各种控制和状态信号均引入CPLD,实现系统的地址译码和部分I/O控制。
系统中CPLD采用的是MAX7000系列的EPM7128STC100-10。
AL15~AL22为系统锁存出来的高8位地址,该地址锁存器的地址为:
0x7F00;状态缓冲器地址为:
0x7F20,通过状态缓冲器可以读取FLASH的当前状态,判断FLASH当前状态是忙还是空闲,如果应用系统中还有其它状态信号可以接至该状态缓冲器的输入端。
/CS2~/CS7可以用作其他器件的片选。
3.2.3、AT89C52简介
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”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时输出一个电流。
.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.0RXD(串行输入口)
P3.1TXD(串行口输出口)
P3.2INT0(外中断0)
P3.3INT1(外中断1)
P3.4T0(定时/计数器0)
P3.5T1(定时/计数器1)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器选通)
.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+TCLKCP/RL2TR2MODE
00116-BITAUTO-RELOAD
O1116BIT-CAPUTURE
1X1BAUDRATEENERATOR
XX0OFF
定时器2由两个8位寄存器TH2和TL2组成,在定时器工作方式中,每个机器周期TL2寄存器的值加1,由于一个机器周期由12个振荡时钟构成,因此,计数速率为振荡频率的1/12。
在计数工作方式时,当T2引脚上外部输入信号产生由1至0下降沿时,寄存器的值加1,在这种方式下,每个机器周期的5SP2期间寄存器加1。
由于识别1至0的跳变需要2个机器周期,因此,最高计数速率为振荡的1/24。
为确保采样的正确性,要求输入的电平在此变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。
图AT89C52框图
3.2.4、SRAM的功能及其实现
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。
3.3、基本单片机系统大容量数据存储器系统扩展
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
第四节系统的软件设计
系统主程序设计
如用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+pag
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 容量 数据 存储器 扩展 解读