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

 
 
> регистры GPIOR0-3, ATmega168
SZ0
сообщение Mar 2 2006, 11:32
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



IAR их использует в своих целях? А то хочется их в качестве флаговых
задействовать (в асме так делаю). А то создал битовое поле, а он его в
SRAM засунул, да ещё и обращается к нему через указатель Z - долго всё
это. Как поступить? Как запретить IAR использовать эти регистры в своих
целях. И как разместить структуру по заданному адресу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение Mar 2 2006, 17:33
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(SZ0 @ Mar 2 2006, 18:32) *
IAR их использует в своих целях? А то хочется их в качестве флаговых
задействовать (в асме так делаю). А то создал битовое поле, а он его в
SRAM засунул, да ещё и обращается к нему через указатель Z - долго всё
это. Как поступить? Как запретить IAR использовать эти регистры в своих
целях. И как разместить структуру по заданному адресу?


Код
/****************************************************************************
Системные флаги
****************************************************************************/
#define g_System_Flags GPIOR0

#define fKEY_VALID  (1 << 0)// действительное нажатие кнопки
#define fNEED_FLASH  (1 << 1)// гашение мерцающего индикатора
#define fSOUND_ENABLE (1 << 2)// разрешение выхода звукового сигнала
#define fNEED_NEXT_MODE (1 << 3)// разрешение смены режима вывода
#define fVIEW_MENU_NAME (1 << 4)// разрешение вывода названия пункта меню
#define fEDIT_MODE  (1 << 5)// вход в меню редактирования режима
#define fEDIT_SUB_ITEM  (1 << 6)// редактирование подпункта меню редактирования
#define fNEGATIVE       (1 << 7)// флаг отрицательного результата при преобразовании HEX->BCD

#define g_System_Flags2 GPIOR1
#define fPOWER_GOOD  (1 << 0)// флаг присутствия основного питания

....

....

....

/****************************************************************************
Прерывание по переполнению ТС0
период вызова - 5мс
Выполняемые функции:
* Вывод очередного символа на индикаторы
* Вычисление скан-бита для следующего выводимого символа из буфера дисплея
* Чтение состояния клавиатуры и определение валидного нажатия кнопки
* Инкремент RTC
* Формирование бита мерцания
****************************************************************************/
#pragma vector=TIMER0_OVF0_vect
__interrupt void TIMER0_OVF0(void)
{ char sn;
  
    // записываем в TC0 значение для переполнения с периодом 5мс (200 гц)
    // для частоты внешнего кварца 7.372800 мГц
TCNT0 = (0xFF - TC0_OVR_VAL);

    // проверяем присутствие основного питания
    if(g_System_Flags2 & fPOWER_GOOD)
    {
       // обновляем сканбит каждые 4 прерывания
     sn = g_Tick & 0x03;
  if(!sn)
     {   g_Scan = (1 << CATH_1);
     }

     // формируем байт сканирования и управления устройствами
     g_Scan |= (g_Alarm_Exes_Flags | g_Termo_Exes_Flags);

     // выводим во внешний регистр символа очередной символ
     Led_Data_Transfer(g_Led_Buffer[sn]); // загружаем символ
     Led_Data_Transfer(g_Scan);// зажигаем индикатор

     // формируем строб записи в выходной регистр 74595
  PORTB |=  (1 << SSTB);
  PORTB &= ~(1 << SSTB);

     // читаем клавиатуру
     Read_Keys();

     // вычисляем новый скан-бит для дисплея и клавиатуры
  g_Scan <<= 1;  

     // Формируем бит мерцания
  g_System_Flags &= ~fNEED_FLASH;
  if(g_Tick >= FLASH_MAX_VALUE)
     {   if(!(g_Menu_Name_Tick & fKEY_VALID)) // если нет нажатой кнопки, мерцаем
         {   g_System_Flags |= fNEED_FLASH;
         }
     }
    }

    // инкрементируем системное время
    Inc_RTC();
}


Сообщение отредактировал prottoss - Mar 2 2006, 17:35


--------------------
Go to the top of the page
 
+Quote Post



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

 


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


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