Всем привет! Помогите пожалуйста разобраться с регистрами DDRx в AVR Studio 4. Привожу следующий отрывок кода:
Код:
.include "1200def.inc"
.ORG 000 rjmp reset reset: ldi r31,$1f out ddrb,r31 ldi r31,$61 out portb,r31 rjmp scan scan: sbis pinb,6 rjmp left sbis pinb,5 rjmp right rjmp scan left: rjmp scan right: rjmp scan
И так, выводя в DDRB число $1f (то есть 0b00011111) я задаю работу выводов PORTB pin 0 по pin 5 как выходы, а 6, 7 и 8 соотв. как входы. Но, во время симуляции, при выводе числа $61 (0b01100001) в PORTB (см. код), в регистр PINB считывается PORTB pin 0 вместо заданных как входы PORTB pin 5 и pin 6, в результате чего блок с месткой scan отрабатывает прыжок на метку left (чего в принципе не требуется). Если попытаться инверсировать число вводимое в регистр DDRB, то есть вместо $1f ввести $e0 (при этом направление портов тоже инвертируются), то все работает как надо, но остается вопрос, а как же с направлениями портов, ведь теперь они заданы наоборот? Может в AVR Studio надо где-то задавать правильную работу DDRx? В чем здесь ошибка?
Я ника не могу понять что надо, обьяснение запутанное.
Но могу заметить,что если вывод порта работает, как вход, то значение с него считывается внешнее, то есть от внешнего сигнала.
Надеюсь, помог.
Я думаю вы не правы ! и путаете спрашивающего.
С порта всегда читается то что туда записали а до записи считываются нули. Устройство ножки смотрите по ссылке выше.
_________________ Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Насчет кода. Одним словом в AVR Studio, в PINB ничего не передается со входов, когда пины настроены на вход (да да, ВХОД), и наоборот передается, когда они настроены как выходы! Вот это и создает неурядицу.
Если не трудно, прогоните его под AVR Studio, и все станет ясно.
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Ребята, БОЛЬШОЕ всем спасибо!!! Теперь понял, а то у меня создалась путаница в голове. Мне казалось, что при конфигурации порта как "вход", в PINx должно записываться то, что на данный момент записано в PORTx, а в случае выхода туда вообще ничего не пишется, в чем я и ошибался! Вы мне все прояснили. Теперь я знаю, что во время симуляции мне надо самому вручную выставлять или снимать биты на PINB.6 и PINB.5, чтобы как бы эмулировать состояние физических выводов! Еще раз всем спасибо за помощь. tych, прости что сразу не заметил кнопку www - я тут лишь с сегодняшнего дня, с непривычки видимо.
Картинка великолепная ! НЕ ПРАВИЛЬНАЯ конечно. Но прикольно и красочно сделано В мурзилку хорошо подошла бы.
Вот схема ножки AVR и регистров близкая к реальности
_________________ Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Подведем итоги. PINx и PORTx - разные регистры МК. Соответственно, PINx содержит логические уровни на соответствующих выводах МК, PORTx хранит записанное туда вами. PORTx читается всегда одинаково (до тех пор пока вы его сами не перепишете), вне зависимости от изменения внешних сигналов, если мы хотим следить за происходящим во внешнем мире - читаем PINx. Регистр DDRx определяет направление порта в том смысле, что блокирует передачу на выход уровней PORTx, если порт настроен на вход. Примерно так. Несколько упрощенно, но, думаю, понятно.
_________________ Оптимизм х (Опыт + Знания) = const
Последний раз редактировалось Aheir Вс окт 14, 2007 11:55:09, всего редактировалось 1 раз.
Подведем итоги. PINx и PORTx - разные регистры МК. Соответственно, PINx содержит логические уровни на соответствующих выводах МК, PORTx хранит записанное туда вами. PORTx читается всегда одинаково (до тех пор пока вы его сами не перепишете), вне зависимости от изменения внешних сигналов, если мы хотим следить за происходящим во внешнем мире - читаем PINx. Регистр DDRx определяет направление порта в том смысле, что блокирует передачу на выход уровней PORTx. Примерно так. Несколько упрощенно, но, думаю, понятно. Smile
Да, в полне понятно, но чтобы звучало полноценно, я бы еще отметил, что DDRx "блокирует" передачу уровней в случае, когда он определяет направление порта, как вход.
Не так ли, ведь при выходе ничего не блокируется)?
...я бы еще отметил, что DDRx "блокирует" передачу уровней в случае, когда он определяет направление порта, как вход...
Добавил. Последние наши посту здесь особого смысла не имеют, так что если никто не против, через пару дней устроим еще одну чистку темы.
Насчет обучалки - попробуем решить.
_________________ Оптимизм х (Опыт + Знания) = const
Тыч, обучалку по контроллерам писал я.
Картинку может и можно в мурзилку. Но она наглядно и без лишних тонкостей объясняет работу ПВВ. Начинающих совсем не обязательно грузить сложными схемами. Я могу привести твою схему ниже в качестве допматериала, но объяснять по ней я ничего не смогу.
_________________ Лучше быть первым в деревне, чем вторым в Риме
Ага... так я и поверил "обучалку написал но схем читать не умею".
"НУ ни как" не сообразить что DDRB.1 управляет переключателем и "1" он верху а "0" он внизу. Ну ни в жисть не догадаться. Да ?
Всё как-то в тумане ...
Ну то что сигнал с PB1 - по СТРЕЛОЧКЕ ! - поступает в PINB.1 ВСЕГДА это конечно ребус афигительный.
И уж ни как нельзя понять что "1" или "0" из PORTB.1 - по СТРЕЛОЧКЕ ! - поступает либо прямо на PB1 когда в DDRB.1 есть "1" либо в виде подтяжки через диод и резистор примерно 40 ком когда в DDRB.1 есть "0"
Диод не дает "0" в PORTB.1 тянуть в низ ногу PB1 - подтяжка выключена.
Блин ! Ну такая сложная схема ... Оййой ...
А помню кто-то доказывал как важно новичку знать как устроен транзистор ! А эта схема выходит его "загрузит". Т.е. пытаясь изучить МК - не грузись устройством его ног ! - весело
_________________ Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения