Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как передать адрес порта в функцию?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
AVR
Как передать адрес порта ввода-вывода в функцию в IAR-EW 4.11A?
Как записать и счиать ввнутри функции по этому адресу?
dxp
Цитата(AVR @ May 15 2006, 04:55) *
Как передать адрес порта ввода-вывода в функцию в IAR-EW 4.11A?
Как записать и счиать ввнутри функции по этому адресу?

А в чем принципиальная трудность? Эти адреса отмаплены на общее адресное пространство, т.ч. к ним можно обращаться, как к обычной памяти. Только эффективность при этом будет хуже. А чтобы было максимально эффективно - только непосредственно через in/out.

В свое время я использовал ссылки на __io объекты, коими являются порты (так они объявлены). Работало.
Old1
Цитата(AVR @ May 15 2006, 00:55) *
Как передать адрес порта ввода-вывода в функцию в IAR-EW 4.11A?
Как записать и счиать ввнутри функции по этому адресу?

Например так:
Код
void SetupBit(unsigned char* X, unsigned char Y, unsigned char Z)
{
   unsigned char* P_port=X;
   if(Z==IN0)
   {
     *P_port&=~(1<<Y);
     *(P_port-1)&=~(1<<Y);
   }
   else if(Z==IN1)
   {
     *P_port|=(1<<Y);
     *(P_port-1)&=~(1<<Y);
   }
   else if(Z==OUT0)
   {
     *P_port&=~(1<<Y);
     *(P_port-1)|=(1<<Y);
   }
   else if(Z==OUT1)
   {
     *P_port|=(1<<Y);
     *(P_port-1)|=(1<<Y);
   }
}

Обращение к функции:
Код
#define IN0 0
#define IN1 1
#define OUT0 3
#define OUT1 4
void main(void)
{
    SetupBit((unsigned char*)&PORTB,PB2,OUT1);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.