新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > AVR单片机Atmega128外扩RAM

AVR单片机Atmega128外扩RAM

作者:时间:2013-12-12来源:网络收藏

void writeram(unsigned int iaddr, unsigned char ctemp)
{
//unsigned char caddl,caddh;
unsigned char cdatatemp=0;
RDH;
WRH;
ALEH;
DDRA = 0xFF;
DDRC = 0xFF;
PORTC=iaddr>>8;
PORTA=(unsigned char)iaddr;
ALEL;//锁存A0-A7
WRL;
PORTA=ctemp;
asm("nop;");
WRH;
ALEH;
return;
}

#endif

#define RAMSTARTADDR 0X1100
#define RAMENDADDR 0X90FF
#define RAMLEN 32768
// 测试32KRAM 用的是UT62256和74HC573

int main(void)
{
unsigned int k=0;
unsigned int i=0,j=0;
unsigned char DATA,u;

init_devices();

MCUCR = 0x80; // 允许外部并行扩展接口
XMCRA = 0x00; //0x00 external memory

XMCRB = 0x01; // 释放PC7,作为通用I/O引脚使用
DDRC = 0xff; // PC7,PC6用于输出,(不影响PC0-PC6地址线)
PORTC = 0x00; // PC7,PC6输出0,(不影响PC0-PC6地址线)
//由于是32KB所以PC7用作62256片选使能,可以释放P7为普通IO使用,输出低电平使能62256
sendstring1("init system ok!");
sendstring1("now test system-ram all is 32k !");

sendstring1("----now write ram");
_delay_ms(1300);
#if 1
for(i=0;i32768;i++)
{
if(i%2)
*(p+i)=(unsigned char)(p+i);
else
*(p+i)=0xff;
_delay_us(10);
}
// #else
sendstring1("----write ok");
sendstring1("----now check write");
sendstring1("----now read ram");
for(i=0;i32768;i++)
{
DATA = *(p+i);
sendstring1("addr=");
sendinthex1((unsigned int)(p+i));
sendstring1("=");
sendinthex1(DATA);
sendstring1("");
}
#endif
sendstring1("---- test system-ram end!");
}


上一页 1 2 3 4 下一页

关键词: AVR单片机 Atmega128 外扩RAM

评论


相关推荐

技术专区

关闭