Em có đoạn code ghi đọc dữ liệu eeprom như sau:
void ghi(unsigned int uiAddress, unsigned char ucData)
{
/* Cho viev hoan thanh ghi truoc */
while(EECR & (1<<EEWE))
;
/* DAT DIA CHI VA DU LIEU DANG KY */
EEAR = uiAddress;
EEDR = ucData;
/* GHI TUNG BIT VAO EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}
//=================DOC TU BO NHO================
unsigned char doc(unsigned int uiAddress)
{
/* Cho viev hoan thanh ghi truoc */
while(EECR & (1<<EEWE))
;
/* DAT DIA CHI VA DU LIEU DANG KY */
EEAR = uiAddress;
/* BAT DAU DOC TU EERE */
EECR |= (1<<EERE);
/* TRA VE DU LIEU DA DUOC DANG KY */
return EEDR;
}
Khi em ghi dữ liệu có giá trị x<256 và đọc nó ra thì kết quả trả về đúng giá trị x ban đầu lưu. Nhưng khi em ghi giá trị x>256 thì kết quả trả về = x-256*n. Em muốn hỏi làm thế nào để em lấy ra được đúng giá trị x ban đầu lưu vào. Em mới tìm hiểu về avr, mong mọi người giúp đỡ ạ!
void ghi(unsigned int uiAddress, unsigned char ucData)
{
/* Cho viev hoan thanh ghi truoc */
while(EECR & (1<<EEWE))
;
/* DAT DIA CHI VA DU LIEU DANG KY */
EEAR = uiAddress;
EEDR = ucData;
/* GHI TUNG BIT VAO EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
}
//=================DOC TU BO NHO================
unsigned char doc(unsigned int uiAddress)
{
/* Cho viev hoan thanh ghi truoc */
while(EECR & (1<<EEWE))
;
/* DAT DIA CHI VA DU LIEU DANG KY */
EEAR = uiAddress;
/* BAT DAU DOC TU EERE */
EECR |= (1<<EERE);
/* TRA VE DU LIEU DA DUOC DANG KY */
return EEDR;
}
Khi em ghi dữ liệu có giá trị x<256 và đọc nó ra thì kết quả trả về đúng giá trị x ban đầu lưu. Nhưng khi em ghi giá trị x>256 thì kết quả trả về = x-256*n. Em muốn hỏi làm thế nào để em lấy ra được đúng giá trị x ban đầu lưu vào. Em mới tìm hiểu về avr, mong mọi người giúp đỡ ạ!
Comment