| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Вопросы начинающего |
| Автор: Кристиан 2.2.2007, 23:07 |
| Приветствую! Появилось новое хобби - цифровая электроника. В частности микроконтроллеры. Начал изучение с книги "Мортон Д. - Микроконтроллеры 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. В общем, эта проблема не дает мне перейти к практике. Помогите разобраться. Заранее благодарен. |
| Автор: Romikgy 2.2.2007, 23:54 |
а здесь разве не условный переход должен быть? |
| Автор: Кристиан 3.2.2007, 00:12 | ||
Нет, так как здесь в качестве условного блока используется sbis. Суть команды sbis - пропустить следующую инструкцию, если бит в регистре установлен. |
| Автор: Romikgy 3.2.2007, 00:22 |
set bit - установка бита, но при установке сид потухнет clear bit - значит загорится, имхо коментарии местами перепутаны Добавлено @ 00:24 и еще я бы подтянул бы кнопку резюком к плюсу, а то не всегда может воспринимать лог 1 по обрыву.... имхо |
| Автор: Кристиан 3.2.2007, 00:39 | ||||
Romikgy,
Неужели тогда автор напутал и при именовании метки LEDoff?
Подтяжка к входу PD0? Она включена(написано в первом посте). Но я не очень понимаю смысл этого действия, зачем она нужна? Чтобы при отсутствии тока на входе была лог.1, а при нажатии кнопки - лог.0 ? Объясни, если не сложно. |
| Автор: cardinal 3.2.2007, 00:41 |
| А вообще поконкретней название темы придумывать надо! |
| Автор: Кристиан 3.2.2007, 11:00 |
| cardinal, Название темы придумывал в расчете на то, что здесь буду задавать все свои вопросы по ходу продвижения в этой области. |
| Автор: sergejzr 3.2.2007, 12:02 |
| Модератор: Пожалуйста, один топик - один вопрос. и соответственно Модератор: Название темы должно отражать ее суть! Вообще, перед началом неплохо бы и http://forum.vingrad.ruhttp://forum.vingrad.ru/act-SR/f-27.html почитать |
| Автор: Кристиан 3.2.2007, 21:00 |
| Вопрос решен. Автор книги и переводчики немного перемудрили. |
| Автор: Metal_Heart 5.2.2007, 10:20 | ||||
Светодиод будет гореть при: - лог.1: если он подключен анодом к порту, а катодом - на "землю" или - лог.0: если он подключен катодом к порту, а анодом - на "+Ep" судя по описанию, то подходит как раз второй случай:
Смотри схему |