реклама на сайте
подробности

 
 
> Нужна помощь с eeprom.h
CheGuevaravlc
сообщение Mar 25 2010, 18:24
Сообщение #1





Группа: Участник
Сообщений: 4
Регистрация: 25-03-10
Пользователь №: 56 211



Всем здравствуйте.

Нужна помощь в следующем вопросе:

Начинаю программировать в WinAVR для Atmega8515.

Имеется простейшая программа:

CODE
typedef struct {
char pass[8];
} password;

#define _NUM_OF_PASS (10)
#define _PASS_START (_NUM_OF_PASS + sizeof(char))

char numberOfPass = 0;
char numberOfChar = 0;

ISR(SIG_UART_RECV) //По прерыванию получаю по байту.
{
char temp;
temp = UDR;
//newpas.pass[numberOfChar] = temp;

//UDR = numberOfChar;
numberOfChar++; //Накапливаю счетчик
}

int main()
{
USART_init();
SREG |= (1 << 7);

while(1)
{
if (numberOfChar == 8) // Когда набрал 8 байт
{
numberOfChar = 0; //Обнуляю
numberOfPass++; // Накапливаю другой счетчик

eeprom_write_block( &numberOfPass, _NUM_OF_PASS, sizeof(char));//Записываю его в память

char numTemp;
eeprom_busy_wait();
eeprom_read_block((void*)&numTemp, (const void*)_NUM_OF_PASS, sizeof(char));//Читаю его же обратно,
//для провеки
UDR = numberOfPass; //И посылаю на комп второй счетчик
_delay_ms(500);
}
}
}

void USART_init()
{
UCSRA = 0;
UCSRB |= (1 << 7) | (1 << 4) | (1 << 3);
//UCSRB |= (1 << 4) | (1 << 3);
UCSRC |= (1 << 7);
UCSRC |= (1 << 1) | (1 << 2);
UCSRC -= 128;
UBRRH = 0;
UBRRL = 47;
}




Получаю:
1234567, на восьмой раз не плучаю ничего, потом опять 01234 и т.д.

Если закомментить строку
eeprom_read_block((void*)&numTemp, (const void*)_NUM_OF_PASS, sizeof(char));

то все нормально.

Объясните пожалуйста, где я [CENSORED]?

Сообщение отредактировал IgorKossak - Mar 25 2010, 18:50
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.0135 секунд с 7
ELECTRONIX ©2004-2016