Уважаемые форумчане! Простите за тупой вопрос, но я не могу понять, как считать с порта. Написал программу преобразования из двоичного в десятичный код. Подставляю просто число (movlw .24 к примеру) работает всё замечательно. Чтобы считать с порта меняю строчку на movf porta, 0 и тишина. Pic18fxxxx.
Последний раз редактировалось Hailmary Чт мар 02, 2023 11:41:09, всего редактировалось 1 раз.
Может стоит вначале ознакомится с системой команд этой архитектуры? У инструкции movf ТРИ аргумента. То есть она в общем случае выглядит как movf reg, d, a Где reg - регистр в ОЗУ, d - назначение (f или w), a - тип доступа в ОЗУ (accessed/banked) Отсутствие d и a означает дефолтную запись регистра в самого себя с доступом через BSR (banked).
про a не совсем. Читал мануал, но всё равно не дошло.
Абисняю. Разрядность инструкций в PIC18 - 16 бит. Это позволяет адресовать операнд в команде только 8 битами. Поэтому есть ДВА варианта доступа к пространству ОЗУ. Либо через регистр переключающий страницы ОЗУ - BSR (в нем располагаются старшие разряды адреса), либо через accessed - в этом случае НУЛЕВАЯ СТРАНИЦА оперативной памяти делится на две половины. В начале расположены адреса первой половины нулевой страницы ОЗУ, а в конце ремапированные адреса SFR (спецрегистров, к которым относится и PORTA). Это позволяет не переключать BSR при размещении наиболее часто используемых переменных в первой половине нулевой страницы ОЗУ. ЗЫ. Размещение SFR в последних 18-х моделях МК Микрочипа изменено. Поэтому при использовании МК типа PIC18F27Q43 и аналогичных на это следует обратить внимание.
Чудовищное безобразие. У каждой модели МК есть INC-файл. Присоединяете его проекту и пользуетесь определенными в нем именами.
Да я знаю про это, меня уже разок ткнули лицом. Но это потом, а сейчас хочу понять элементарную вещь, а то стыдно так, жуть просто. До этого в avr немного программировал, там с этим делом проще простого, а тут...
Благодарю за пример. А у Вас нет кода для pic18 с настроенными портами, чтобы на примере разобраться, для меня так проще. А то я искал в инете, везде в основном с 16 пиками. Мне самый простой, чтобы при наличии 1 на входе появлялась бы 1 на выходе.
Добавлено after 18 minutes 42 seconds: Вроде бы разобрался. Я неправильно порт А инициализировал. Сейчас пробую правильно прописать, вроде что-то получается.
Поскольку во всех PIC18 имеется железная отладка, проще всего ее включить (через PICkit, естественно) и наблюдать что и как переключается и настраивается. Что касается PORTA, то единственной блокировкой его работы может быть включенная по умолчанию аналоговая функция пинов. Так как в разных МК имеются различия в инициализации. то гораздо конструктивнее будет озвучить тип МК и проблему с точностью до пина.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения