Адресация памяти в PIC16

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
Alek Lem
Вымогатель припоя
Сообщения: 526
Зарегистрирован: Вс дек 28, 2014 18:35:34
Откуда: Луганск

Адресация памяти в PIC16

Сообщение Alek Lem »

Доброго времени суток!
Начал читать сабж и первое, что бросилось в глаза - это отличная от AVR адресация ОЗУ. Почитав литературу, сделал вывод, что так как адрес ячейки ОЗУ задаётся 7 битами указателя, то, скажем, адреса регистров PORTA и TRISA совпадают с точностью до банка.
Т.е., если мы желаем настроить порт А на ввод данных, то выбрав БАНК 1 можем написать так:

Код: Выделить всё

movlw 0xFF
movwf TRISA
А можем написать так:

Код: Выделить всё

movlw 0xFF
movwf PORTA
И результат будет один и тот же! Потому как строка символов PORTA и строка TRISA, если я правильно понял, компилятором подменяется одним и тем же адресом, для серии PIC16X равным 0x05.

Я правильно всё понял ?
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Адресация памяти в PIC16

Сообщение КРАМ »

Совершенно правильно.
Причем если не применять макрос banksel перед командой обращения к спецрегистру, то ассемблер будет генерировать при компиляции варнинги 302. Предупреждая о возможных ошибках адресации этих регистров.
Реклама
Аватара пользователя
Alek Lem
Вымогатель припоя
Сообщения: 526
Зарегистрирован: Вс дек 28, 2014 18:35:34
Откуда: Луганск

Re: Адресация памяти в PIC16

Сообщение Alek Lem »

Спасибо!
Сейчас поюзал переводную версию mpasm по поводу директивы banksel. Я так понял, что эта директива избавляет от необходимости помнить, в каком банке находится нужный регистр и напрямую обращаться к битам RP0 и RP1. Никаких других преимуществ ?
Последний раз редактировалось Alek Lem Сб ноя 21, 2015 14:30:32, всего редактировалось 1 раз.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Адресация памяти в PIC16

Сообщение КРАМ »

Нет, других преимуществ нет. Только нужно помнить, что этот макрос каждый раз генерирует переключение банков, что далеко не всегда нужно в смысле длины кода. Если при инициализации это значения не имеет, то в критическим местах удлиняет код на пару команд.
В принципе, если регулярно работать с Микрочипом, запомнить расположение основных спецрегистров труда не составит. Они размещены достаточно оптимально с точки зрения переключения банков.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
shindax
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Сб сен 19, 2009 07:02:19

Re: Адресация памяти в PIC16

Сообщение shindax »

КРАМ писал(а):...Только нужно помнить, что этот макрос каждый раз генерирует переключение банков, что далеко не всегда нужно в смысле длины кода...
Не только поэтому. При использовании banksel в связке с командами btfss/btfsc, можно сильно удивиться.
P.S.
Я тоже работаю с PIC и с 16-ми в том числе и вот не понимаю, для чего сейчас может понадобиться их детальное изучение. IMHO, если уж изучать PIC-и, то начинать стОит хотя-бы с PIC24.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Адресация памяти в PIC16

Сообщение КРАМ »

shindax писал(а):При использовании banksel в связке с командами btfss/btfsc, можно сильно удивиться.
Чему удивиться? :dont_know:
Есть бесконечное множество вариантов, когда ветвление подразумевает более одной команды в одной из веток. Понятно, что проверка бита с пропуском должна иметь только одну команду в этой ветке, а макрос может генерировать любое число команд и вставлять его под команду такого ветвления надо с пониманием полученного окончательно кода. В этом смысле и без banksel можно напортачить.
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15572
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Адресация памяти в PIC16

Сообщение BOB51 »

Уважаемый shindax... Насчет детального изучения 16-й серии...
Я б не стал так категорично утверждать.
Советую повнимательнее присмотреться к подсерии
Enhanced Mid-Range PIC Microcontrollers
http://www.microchip.com/pagehandler/en-us/family/8bit/
(это с 4-х значным кодом pic16f/lf xxxx)
весьма удобненькое семейство с учетом преемственности в корпусировании.
Жабко... ни в моих краях, возможно и у топикстартера таковые не попадаются в продаже... :(
Аватара пользователя
wws63
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Вс май 21, 2006 16:07:59
Откуда: Алтай

Re: Адресация памяти в PIC16

Сообщение wws63 »

shindax писал(а): IMHO, если уж изучать PIC-и, то начинать стОит хотя-бы с PIC24.
А если требуется сделать простое устройство с несложным алгоритмом работы?
Аватара пользователя
shindax
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Сб сен 19, 2009 07:02:19

Re: Адресация памяти в PIC16

Сообщение shindax »

КРАМ писал(а):Чему удивиться? :dont_know:...
Многие начинающие в последнее время напрочь игнорируют даташиты. Это просто напоминание/предупреждение было.
BOB51 писал(а):...Насчет детального изучения 16-й серии...Я б не стал так категорично утверждать...
Да видел я всё это и использую по необходимости. Я говорил только про изучение МК "c нуля". Относительно свежие PIC-и четырехзначной серии я покупаю здесь: http://trt.ru/Stock.php?Part=160 и здесь: http://chip-nn.ru/30.php.
wws63 писал(а):...А если требуется сделать простое устройство с несложным алгоритмом работы?
В этом случае берётся подходящий МК, изучается даташит и программа пишется на Си. Я по-крайней мере так делаю. Но это всё из разряда IMHO, разумеется. :)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15572
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Адресация памяти в PIC16

Сообщение BOB51 »

shindax писал(а): Да видел я всё это и использую по необходимости. Я говорил только про изучение МК "c нуля". Относительно свежие PIC-и четырехзначной серии я покупаю здесь: http://trt.ru/Stock.php?Part=160 и здесь: http://chip-nn.ru/30.php.
Сравнил... Россию и тамошнюю почту с нашей (ДНР/ЛНР) изолированной самоваркой... :)))
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: Адресация памяти в PIC16

Сообщение scorpi_0n »

весьма удобненькое семейство с учетом преемственности в корпусировании.
А также с преемственностью банкам и страницам со всеми вытекающими.
А если требуется сделать простое устройство с несложным алгоритмом работы?
Тогда как мне кажется лучше взять СТМ8. Он проще и более развитый во всех отношениях. И дешевле ещё.
Многие начинающие в последнее время напрочь игнорируют даташиты
В микрочиповских даташитах можно мозг сломать. Организация памяти старая периферия тоже. Накрутка каких-то дополнительных фишек выглядит просто чудовищно. Имхо эти камни больше для профи которые по принуждению. Для новичков там просто легко потеряться и не найти даже себя самого. Наверное поэтому новички и не юзают МК с четырёхзначными индексами. А юзают в основном старые допотопные чипы прошлого столетия.
Аватара пользователя
wws63
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Вс май 21, 2006 16:07:59
Откуда: Алтай

Re: Адресация памяти в PIC16

Сообщение wws63 »

scorpi_0n писал(а):
А если требуется сделать простое устройство с несложным алгоритмом работы?
Тогда как мне кажется лучше взять СТМ8. Он проще и более развитый во всех отношениях. И дешевле ещё.
Простенькое устройство на 8-ми ногом камешке, в ДИП корпусе, чтобы быстро на коленке спаять... на СТМ8 :))
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: Адресация памяти в PIC16

Сообщение scorpi_0n »

Ага! Восьминогий ПИК типа PIC12F1840 и на коленке. А шить чем? СТМ8 через USB-COM от мобилы хоть зашить можно. А можно и отладчик за копейки купить. А выворачивать мозг страницами и банками в ПИКе это как из спортивного интереса?
Аватара пользователя
Alek Lem
Вымогатель припоя
Сообщения: 526
Зарегистрирован: Вс дек 28, 2014 18:35:34
Откуда: Луганск

Re: Адресация памяти в PIC16

Сообщение Alek Lem »

Так, программу в стиле "Hello, World!" для светодиода и микрика (BUTTON) я набросал и даже работает. Хочу попробовать вызов подпрограммы (CALL) и соответственно начал читать про стек. На сколько я понял, в отличии от AVR, адрес вершины стека в PIC16 специально задавать не обязательно, потому как указание на это я не нашел. Следовательно, он уже назначен где-то в конце RAM ?
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: Адресация памяти в PIC16

Сообщение scorpi_0n »

Так у 16-х Пиков вроде хардварный стэк да ещё и фиксированного размера. Там никакого отношения к RAM вообще нет.
Указания в начале первой страницы даташита вроде.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Адресация памяти в PIC16

Сообщение КРАМ »

scorpi_0n писал(а):Ага! Восьминогий ПИК типа PIC12F1840 и на коленке. А шить чем? СТМ8 через USB-COM от мобилы хоть зашить можно. А можно и отладчик за копейки купить. А выворачивать мозг страницами и банками в ПИКе это как из спортивного интереса?
Я дивуюся хлопцям, які вважають разбор современных архитектур, в которых без привычки можно убить неделю на запуск осциллятора, более простым занятием, чем элементарная адресация старших разрядов адреса ОЗУ чрез отдельный регистр. И при том ни разу не жалуются на КОСВЕННУЮ адресацию через указатель, где по сути происходит то же самое... Я уже не говорю про писанину кода на Си, синтаксис которого ни разу про банки и не слышал...
Шить ПИКи лучше всего ПИКкитом. А стоимость стлинка примерно такая же, как и пиккита... Шить через CDC USB конечно можно, но зело неудобно для 8 ногого корпуса... Да и мост тоже денег стоит.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: Адресация памяти в PIC16

Сообщение scorpi_0n »

У четырёхзначных 16 пиков разве тактовую настраивать не надо и внутреннего гена нет? И PLL там нет? И на Си директив ручного управления банками нет? А фрагментация памяти куда же подевалась?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Адресация памяти в PIC16

Сообщение КРАМ »

Особенность младших пиков состоит в том, что настройки осциллятора сводятся к установкам конфига. То есть одного, максимум двух, регистров. И чаще всего для этого даже не надо открывать даташит, поскольку все варианты изложены в inc-файле (h-файле) в комментах.
Переключать в Си банки конечно можно, но это будет выглядеть как тонкий и извращенный мазохизм... Типо сам себе диверсант... :))) :))) :)))
Вы вероятно в курсе, что Си не оперирует (как правило) абсолютными адресами и компилятор берет на себя распределение памяти... :wink:
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: Адресация памяти в PIC16

Сообщение scorpi_0n »

То есть у 16-х никаких проблем с размещением больших массивов в RAM нет?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25261
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Адресация памяти в PIC16

Сообщение КРАМ »

Словосочетание "большой массив" в отношении 16-х меня как то смутило... :roll:
Если массив влазит в имеющуюся память, то проблем никаких нет. тем более,что большие массивы (как и любые массивы) компилятор адресует КОСВЕННО. А регистр косвенной адресации у 16-х имеется и называется он FSR. Доступ к данным по адресу в FSR происходит через регистр-окно INDF. Причем и FSR и INDF расположены в банках так, что видимы по одинаковым абсолютным адресам ВО ВСЕХ БАНКАХ.
То есть ОЗУ при косвенной адресации никаких банков не имеет.
Ответить

Вернуться в «PIC»