我已經使用以下代碼,用於訪問EEPROM:數據沒有得到存儲在EEPROM中
void EEPROM_write(unsigned int uiAddress,unsigned char ucData)
{
while(EECR & (1<<EEWE))
{
//do nothing
}
while(SPMCR & (1<<SPMEN));
EEAR = uiAddress;
EEDR = ucData;
EECR |= (1<<EEMWE);
EECR |= (1<<EEWE);
}
char EEPROM_read(unsigned int uiAddress)
{
while(EECR & (1<<EEWE))
{
//do nothing
}
EEAR = uiAddress;
EECR |=(1<<EERE);
return EEDR;
}
void EEPROM_write_str(unsigned int uiAddress,unsigned char* string,unsigned int size)
{
int i;
for(i=0;i<size;i++)
{
EEPROM_write(uiAddress+i,string[i]);
}
}
void EEPROM_read_str(unsigned int uiAddress,unsigned char* string,unsigned int size)
{
int i;
for(i=0;i<size;i++)
{
string[i] = EEPROM_read(uiAddress+i);
}
}
char str[]="hello ";
char str2[20];
int main()
{
usart_init(12);
//EEPROM_write_str(0,str,6);
EEPROM_read_str(0,str2,6);
usart_puts(str2,6);
}
在上面的代碼中,我第一評論的EEPROM_read_str和usart_puts,...閃蒸它然後評論的EEPROM_write_str功能和刪除了另外兩個人的評論,然後再次閃現。儘管如此,數據並未被存儲,並且終端中顯示的輸出爲yyyyy(十六進制FF)。 這裏有什麼問題? (這裏USART_puts以第二個參數作爲字符數發送字符串)
在地址0有eeprom嗎?在寫入之前在哪裏擦除eeprom? – Lundin
@Lundin它是在地址爲0到1023的EEPROM我猜 – user102958
@Lundin AVR-s是Hardvare架構,所有存儲器都有獨立的地址空間。 AVR可以在寫入期間選擇它。單元格被擦除並一次寫入。它被atmel稱爲「原子eeprom寫」 –