zhuilovelyan 发表于 2011-8-31 19:07:38

初学者,ATMEGA128外扩32K SRAM问题,请教各位大侠,敬请解答一下,不甚感激!

我用ATMEGA128外扩了一片32K SRAM,在进行读写操作的时候遇到了问题,麻烦大家指点一下,谢谢!
我往地址0x1100写一个0xAA的时候,为什么用AVR Studio仿真的时候在0x1100处读不回来数呢,是不是没写进去啊,或者是软件要在哪设置一下
编译环境:ICCAVR6.31
仿真环境:AVR Studio4
程序如下:
#include <iom128v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
//PG0:WR
#define WR_HIGH() PORTG|=BIT(0)
#define WR_LOW()PORTG&=~BIT(0)
//PG1:RD
#define RD_HIGH() PORTG|=BIT(1)
#define RD_LOW()PORTG&=~BIT(1)
//PG2:ALE
#define ALE_HIGH() PORTG|=BIT(2)
#define ALE_LOW()PORTG&=~BIT(2)
void delay_1ms(void)
{
       uint i;
       for(i=0;i<1141;i++);
}
void PORT_INIT()
{
       DDRG|=BIT(0)|BIT(1)|BIT(2);//PG0,1,2输出
       DDRC=0xFF;//PC0-7输出
       MCUCR=0xC0;//外部SRAM使能
       XMCRA=0x00;
       XMCRB=0x01;//释放PC7口
       PORTC|=BIT(7);//SRAM片选(有反相器)
}
void sram_write(uint addr,uchar dat)//SRAM写
{
       RD_HIGH();
       WR_HIGH();
       ALE_HIGH();
       DDRA=0xFF;
       DDRC=0xFF;
       PORTC=(uchar)((addr>>8)|BIT(7));//取8位高位地址总线且保持SRAM片选为低
       PORTA=(uchar)addr;//取8位低位地址总线
       NOP();
       ALE_LOW();//锁存PA0-7
       WR_LOW();
       PORTA=dat;
       NOP();
       WR_HIGH();
       ALE_HIGH();
}
uchar sram_read(uint addr)//SRAM读
{
       uchar dat;
       RD_HIGH();
       WR_HIGH();
       ALE_HIGH();
       DDRA=0xFF;
       DDRC=0xFF;
       PORTC=(uchar)((addr>>8)|BIT(7));//取8位高位地址总线且保持SRAM片选为低
       PORTA=(uchar)addr;//取8位低位地址总线
       NOP();
       ALE_LOW();
       DDRA=0x00;
       RD_LOW();
       NOP();
       dat=PINA;
       NOP();
       RD_HIGH();
       ALE_HIGH();
       return dat;
}
void main()
{
       uchar read_data;
       PORT_INIT();
       sram_write(0x1100,0xAA);//写0xAA
       delay_1ms();
       read_data=sram_read(0x1100);//读0xAA
       delay_1ms();
       while(1);
}

小弟不才,或者是程序哪块写错了,麻烦高手指点一下,拜谢~~

zhuilovelyan 发表于 2011-9-4 08:24:04

发表这么久了,怎么就没人解答一下呢。。。

simpleh 发表于 2012-5-17 16:34:37

你用的是SRAM是什么型号啊?

saintjoan 发表于 2012-6-1 13:11:48

怎么不用atmega128自带的总线
页: [1]
查看完整版本: 初学者,ATMEGA128外扩32K SRAM问题,请教各位大侠,敬请解答一下,不甚感激!