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

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Tigozawr
Родился
Сообщения: 15
Зарегистрирован: Сб янв 25, 2014 18:09:09

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

Сообщение Tigozawr »

Я не могу понять, как воспользоваться значением, помещенным в память программы при помощи директивы db. Когда я пытаюсь подставить название, программа выдает мне адрес зарезервированного под переменную места, а до значения я никак не могу достучаться. Я знаю, что одиночная переменная объявляется при помощи variable, но мне нужно задать массив, который длиннее, чем можно запихнуть в регистры
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25154
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

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

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

Сообщение Tigozawr »

То есть, в PIC12F509 нужно писать все значения через RETWL?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

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

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