读写单片机扩展外部RAM时的问题

Dreamer_LX灵 2012-02-22 11:20:27
我用的扩展芯片是IS62C256AL-45UI(32K*8),电路连接方法和常规的一样,用的是74HC573。

void Externram_Initl()//初始化
{
C_S = 0;
WR = 1;
RD = 1;
P0 = 0xFF;
P2 = 0xFF;
}

遇到的问题是按照下面的方法读写数据正常:
addre_ram=0x1000
exram = XBYTE[addre_ram];
addre_ram++; //这是读

XBYTE[addre_ram] = ram_data;
addre_ram++; //这是写

但是我按照时序这样写却有问题,数据不完整,基本不正确
addre_ram=0x1000
RD = 0;
exram = XBYTE[addre_ram];
RD = 1;
addre_ram++; //这是读

RW = 0;
XBYTE[addre_ram] = ram_data;
RW = 1;
addre_ram++; //这是写
请问这是什么问题,有谁遇到同样的问题吗?求解?


...全文
380 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dceacho 2012-03-08
  • 打赏
  • 举报
回复
那个RAM时序图是给没有硬件总线的同学用的,方便他们用IO模拟
天冰天降 2012-03-08
  • 打赏
  • 举报
回复
楼主仔细看看movx指令的时序就明白了
lbing7 2012-03-02
  • 打赏
  • 举报
回复
编译后,在芯片自己执行MOVX指令的时候,如果外扩的电路没有问题,对应的时间是单片机自己执行的

用户无需参与
Dreamer_LX灵 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xidianhunhun 的回复:]
你操作RD 和RW扰乱了本来的时序了.
在读外部RAM的时候,MCU会自动加入RW 和RW时序.

exram = XBYTE[addre_ram];
这一步的操作,MCU先向地址线输出地址,然后RD自动出上升沿信号,数据自动读入.
你修改后的代码,先RD=0,这样由于51单片机的RD脚是内部上拉,那么RD就会保持为低电平,
对于读时序来说,没有上升沿信号,所以无法读数据.
下面的……
[/Quote]

会自动加? 这个还真不知道,那外部RAM芯片的时序图不就没用啦。。。
AthlonXP1800plus 2012-03-01
  • 打赏
  • 举报
回复
是硬件自动加上去的,不用你自己操心的.
AthlonXP1800plus 2012-02-29
  • 打赏
  • 举报
回复
你操作RD 和RW扰乱了本来的时序了.
在读外部RAM的时候,MCU会自动加入RW 和RW时序.

exram = XBYTE[addre_ram];
这一步的操作,MCU先向地址线输出地址,然后RD自动出上升沿信号,数据自动读入.
你修改后的代码,先RD=0,这样由于51单片机的RD脚是内部上拉,那么RD就会保持为低电平,
对于读时序来说,没有上升沿信号,所以无法读数据.
下面的写数据同样问题.
单片机应用技术考试试题(五) (本试题分笔试题和操作题两部分。共100分,考试间120分钟。) 第一部分 笔试题 (本部分共有4大题,总分60分,考试间60分钟,闭卷) 一、填空题(每空1分,共20分) 1、8031单片机一般使用的钟晶振频是( )、( )。 2、假定(SP)=40H,(39H)=30H,(40H)=60H。执行下列指令: POP DPH ,POP DPL后,DPTR的内容为( ),SP的内容是( )。 3、单片机的堆栈栈顶由( )来指示,复位起位置在( )单元。 4、当P1口做输入口输入数据,必须先向该端口的锁存器写入( ),否则输入数据可能出错。 5、单片机内部数据传送指令( )用于单片机内部RAM单元及寄存器之间,单片机外部数据传送指令( )用于单片机内部与外部RAM或I/O接口之间,( )指令用于单片机内部与外部ROM之间的查表 6、单片机内外中断源按优先级别分为高级中断和低级中断,级别的高低是由( )寄存器的置位状态决定的。同一级别中断源的优先顺序是由( )决定的。 7、LED数码显示按显示过程分为( )显示和( )显示2种。前者,对每位显示来说是连续显示的,可通过单片机串行口实现;当多位显示需较多外部驱动芯片,功耗较大。后者,对每位显示来说是断续显示需占用单片机的( )接口资源。 8、在调用子程序,为保证程序调用和返回不致混乱,常采用保护现场的措施。通常在进入子程序后要用( )指令保护现场DPH、DPL、ACC等。在退出子程序之前要用POP指令依次恢复现场,用( )指令返回。 9、用仿真开发系统调试程序,汇编成功只说明源程序的( )没有问题,而程序( )还要靠运行调试纠错才能成功。 10、单片机串行通信,若要发送数据,就必须将要发送的数据送至( )单元,若要接收数据也要到该单元取数。 二、判断题(每题1分,共10分) 1、PC是( )。 A、一根硬件信号 B、一个可由用户直接读写RAM单元 C、一个不可寻址的特殊功能寄存器 D.一个能自动加1计数的ROM 2、51单片机执行MOVC指令,相关的信号状态是( )。 A、 有效为低电平, 有效为低电平。B、 无效为高电平, 有效为低电平。 C、 有效为低电平, 无效为高电平。 D、 有效为高电平, 无效为高电平。 3、判断是否溢出用PSW的( B )标志位,判断是否有进位用PSW的( A )标志位。 A、CY B、OV C、P D、AC 4、当单片机从8155接口芯片内部RAM的20H单元中读取某一数据,应使用(D )类指令。 A、 MOV A,20H B、MOVX A,@Ri C、 MOVC A,@A+DPTR D、MOVX A,@DPTR 5、下列关于MCS-51单片机的复位方式说法正确的是( )。 A、复位将PC和SP清零,使得单片机从0000H单元开始执行程序。 B、复位可以使系统脱离死锁状态,并且是退出掉电方式的唯一方法。 C、复位会改变内部的一些专用寄存器和用户RAM中的数据。 D、复位会将 设置为高电平, 为低电平。 6、下列指令不是变址寻址方式的是( )。 A、JMP @A+DPTR B、MOVC A,@A+PC C、MOVX A,@DPTR D、MOVC A,@A+DPTR 7、DA指令是BCD码运算调整指令,它可用在如下( )指令中;它的功能是( )。 A、ADD B、SUBB C、MUL D、DIV E、把二进制数调整为十进制数。 F、把二进制进位调整 8、在运用仿真系统调试程序,当要观察子程序内部指令的执行结果,通常采用( )调试方法。 A、单步调试 B、跟踪调试 C、断点调试 D、连续运行调试 9、在片外扩展已骗8K的EPROM 2764 需要( )根地址线。 A、11 B、12 C、13、 D、14 10.启动ADC0809进行A/D转换,使用( )指令。 A、MOVX @DPTR,A B、MOVX A,@DPTR C、MOV A, R0 D MOVC A,@A+DPTR 三、简述题(每题4分,共16分) 1、简述复位的用途,复位的方法。 2、将累加器A中低4位的状态通过P1口的高4位输出。 3、若规定外部中断1边沿触发方式,高优先级,写出初始化程序 4、请判断下列各条指令的书写格式是否有错,如有错请改正。 1)MUL R0R1 2)MOV A,@R7 3)MOV A,#3000H 4)MOVC @A+DPTR, A 5)LJMP 1000H 四、综合题(共14分) 已给出器件如图,试连线,构成一个片外扩展16KB RAM的电路,请确定每片存储器芯片的地址范围。 第二部分 操作题 (本部分共有1大题,总分40分,考试间60分钟) 题目要求:下面是一个LED的闪烁程序,请阅读该程序,完成以下问题. ORG 0000H MOV P1,#0FFH MOV A,#0FEH SHIFT:LCALL FLASH RL A SJMP SHIFT FLASH:MOV R2,#0AH FLASH1:MOV P1,A LCALL YS0 MOV P1,#0FFH LCALL YS0 DJNZ R2,FLASH1 RET YS0:MOV R6,#0A0H YS1:MOV R7,#0FFH YS2:DJNZ R7,YS2 DJNZ R6,YS1 RET END 1、在实验箱上连接出亮灯电路。 2、修改并调试上面电路,要求通电后,每个LED循环亮0.5s,按键后,每个LED闪烁10次又回到原来状态。注:按键模拟中断请求。 单片机应用技术试题参考答案及评分标准(五) 第一部分 笔试题 (本部分共4道题,总分60分,考试间60分钟) 一、填空题(每空1分,共20分) 1、6MHZ 、12MHZ。 2、6030H,38H。 3、SP ,07H 。 4、FFH 5、MOV ,MOVX,MOVC。 6、中断优先级寄存器,自然优先级顺序。 7、静态、动态,并行。 8、PUSH , RETI。 9、指令语法,行逻辑正确 10、SBUF。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧