| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Запись в EPROM AVR
25.01.2013, 13:40
|
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Запись в EPROM AVR
Доброго времени суток!
Обращаюсь к Обществу!
Помогите записать в прерывании UART по приему в EPROM
|
PHP код:
|
eeprom char basa_1[15]="+380675000850"; //Диспечерский Центр 1 (Д.Ц.1)
eeprom char basa_2[15]; //Диспечерский Центр 2 (Д.Ц.2)
eeprom char basa_3[15]; //Диспечерский Центр 3 (Д.Ц.3)
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
unsigned char data;
static unsigned char j=0, PROG_N1=0xFF, PROG_N2=0xFF, PROG_N3=0xFF, PROG_N=0x00, flag_84=0x00;
data=UDR0;
if(PROG_N1==0x00) //запись номера ДЦ1
{
if(j==0)
{
basa_1[0]= (0x20|(data››4));
basa_1[1]= (0x30|(data&0x0F));
j=1;
}
else
{
basa_1[j*2] = (0x30|(data››4));
basa_1[j*2+1]= (0x30|(data&0x0F));
j++;
}
if(j==7) { PROG_N1=0xFF; j=0x00; };
return;
};
if(PROG_N2==0x00) //запись номера ДЦ2
{
if(j==0x00)
{
basa_2[0]= (0x20|(data››4));
basa_2[1]= (0x30|(data&0x0F));
j++;
}
else
{
basa_2[j*2] = (0x30|(data››4));
basa_2[j*2+1]= (0x30|(data&0x0F));
j++;
}
if(j==7) { PROG_N2=0xFF; j=0x00; };
return;
};
if(PROG_N3==0x00) //запись номера ДЦ3
{
if(j==0x00)
{
basa_3[0]= (0x20|(data››4));
basa_3[1]= (0x30|(data&0x0F));
j++;
}
else
{
basa_3[j*2] = (0x30|(data››4));
basa_3[j*2+1]= (0x30|(data&0x0F));
j++;
}
if(j==7) { PROG_N3=0xFF; j=0x00; };
return;
};
if(data==0x84) { flag_84=0xFF; stop_timer_0_2(); };
if(data==0x78) { flag_84=0x00; start_timer_0_2(); };
if((data&flag_84)==0x70) PROG_N=0xFF;
switch (data&PROG_N)
{
case 0x04:
PROG_N1=0x00;
PROG_N=0x00;
break;
case 0x05:
PROG_N2=0x00;
PROG_N=0x00;
break;
case 0x06:
PROG_N3=0x00;
PROG_N=0x00;
break;
case 0x84:
putchar(0x04);
putchar((basa_1[0]‹‹4)|(basa_1[1]&0x0F));
putchar((basa_1[2]‹‹4)|(basa_1[3]&0x0F));
putchar((basa_1[4]‹‹4)|(basa_1[5]&0x0F));
putchar((basa_1[6]‹‹4)|(basa_1[7]&0x0F));
putchar((basa_1[8]‹‹4)|(basa_1[9]&0x0F));
putchar((basa_1[10]‹‹4)|(basa_1[11]&0x0F));
putchar((basa_1[12]‹‹4)|0x0F);
putchar(0xFF);
PROG_N=0x00;
break;
case 0x85:
putchar(0x05);
putchar((basa_2[0]‹‹4)|(basa_2[1]&0x0F));
putchar((basa_2[2]‹‹4)|(basa_2[3]&0x0F));
putchar((basa_2[4]‹‹4)|(basa_2[5]&0x0F));
putchar((basa_2[6]‹‹4)|(basa_2[7]&0x0F));
putchar((basa_2[8]‹‹4)|(basa_2[9]&0x0F));
putchar((basa_2[10]‹‹4)|(basa_2[11]&0x0F));
putchar((basa_2[12]‹‹4)|0x0F);
putchar(0xFF);
PROG_N=0x00;
break;
case 0x86:
putchar(0x06);
putchar((basa_3[0]‹‹4)|(basa_3[1]&0x0F));
putchar((basa_3[2]‹‹4)|(basa_3[3]&0x0F));
putchar((basa_3[4]‹‹4)|(basa_3[5]&0x0F));
putchar((basa_3[6]‹‹4)|(basa_3[7]&0x0F));
putchar((basa_3[8]‹‹4)|(basa_3[9]&0x0F));
putchar((basa_3[10]‹‹4)|(basa_3[11]&0x0F));
putchar((basa_3[12]‹‹4)|0x0F);
putchar(0xFF);
PROG_N=0x00;
break;
default: UDR0=data;
};
}
|
Подскажите что нибудь дельное
Последний раз редактировалось papa_n; 25.01.2013 в 13:43.
|
|
|
|
25.01.2013, 14:06
|
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
|
Re: Запись в EPROM AVR
IMHO, прерывание должно быть как тост - кратким и содержательным. Я бы не стал в прерывании писать в EEPROM да еще вызывать процедуры типа putchar, а принимал бы в какой-то буфер, по заполнении буфера выставлял флаг - а в рабочем цикле по этому флагу делай что угодно...
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
25.01.2013, 14:12
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Запись в EPROM AVR
Время записи в EPROM 5 mc, за это времени на скорости 9600 - придет почти 5 байт.
|
|
|
|
25.01.2013, 15:27
|
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Запись в EPROM AVR
Спасибо! Попробую
|
|
|
|
25.02.2014, 09:28
|
|
|
Прописка
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
|
Re: Запись в EPROM AVR
Ребята помогите записать в EEPROM два байта переменную int. Что то у меня не получается. С переменной char проблем нет. Компилятор CodeWizardAVR V2.03.9 Standard
|
|
|
|
25.02.2014, 09:58
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
|
Re: Запись в EPROM AVR
Первоисточник здесь http://radiokot.ru/forum/viewtopic.php?t=1360
|
Код:
|
// EEPROM Data Read Function - чтение байта из EEPROM по заданному адресу
unsigned int readEEPROM (unsigned int addr)
{
unsigned int data = 0;
while (EECR.1 != 0);
EEAR = addr;
EECR.0 = 1;
EECR.0 = 0;
data = EEDR;
return data;
}
// EEPROM Data Write Function - запись байта data в EEPROM по заданному адресу
void writeEEPROM (unsigned int addr, unsigned char data)
{
while (EECR.1 != 0);
EEAR = addr;
EEDR = data;
EECR.2 = 1;
EECR.1 = 1;
}
// EEPROM Data Copy Function - копирование данных из ячейки в ячейку
void copyEEPROM (unsigned int saddr, unsigned char taddr)
{
writeEEPROM (taddr, readEEPROM (saddr));
}
// EEPROM 2-byte Data Write Function - запись двухбайтового числа в 2 последовательные ячейки с адресом первой addr
void _2bwriteEEPROM (unsigned int addr, unsigned int data)
{
if ((data / 256) != readEEPROM (addr)) writeEEPROM (addr, (unsigned char)(data / 256));
writeEEPROM (addr + 1, (unsigned char)(data % 256));
}
// EEPROM 2-byte Data Read Function - чтение двухбайтового числа из 2 последовательных ячеек с адресом первой addr
unsigned int _2breadEEPROM (unsigned int addr)
{
unsigned int data = 0;
data = 256 * readEEPROM(addr) + readEEPROM(addr + 1);
return data;
} |
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
25.02.2014, 10:06
|
|
|
Прописка
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
|
Re: Запись в EPROM AVR
Сообщение от E_C_C
|
Первоисточник здесь http://radiokot.ru/forum/viewtopic.php?t=1360
|
Код:
|
// EEPROM Data Read Function - чтение байта из EEPROM по заданному адресу
unsigned int readEEPROM (unsigned int addr)
{
unsigned int data = 0;
while (EECR.1 != 0);
EEAR = addr;
EECR.0 = 1;
EECR.0 = 0;
data = EEDR;
return data;
}
// EEPROM Data Write Function - запись байта data в EEPROM по заданному адресу
void writeEEPROM (unsigned int addr, unsigned char data)
{
while (EECR.1 != 0);
EEAR = addr;
EEDR = data;
EECR.2 = 1;
EECR.1 = 1;
}
// EEPROM Data Copy Function - копирование данных из ячейки в ячейку
void copyEEPROM (unsigned int saddr, unsigned char taddr)
{
writeEEPROM (taddr, readEEPROM (saddr));
}
// EEPROM 2-byte Data Write Function - запись двухбайтового числа в 2 последовательные ячейки с адресом первой addr
void _2bwriteEEPROM (unsigned int addr, unsigned int data)
{
if ((data / 256) != readEEPROM (addr)) writeEEPROM (addr, (unsigned char)(data / 256));
writeEEPROM (addr + 1, (unsigned char)(data % 256));
}
// EEPROM 2-byte Data Read Function - чтение двухбайтового числа из 2 последовательных ячеек с адресом первой addr
unsigned int _2breadEEPROM (unsigned int addr)
{
unsigned int data = 0;
data = 256 * readEEPROM(addr) + readEEPROM(addr + 1);
return data;
} |
|
Спасибо, понял.
|
|
|
|
25.02.2014, 10:06
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Запись в EPROM AVR
из хэлпа CV:
/* The value 1 is stored in the EEPROM during chip programming */
eeprom int alfa=1;
/* Write directly the value 0x55 to the EEPROM */
alfa=0x55;
|
|
|
|
25.02.2014, 11:18
|
|
|
Прописка
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
|
Re: Запись в EPROM AVR
Сообщение от oleg110592
|
из хэлпа CV:
/* The value 1 is stored in the EEPROM during chip programming */
eeprom int alfa=1;
/* Write directly the value 0x55 to the EEPROM */
alfa=0x55;
|
Это я читал, спасибо.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:16.
|
|