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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к 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_RXCvoid usart0_rx_isr(void)
{
unsigned char data;
static 
unsigned char j=0PROG_N1=0xFFPROG_N2=0xFFPROG_N3=0xFFPROG_N=0x00flag_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=0xFFj=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=0xFFj=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=0xFFj=0x00; };
     return;
    };
   
    if(
data==0x84) { flag_84=0xFFstop_timer_0_2();  };
    if(
data==0x78) { flag_84=0x00start_timer_0_2(); };
    if((
data&flag_84)==0x70PROG_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,378
Сказал спасибо: 1,948
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Запись в EPROM AVR

IMHO, прерывание должно быть как тост - кратким и содержательным. Я бы не стал в прерывании писать в EEPROM да еще вызывать процедуры типа putchar, а принимал бы в какой-то буфер, по заполнении буфера выставлял флаг - а в рабочем цикле по этому флагу делай что угодно...
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 25.01.2013, 14:12  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 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
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 18 раз(а) в 9 сообщении(ях)
vgtmaster на пути к лучшему
По умолчанию Re: Запись в EPROM AVR

Ребята помогите записать в EEPROM два байта переменную int. Что то у меня не получается. С переменной char проблем нет. Компилятор CodeWizardAVR V2.03.9 Standard
vgtmaster вне форума  
Непрочитано 25.02.2014, 09:58  
E_C_C
Почётный гражданин KAZUS.RU
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 739
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
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
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 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.RU
 
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
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
Сообщений: 134
Сказал спасибо: 7
Сказали Спасибо 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, время: 21:42.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot