Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Макрос для работы с портами в С30
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
DL36
Раньше вроде выкладывал здесь но найти не смог.
Опираясь на статью об атомарном доступе я приспособил общеизвестные макросы под С30.

Один раз определив вывод
#define DATA A, 10, H с ним можно делать
Код
OPEND_DRAIN_ON(OUT0);   // Установить открытый сток
  SET_DIR(OUT0,Out);      // Настроить на вывод
  AD1PCFG = ENABLE_ALL_DIG_0_15;
  ANALOG_INPUT_ON(1);     // Подключить аналоговый вход
  ANALOG_INPUT_OFF(1);    // Отключить аналоговый вход

  if (SIGNAL(IMPUT0))     // На входе уровень активный?
  ON(OUT0);               // Установить активный уровень
  OFF(OUT0);              // Сбросить активный уровень
  HIGH(OUT0);             // Установить высокий уровень
  LOW(OUT0);              // Установить низкий уровень
  TOGGLE(OUT0);           // Инвертировать выход
  if (LATCH(OUT0))        // Уровень активный?
  if (DIR_IS_OUT(OUT0))   // Направление на вывод?
  if (DIR_IS_IN(OUT0))    // Направление на вход?
  Tmp = BITNUM(OUT0);     // Возвращает номер бита

Сейчас добавил работу с внешними прерываниями и контролем за изменением состояния
Код
EDGE_INT(BIT_DATA) = 1; - Позволяет установить фронт срабатывания
  F_INT(BIT_DATA) = 0;    - Позволяет проверить или сбросить флаг
  P_INT(BIT_DATA,pri);    - установить приоритет обозначенного вывода
  INTInterrupt(BIT_DATA)  - сделать подстановку в функции обработчика

Обработчик прерывания, к примеру, для вывода (BIT_DATA A, 14, H) будет выглядеть так
Код
void __attribute__((interrupt, no_auto_psv)) INTInterrupt(BIT_DATA) (void)  
Преобразуется к виду
void __attribute__((interrupt, no_auto_psv)) _INT3Interrupt (void)

Для контроля изменения состояния.
Код
CH_EN(BIT_DATA) = 1;    - Разрешить контроль изменения состояния
  CH_PU(BIT_DATA) = 1;    - Включить подтягивающие резисторы
zltigo
Цитата(DL36 @ Mar 26 2010, 09:41) *
Раньше вроде выкладывал здесь но найти не смог.

Moderator:
Даже невеликий по возможностям поиск форума справляется - расширенный поиск по автору поста `DL36` и слову, например, `макрос`.
http://electronix.ru/forum/index.php?showt...30&start=30
Не полодите, пожалуйса, дублей.
DL36
Цитата(zltigo @ Mar 26 2010, 11:35) *
Moderator:
Даже невеликий по возможностям поиск форума справляется - расширенный поиск по автору поста `DL36` и слову, например, `макрос`.
http://electronix.ru/forum/index.php?showt...30&start=30
Не полодите, пожалуйса, дублей.

Спасибо, честно искал.
Удалите топик, а я там просто обновление допишу, так правильнее будет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.