Принесли устройство, попросили написать коротенькую обработку. Устройство контролирует исполнительные устройства (автоматы, контакторы, цифровые датчики). Собрано на atmega 2560.
Для опроса используется порт L. Он сконфигурирован стандартно:
// Port L initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRL=(0<<DDL7) | (0<<DDL6) | (0<<DDL5) | (0<<DDL4) | (0<<DDL3) | (0<<DDL2) | (0<<DDL1) | (0<<DDL0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTL=(0<<PORTL7) | (0<<PORTL6) | (0<<PORTL5) | (0<<PORTL4) | (0<<PORTL3) | (0<<PORTL2) | (0<<PORTL1) | (0<<PORTL0);
Подтягивающие резисторы по 10к есть на самой плате.
#define A1 PINL&(1<<0)
#define A2 PINL&(1<<1)
#define A3 PINL&(1<<2)
#define A4 PINL&(1<<3)
#define A5 PINL&(1<<4)
В коде по прерыванию от таймера (желание заказчика) проверяем состояние пинов.
if (!A1){printf("1");} // написал просто для проверки, чтобы видеть, что работает
if (A1) {printf("2)";}
Всё работает. При опросе следующих пинов появляется непонятная для моего недостаточного опыта фигня.
if (!A2){printf("3");}
if (A2) {printf("4");}
Сначала нет ничего при появлении сигнала на А2, появляется 4, а при пропадании сигнала опять ничего.
Пробовал считать состоянии пина в переменную
int c = A2;
printf("%i", c);
Без сигнала идут 0, после появления появляется цифра 2, когда сигнал пропадает 0. Не могу понять, помогите.