Форум РадиоКот https://radiokot.ru/forum/ |
|
Не могу разобраться с директивой db https://radiokot.ru/forum/viewtopic.php?f=58&t=143465 |
Страница 1 из 1 |
Автор: | Tigozawr [ Ср мар 22, 2017 19:59:31 ] |
Заголовок сообщения: | Не могу разобраться с директивой db |
Я не могу понять, как воспользоваться значением, помещенным в память программы при помощи директивы db. Когда я пытаюсь подставить название, программа выдает мне адрес зарезервированного под переменную места, а до значения я никак не могу достучаться. Я знаю, что одиночная переменная объявляется при помощи variable, но мне нужно задать массив, который длиннее, чем можно запихнуть в регистры |
Автор: | КРАМ [ Чт мар 23, 2017 04:24:38 ] |
Заголовок сообщения: | Re: Не могу разобраться с директивой db |
1. db - это способ определения КОНСТАНТ, а не переменных. 2. Эти константы будут размещены в ПРОГРАММНОЙ ПАМЯТИ. 3. Чтение программной памяти в 8-разрядных PIC-ах осуществляется через команды ТАБЛИЧНОГО ЧТЕНИЯ. Табличное чтение осуществляется через специальный регистр указатель TBLPTRx в который (в которые) нужно записать адрес (ту самую метку+смещение данных относительно нее с учетом адресной размерности (в 16-х через один, а в 18-х через два адреса). Далее следует ассемблерная команда tblrd, которая производит транзакцию из текущего адреса флеша по указателю в регистр TABLAT, откуда далее можно забрать данные по назначению. Более подробно Вы можете все это прочесть в даташите на контроллер в разделе табличное чтение программной памяти. Кстати, табличное чтение непосредственно флеша есть не у всех 8-разрядных контроллеров Микрочипа... В тех, где его нет табличное чтение производится через команду retlw <const>. Если перед обсуждаемой директивой стоит ORG с определением абсолютного адреса EEPROM данных (флеша данных, если он имеется в данном МК), то чтение осуществляется уже через адресный регистр указатель этого флеша и, соответственно, его регистра защелки данных. В 16-разрядных контроллерах Микрочипа имеется также способ доступа к флешу через PSV-доступ, когда флеш отображен на адресное пространство ОЗУ, начиная с адреса 0x8000. |
Автор: | Tigozawr [ Чт мар 23, 2017 06:41:44 ] |
Заголовок сообщения: | Re: Не могу разобраться с директивой db |
То есть, в PIC12F509 нужно писать все значения через RETWL? |
Автор: | BOB51 [ Чт мар 23, 2017 08:19:41 ] |
Заголовок сообщения: | Re: Не могу разобраться с директивой db |
Для "среднемладших" (10-12-16) это основной способ обращения. Особо для 8-16 выводных. Только там не DB, а DT должно использоваться для генерации именно retlw 0xNN. Есть кристаллы с чтением ПЗУ как ЕЕПРОМ - но то "весьма индивидуально" - у каждого надо в даташит вчитываться. Отличия только для "энхансед" с четырехзначными суффиксами (PICnnFxxxx) - там уже гибрид с 18-й серией. ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |