ersha4877 发表于 2013-3-14 22:11:33

各位帮忙看看ATMEGA128 读写HM628128里数据的程序

程序如下,主要的问题是这样的,无法分开读取高64K 的数据或低64K的数据,发现,即使把最高位A16的地址线高电平,也和A16的地址线低电平的时候数据一样,还有一个问题要写入 4个数据,读前三个是正确的,读第四个都是 0 ,高位低位数据都一样的
假如低位 写入 00 11 22 33
       高位 写入 AA BB CC DD   读到的数据都是 AA BB CC 00 ,高位低位都一样,
希望给点帮助,谢谢
使用了 两片 74HC373 作为高8位低8位地址锁存
//*************************************************************
void ram_init_out(void)//对读取的RAM控制管脚初始化
{

storage_hc373_high_cli();
ouput_hc244_set();
ouput_hc373_cli();
storage_hc373_low_cli();

}
//**************************************************************
void sram_output_init(void)
{

init_output_ddr();
ram_init_out();//对读取的RAM控制管脚初始化 244 373h 372l
storage_p_cs_set();
storage_p_rd_set();
storage_p_wr_set();

}
//*************************************************************
void sram_input_init(void)
{
init_input_ddr();
ram_init_out();//对读取的RAM控制管脚初始化 244 373h 372l

storage_p_cs_set();
storage_p_rd_set();
storage_p_wr_set();

}
//**************************************************************
ucharread_storage_data_low(uchar addh,uchar addl)//地址高,地址低,低64K标志位
{
uchar read_data;

sram_output_init();   //端口初始化
// storage_a16_cli();    //低64K数据位
// asm("nop");asm("nop");
ram_low_out_cli();
asm("nop");asm("nop");
PORTA=addl;
asm("nop");asm("nop");
ram_low_out_set();//地址低位373锁存输出
asm("nop");asm("nop");
ram_low_out_cli();
asm("nop");asm("nop");
PORTA=addh;         //输出地址高
asm("nop");asm("nop");
ram_high_out_set();//地址高位373锁存输出
asm("nop");asm("nop");
ram_high_out_cli();
asm("nop");asm("nop");

//-------------------------------
init_input_ddr();          //端口配置为输入
asm("nop");asm("nop");
storage_p_cs_cli();
asm("nop");asm("nop");
storage_p_rd_cli();
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
read_data=PINA;
storage_p_rd_set();
storage_p_cs_set();

return read_data;
//-------------------------------
}
//**************************************************************
voidwrite_storage_data_low(uchar addh,uchar addl,uchar write_data)//地址高,地址低, 低64K标志位
{
sram_output_init();//端口初始化

ram_low_out_cli();         
asm("nop");asm("nop");
PORTA=addl;
asm("nop");asm("nop");
ram_low_out_set();//地址低位373锁存输出
asm("nop");asm("nop");
ram_low_out_cli();
asm("nop");asm("nop");
PORTA=addh;               //输出地址高
asm("nop");asm("nop");
ram_high_out_set();//地址高位373锁存输出
asm("nop");asm("nop");
ram_high_out_cli();
asm("nop");asm("nop");

//-------------------------------
    PORTA=write_data;
asm("nop");asm("nop");
storage_p_cs_cli();
asm("nop");asm("nop");
    storage_p_wr_cli();
    asm("nop");asm("nop");

    storage_p_wr_set();
    storage_p_cs_set();
    asm("nop");asm("nop");

   
//--------------------------------
}
//**************************************************************
ucharread_storage_data_high(uchar addh,uchar addl)//地址高,地址低,低64K标志位
{
uchar read_data;

sram_output_init();   //端口初始化
//storage_a16_set();    //低64K数据位
//asm("nop");asm("nop");
ram_low_out_cli();
asm("nop");asm("nop");
PORTA=addl;
asm("nop");asm("nop");
ram_low_out_set();//地址低位373锁存输出
asm("nop");asm("nop");
ram_low_out_cli();
asm("nop");asm("nop");
PORTA=addh;         //输出地址高
asm("nop");asm("nop");
ram_high_out_set();//地址高位373锁存输出
asm("nop");asm("nop");
ram_high_out_cli();
asm("nop");asm("nop");

//-------------------------------
init_input_ddr();          //端口配置为输入
asm("nop");asm("nop");
storage_p_cs_cli();
asm("nop");asm("nop");
storage_p_rd_cli();
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
read_data=PINA;
storage_p_rd_set();
storage_p_cs_set();

return read_data;
//-------------------------------
}
//**************************************************************
voidwrite_storage_data_high(uchar addh,uchar addl,uchar write_data)//地址高,地址低, 低64K标志位
{
sram_output_init();//端口初始化

ram_low_out_cli();         
asm("nop");asm("nop");
PORTA=addl;
asm("nop");asm("nop");
ram_low_out_set();   //地址低位373锁存输出
asm("nop");asm("nop");
ram_low_out_cli();   
asm("nop");asm("nop");
PORTA=addh;               //输出地址高
asm("nop");asm("nop");
ram_high_out_set();   //地址高位373锁存输出
asm("nop");asm("nop");
ram_high_out_cli();
asm("nop");asm("nop");

//-------------------------------
    PORTA=write_data;
   asm("nop");asm("nop");
storage_p_cs_cli();
asm("nop");asm("nop");
    storage_p_wr_cli();
    asm("nop");asm("nop");

    storage_p_wr_set();
    storage_p_cs_set();
    asm("nop");asm("nop");

   
//--------------------------------
}

//**************************************************************
void read_storage_total_dada(void)//读取内存中总数量
{
uchar aa;
storage_a16_cli();    //低64K数据位
asm("nop");asm("nop");
write_storage_data_low(0x00,0x00,0x01);//地址高,地址低,低64K标志位
write_storage_data_low(0x00,0x01,0x23);//地址高,地址低, 低64K标志位
write_storage_data_low(0x00,0x02,0x45);//地址高,地址低, 低64K标志位
write_storage_data_low(0x00,0x03,0x67);//地址高,地址低, 低64K标志位
asm("nop");asm("nop");
storage_a16_set();    //低64K数据位
asm("nop");asm("nop");
write_storage_data_high(0x00,0x00,0xaa);//地址高,地址低,高64K
write_storage_data_high(0x00,0x01,0xbb);//地址高,地址低,高64K
write_storage_data_high(0x00,0x02,0xcc);//地址高,地址低,高64K
write_storage_data_high(0x00,0x03,0xdd);//地址高,地址低,高64K

storage_a16_cli();    //低64K数据位

asm("nop");asm("nop");
aa=read_storage_data_low(0x00,0x00);//地址高,地址低, 低64K标志位
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);
aa=read_storage_data_low(0x00,0x01);//地址高,地址低, 低64K标志位
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);
aa=read_storage_data_low(0x00,0x02);//地址高,地址低, 低64K标志位
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);
aa=read_storage_data_low(0x00,0x03);//地址高,地址低, 低64K标志位
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);

storage_a16_set();    //高64K数据位
asm("nop");asm("nop");
aa=read_storage_data_high(0x00,0x00);//地址高,地址低,高64K
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);
aa=read_storage_data_high(0x00,0x01);//地址高,地址低,高64K
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);
aa=read_storage_data_high(0x00,0x02);//地址高,地址低,高64K
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);
aa=read_storage_data_high(0x00,0x03);//地址高,地址低,高64K
UDR0=aa;
while(!(UCSR0A&(1<<UDRE0))){;}
_delay_us(1);


}
//**************************************************************

ersha4877 发表于 2013-3-15 22:10:30

顶下,望有人给个回复,谢谢
页: [1]
查看完整版本: 各位帮忙看看ATMEGA128 读写HM628128里数据的程序