Настройка PINB.4 и PINB.5 в AVR ATMega 169 для работы в качестве входных контактов и включения подтягивания? - PullRequest
0 голосов
/ 20 ноября 2011

Я хочу настроить две платы-бабочки AVR таким образом, чтобы PORT D был выходным портом в первом, а два контакта этого PORT D подключались к контактам B.4 и B.5 порта B второго AVR бабочка доска. Я также хочу включить подтягивания на этих выводах порта B. Правильна ли эта конфигурация для второго AVR? Есть что-то, чего мне не хватает?

  //Init port pins
DDRB = 0x00;
    PORTB |= 0X30;

 //Enable pin change interrupt on PORTB
 PCMSK1 = 0X30;
 EIFR = 0XC0;
 EIMSK = 0XC0;

SIGNAL (SIG_PIN_CHANGE1) - прерывание смены PIN-кода B.4 {..} SIGNAL (SIG_PIN_CHANGE2) - прерывание смены PIN-кода B.5 {.....}

1 Ответ

1 голос
/ 09 декабря 2011

Вы правильно настроили PORT B, но не помешало бы немного улучшить ваши соглашения по кодированию.

DDRB&= ~(1<<PB0)|(1<<PB1);
PORTB|= (1<<PB0)|(1<<PB1);

Если я не понимаю, чего вы пытаетесь достичь, я недумаю, что ваши прерывания настроены правильно.

PB4 и PB5 соответствуют PCINT12 и PCINT13 соответственно.

Поскольку оба соответствуютPin Change Interrupt Enable 1, вы хотите включить только этот контакт.

EIMSK = (1<<PCIE1);

На самом деле вам не нужно устанавливать EIFR , если только вы не пытаетесь вручную вызвать прерывание.Этот регистр автоматически помечается при каждом изменении пина.

В PCMSK1 , которые вы хотите установить PCINT13 и PCINT12

PCMSK1 |= (1<<PCINT12)|(1<<PCINT13);

Это разрешает прерывания на соответствующих выводах.

Также SIGNAL не рекомендуется.#include avr / interrupt.h и использовать ISR.

ISR(PCINT1_vect){}

Оба изменения Pin будут обрабатываться этим вектором.

Надеюсь, это немного прояснит ситуацию.

...