Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Не могу разобраться с директивой db

Ср мар 22, 2017 19:59:31

Я не могу понять, как воспользоваться значением, помещенным в память программы при помощи директивы db. Когда я пытаюсь подставить название, программа выдает мне адрес зарезервированного под переменную места, а до значения я никак не могу достучаться. Я знаю, что одиночная переменная объявляется при помощи variable, но мне нужно задать массив, который длиннее, чем можно запихнуть в регистры

Re: Не могу разобраться с директивой db

Чт мар 23, 2017 04:24:38

1. db - это способ определения КОНСТАНТ, а не переменных.
2. Эти константы будут размещены в ПРОГРАММНОЙ ПАМЯТИ.
3. Чтение программной памяти в 8-разрядных PIC-ах осуществляется через команды ТАБЛИЧНОГО ЧТЕНИЯ.
Табличное чтение осуществляется через специальный регистр указатель TBLPTRx в который (в которые) нужно записать адрес (ту самую метку+смещение данных относительно нее с учетом адресной размерности (в 16-х через один, а в 18-х через два адреса).
Далее следует ассемблерная команда tblrd, которая производит транзакцию из текущего адреса флеша по указателю в регистр TABLAT, откуда далее можно забрать данные по назначению.
Более подробно Вы можете все это прочесть в даташите на контроллер в разделе табличное чтение программной памяти.
Кстати, табличное чтение непосредственно флеша есть не у всех 8-разрядных контроллеров Микрочипа... В тех, где его нет табличное чтение производится через команду retlw <const>.
Если перед обсуждаемой директивой стоит ORG с определением абсолютного адреса EEPROM данных (флеша данных, если он имеется в данном МК), то чтение осуществляется уже через адресный регистр указатель этого флеша и, соответственно, его регистра защелки данных.
В 16-разрядных контроллерах Микрочипа имеется также способ доступа к флешу через PSV-доступ, когда флеш отображен на адресное пространство ОЗУ, начиная с адреса 0x8000.

Re: Не могу разобраться с директивой db

Чт мар 23, 2017 06:41:44

То есть, в PIC12F509 нужно писать все значения через RETWL?

Re: Не могу разобраться с директивой db

Чт мар 23, 2017 08:19:41

Для "среднемладших" (10-12-16) это основной способ обращения.
Особо для 8-16 выводных.
Только там не DB, а DT должно использоваться для генерации именно retlw 0xNN.
Есть кристаллы с чтением ПЗУ как ЕЕПРОМ - но то "весьма индивидуально" - у каждого надо в даташит вчитываться.
Отличия только для "энхансед" с четырехзначными суффиксами (PICnnFxxxx) - там уже гибрид с 18-й серией.
:dont_know:
Ответить