您当前的位置:五五电子网电子知识单片机-工控设备综合-其它C8051与SRAM的高速接口 正文
C8051与SRAM的高速接口

C8051与SRAM的高速接口

点击数:7270 次   录入时间:03-04 11:48:07   整理:http://www.55dianzi.com   综合-其它

C8051系列单片机没有与标准的51单片机那样的数据总线(RD、WR、ALE)等,只能采用通用I/O口模拟总线方式访问外部存储器。因此,C8051访问一次外部存储器需要几十条指令。即便这样,由于C8051的绝大多数指令的执行只需一个机器(振荡)周期,在同样的时钟下与标准的51单片机相当。例如,20MHz的时钟下,在文献[2]给出的SRAM接口方式中,C8051读或写1个字节需要1.7μs,这就是说可以达到的最大传输率为588KB/s。相比之下,标准51读或写1个字节需要1.2μs。为了充分发挥C8051的能力,本文介绍两种提高访问外部SRAM速度的接口方法。

1 扩展外部SRAM的高速接口电路之一

图1所示电路可提高访问外部SRAM的速度。该电路充分利用C8051系列口线多的优势,避免采用端口复用的费时方法。采用该接口电路的读和写周期的时序波形分别修改为如图2和图3所示。为节省篇幅,这里略去初始化部分(初始化数字交叉开关和设置端口)的程序,直接给出读、写程序。

SRAM_Read:

MOV P2,DPH ;输出外部地址A15..A8

MOV P3,DPL ;输出外部地址A7..A0

ANL P1,#0b7h ;选择SRAM,发出读选通

MOV A,P0 ;读数据

ORL P1,#48h ;使读选通和SRAM片选无效

RET

同样,完成写1个字节到外部SRAM的操作共需15字节、19个周期,需要0.95μs(包括执行RET指令的0.25μs)。

2 扩展外部SRAM的高速接口电路之二

图4给出了C8051扩展外部SRAM的接口电路,图5和图6分别给出了C8051访问(读或写)外部存储器的时序图。

由图4可以看出,此外部扩展RAM的高速接口电路的改进为:①高、低位地址都由P2口提供,而不是由P3口分时复用地提供低位地址和数据(总线)。这样,可以节省每次读写都要改变P3口的设置而消耗的时间。②尽可能地把控制信号同步给出,特别是在读外部数据存储器时,同时给出CS、ALE和WR信号,可以节省1~2个指令周期的时间。

为方便起见,下面根据图4的接口电路,给出常量和声明:

DATA1 EQU P3 ;数据端口引脚(AD7..0)

DATACF EQU PRT3CF ;端口配置寄存器对数据

ADDR EQU P2 ;地址端口引脚(A15..8)

ADDRCF EQU PRT2CF ;端口配置寄存器对地址

A16 EQU P1.5 ;最高地址位(地址块选择)

RD EQU P1.4 ;读选通(低电平有效)

WR EQU P1.3 ;写选通(低电平有效)

ALE EQU P1.2 ;地址锁存信号(低电平有效)

CS EQU P1.1 ;SRAM片选信号(低电平有效)

下面为主程序中与访问外部SRAM有关的部分(初始化数字交叉开关和端口、数据指针等):

ORG 0B3H

;禁止看门狗定时器,中断尚未被允许。如果中

;断被允许,应用确禁止中断,以保证下面的两

;条指令能在4个时钟周期内执行完

Main:

MOV WDTCN,#0DEH

MOV WDTCN,#0ADH

;设置交叉开关

MOV XBR2,#40h ;弱上拉允许交叉开关

LCALL SRAM_Init ;初始化SRAM

MOV R0,#0ffh

MOV DPH,#00h ;初始化16位地址

MOV DPL,#00h

MOV A,R0 ;装写入值

.

.

.

下面的子程序初始化SRAM接口逻辑,必须在任何SRAM_Read或SRAM_Write操作之前调用一次,该程序可作为复位操作的一部分。该程序假定交叉开关已经被允许(XBR2.6=“1”)。

“读”初始化SRAM接口逻辑子程序:

SRAM_Read_Init:

MOV DRATACF,#00h

;允许端口3(DATA)作为输入总线

    MOV DATA1,#0ffh

MOV ADDRCF,#0ffh ;允许端口2(ADDR)作为输出

MOV ADDR,#0ffh ;驱动为高电平($ff)

ORL PRT1CF,#00111110b ;允许P1.7..3作为输出

ANL P1,#11011011b

;A16=ALE=“0”,选择存储块1

ORL P1,#00011010b ;RD,WR,CS=“1”

RET

“写”初始化SRAM接口逻辑子程序:

SRAM_Write_Init:

MOV DATACF,#0FFh

;允许端口3(DATA)作为输出总线

MOV DATA1,#0ffh ;驱动为高电平($ff)

MOV ADDRCF,#0ffh ;允许端口2(ADDR)作为输出

MOV ADDR,#0ffh ;驱动为高电平($ff)

ORL PRT1CF,#00111110b ;允许P1.7..3作为输出ANL P1,#11011011b

;A16=ALE=“0”,选择存储块1

ORL P1,#00011010b ;RD,WR,CS=“1”

RET

相应地从外部SRAM读1个字节的数据的程序(SRAM_Read)为:

;该程序从DPTR指向的地址读取数据存到ACC。此处未处;

理存储块选择(操作A16);

SRAM_Read:

MOV ADDR,DPL ;输出外部地址A7..A0

SETB ALE ;锁存该地址

ANL P1,#0C7h ;选择SRAM,发出读选通、ALE=0

MOV ADDR,DPH :输出外部地址A15..A8

MOV A,DATA1

;读数据(注对于这片SRAM读操作建立时间为

;45ns,在SYSCLK=20MHz时,该指令需2个时;

;钟周期,或50ns×2=100ns

ORL P1,#48h ;使读选通和SRAM片选无效

RET

完成从外部SRAM读1个字节的操作共需17字节、21个周期,即每从外部SRAM中读1个字节需要1.05μs(包括执行RET指令的0.25μs)。

同样,写1个字节的数据到外部SRAM的程序

(SRAM_Write)为:

;该程序将ACC中的字节写到DPTR指向地址的外部

;SRAM单元,此处未处理存储块选择

SRAM_Write:

MOV ADDR,DPL ;输出外部地址A7..A0

SETB ALE ;锁存该地址

CLR ALE

MOV ADDR,DPL ;输出外部地址A15..A8

MOV DATA1,a ;将数据送到数据总线

ANL P1,#0d7h ;选择外部SRAM和启动写操作

ORL P1,#028h ;写选通无效和SRAM片选无效

[1] [2]  下一页


本文关键字:接口  综合-其它单片机-工控设备 - 综合-其它