Уважаемые форумчане! Простите за тупой вопрос, но я не могу понять, как считать с порта. Написал программу преобразования из двоичного в десятичный код. Подставляю просто число (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, то единственной блокировкой его работы может быть включенная по умолчанию аналоговая функция пинов. Так как в разных МК имеются различия в инициализации. то гораздо конструктивнее будет озвучить тип МК и проблему с точностью до пина.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения