初学者,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);
}
小弟不才,或者是程序哪块写错了,麻烦高手指点一下,拜谢~~ 发表这么久了,怎么就没人解答一下呢。。。 你用的是SRAM是什么型号啊? 怎么不用atmega128自带的总线
页:
[1]