Доброго дня!
Придеться продублировать сообщение на этом форуме, так как на другом решить мою проблемы пока так и не смогли.
Начал изучение с книги "Мортон Д. - Микроконтроллеры AVR. Вводный курс."
Впечатление от этой книги было крайне положительное, пока не остановился на одном простом месте, на котором окончательно запутался..
Собственно, причина:
Во вложении простейшая схема(из книги), на которой вывод PB0 отвечает за включение/выключение светодиода, а вход PD0 - за проверку нажатия кнопки. На PD0 устанавливается подтяжка. С PB0 вроде бы все понятно: если подана лог.1, то светодиод не горит, если же на PB0 подать лог.0, то идет ток и светодиод загорается. А вот как быть с PD0 и кнопкой? В книге поданы, на мой взгляд, два абсолютно противоположных примера, хотя автор говорит, что они действуют одинаково.
Вот ключевые фрагменты примеров.
Первый:
Start:
sbis PinD, 0 ; Проверяем, нажата ли кнопка
rjmp LEDoff
sbi PortB, 0 ; Включаем СИД
rjmp Start
LEDoff:
cbi PortB, 0 ; Выключаем СИД
rjmp Start
Прочтя этот код я уже несколько удивлен: почему СИД в этой программе включается и выключается с точностью до наоборот моим предположениям?
Второй пример, по-моему, противоречит первому. Он делает то же самое, что и первый, но не использует блоки условий. Вот он:
Start:
in temp, PinD ; Считываем состояние кнопки
out PortB, temp ; Изменяем состояние СИД
rjmp Start
Я не понимаю как отражается нажатие кнопки на вход PD0. Почему когда кнопка не нажата на входе PD0 должна быть лог.1, ведь в этот момент ножка ни к чему не подключена? Сначала думал, что это из-за подтяжки, но симулятор в AVR Studio показывает, что там 0.
В общем, эта проблема не дает мне перейти к практике. Помогите разобраться.
Заранее благодарен.