本帖最后由 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。第一个读取的却是最后一个写入的,求解 |