Вот интересная особенность...
void main()
{
// Порты 2, 3, 4, 5 конфигурируем на выход
DDRB = 0b00111100; // set PORTB as Output PB2, PB3, PB4, PB5
PORTB = 0; // Необязательно, для чистоты эксперимента
.....
Кусь.... все несущественное, то что никак не затрагивает порты
.....
State = 0;
while (1)
{
if (PINB.B4) // вот в этих местах самое интересное
State = 1;
if (!PINB.B4 && State)
{
State = 0;
..... Чего-нить можно сделать, засветить светодиодом например
PORTB.B2 ^= 1; // Вообщем инверсия всякий раз
}
}
}
Так вот, Порт B4 был сконфигурирован как выходной согласно кошачьей обучалке (Настройка портов ввода-вывода)
http://radiokot.ru/start/mcu_fpga/avr/06/
...Кусь...
И наоборот, если например, PX5 настроен на вывод, то прочитав 5-й бит PinD, мы всегда обнаружим 0.
Порты - дело тонкое…
...Кусь...
Почему этот алгоритм работает ?
Прекрасно работает и на вход и на выход
Нажимаю кнопочку, при отпускании срабатывает, тут же можно засветить/погасить светодиод на этом порту (т.к. он сконфигурирован на выход)
Мы же должны обнаружить там 0, как в описании говорилось и тогда первое условие несработает а, стало быть и второе и на PORTB.B2 недолжно быть реакции
1. Кто виновать ?
2. Что делать ?
- Кто подскажет ?
- Кто даст совет ?
- Это наваждение или нет ?
P.S.
И вообще, зачем тогда мне порты настраивать на вход, когда они и так работают ?




