打印
[AVR单片机]

SRAM KM6264写入和读出问题

[复制链接]
1305|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shandi|  楼主 | 2014-8-22 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 shandi 于 2014-8-22 10:10 编辑

16MHz,PORTA D0-D7,PORTC A0-A7, PORTE8-4 A12-A8。CS2高电平,下面是代码:
/*******************************************************************************
* 函数名称: RAM_READ
* 入口参数: 地址 addr
* 出口参数: i
* 功能描述: CS2=1;读取RAM。
*******************************************************************************/
uchar RAM_READ (uint addr)
{
  uchar i; //读取的PORTA变量
  PORTE=((addr/256)<<3);
  PORTC=(addr%256);
  PORTB&=~BIT(3);//RAM_CS1=0
  PORTB&=~BIT(2);//RAM_OE=0
  i=PINA; //读取数据
  PORTB|=BIT(2);//RAM_OE=1
  PORTB|=BIT(3);//RAM_CS1=1
  return i;
}
/*******************************************************************************
* 函数名称: RAM_WRITE
* 入口参数: 地址 addr1 数据j
* 出口参数:
* 功能描述: CS2=1;写入RAM。
*******************************************************************************/
void RAM_WRITE (uint addr1,uchar j)
{
  PORTE=((addr1/256)<<3);  //portE8-4  A12-A8  
  PORTC=(addr1%256);       //A0-A7
  PORTA=j;
  PORTB&=~BIT(3);          //RAM_cs1=0
  PORTB|=BIT(4);                   //RAM_we=0
  _NOP();                                 
  PORTB&=~BIT(4);               //RAM_we=1
}
main()
{
          PORTB|=BIT(2);//RAM_OE=1;
          DDRA=0XFF;    //D0~D7输出
          DDRC=0XFF;    //A0~A7输出
          DDRE|=0XF8;   //A8~A12输出
          for(n=0;n<100;n++)
             RAM_WRITE ( n, n);
          //read
          PORTB&=~BIT(4); //RAM_WE=1
                  DDRA=0X00;
                  PORTA=0X00;     //PORTA设置为无上拉高阻态输入D0-D7  
          for(m=0;m<100;m++)
             uart1_sendB(RAM_READ(m));//将读取RAM数据到串口发送
}现在情况是写入0-98, 99。返回的是99, 0-98。第一个读取的却是最后一个写入的,求解

相关帖子

沙发
shandi|  楼主 | 2014-8-22 10:20 | 只看该作者
上传一下手册,主要看下读和写的时序

KM6264BLG-7-datasheet.pdf

152.88 KB

使用特权

评论回复
板凳
shandi|  楼主 | 2014-8-22 15:05 | 只看该作者
程序比较简单,应该是写入最后一个数据时,保存在了数据总线上,读取的时候就被第一个读取了,是这样理解吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

28

帖子

0

粉丝