Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Запись в EPROM AVR

Непрочитано 25.01.2013, 13:40  
papa_n
Временная регистрация
 
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
papa_n на пути к лучшему
Вопрос Запись в 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.
papa_n вне форума  
Непрочитано 25.01.2013, 14:06  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Запись в EPROM AVR

IMHO, прерывание должно быть как тост - кратким и содержательным. Я бы не стал в прерывании писать в EEPROM да еще вызывать процедуры типа putchar, а принимал бы в какой-то буфер, по заполнении буфера выставлял флаг - а в рабочем цикле по этому флагу делай что угодно...
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 25.01.2013, 14:12  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Запись в EPROM AVR

Время записи в EPROM 5 mc, за это времени на скорости 9600 - придет почти 5 байт.
Boba_spb вне форума  
Непрочитано 25.01.2013, 15:27  
papa_n
Временная регистрация
 
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
papa_n на пути к лучшему
По умолчанию Re: Запись в EPROM AVR

Спасибо! Попробую
papa_n вне форума  
Непрочитано 25.02.2014, 09:28  
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию Re: Запись в EPROM AVR

Ребята помогите записать в EEPROM два байта переменную int. Что то у меня не получается. С переменной char проблем нет. Компилятор CodeWizardAVR V2.03.9 Standard
vgtmaster вне форума  
Непрочитано 25.02.2014, 09:58  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию 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;
        }
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Непрочитано 25.02.2014, 10:06  
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию 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;
        }



Спасибо, понял.
vgtmaster вне форума  
Непрочитано 25.02.2014, 10:06  
oleg110592
Гражданин KAZUS.RUN
 
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
oleg110592 на пути к лучшему
По умолчанию 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;
oleg110592 вне форума  
Непрочитано 25.02.2014, 11:18  
vgtmaster
Прописка
 
Регистрация: 28.04.2008
Сообщений: 141
Сказал спасибо: 11
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию 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;
Это я читал, спасибо.
vgtmaster вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Некорректно пишется/читается EPROM в AVR E_C_C Микроконтроллеры, АЦП, память и т.д 32 29.06.2011 11:00
Запись - чтение EPROM retcom Микроконтроллеры, АЦП, память и т.д 6 09.04.2008 11:48
AVR постраничная запись памяти 24C512? Andrewg Микроконтроллеры, АЦП, память и т.д 0 08.08.2007 14:34
CMOS EPROM AM27C020 ant_ Информация по радиокомпонентам 3 02.05.2007 15:38
Запись данных AVR микроконтроллера на Flash-USB без ПК Arsenal Микроконтроллеры, АЦП, память и т.д 8 31.10.2006 21:12


Часовой пояс GMT +4, время: 11:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.