Справочные таблицы

9-11-2013, 18:13
Просмотров: 1299
Когда подпрограмма должна обращаться к данным систематическим образом, то самый лучший подход - разместить данные в справочной таблице. Таблица - это блок данных в подпрограмме или блоке памяти EEPROM.
Справочные таблицы

Она может содержать набор числовых значений (например, переменные, используемые в подпрограмме playit) или кодов для различных конфигураций фигур на доске, или же закодированные результаты попыток прохождения лабиринта.
К данным, хранимым в справочной таблице, осуществляется быстрый доступ.
Здесь мы говорим о том, как поместить данные в подпрограмму. Для получения доступа к данным мы объявляем переменную, которая сообщает микроконтроллеру PIC, какой конкретно элемент данных должен быть считан.
Поскольку эта переменная указывает на некоторый элемент, она называется указателем.
Указатель сохраняется в регистре общего назначения и инициализируется нулевым значением:
pointer equ 30h
Подходит любой неиспользуемый адрес clrf pointer
Подпрограмму лучше всего размещать в начале листинга (особенно, если в ней много данных).
Это устраняет риск, что таблица распространится на два блока памяти программ.
Первая строка имеет вид:
addwf pel, w
Перед вызовом подпрограммы значение указателя помещается в рабочий регистр.
Для того чтобы считать первый байт, указателю присваивается значение 00h. Для чтения второго значения - Olh и т.д В первой строке подпрограммы, счетчик команд таким образом увеличивается в соответствии со значением указателя.
Обычно микроконтроллер PIC продолжает автоматически увеличивать счетчик команд и переходит к второй строке подпрограммы.
Если значение указателя равно 00h, то именно это и произойдет, однако, если указатель больще нуля, то микроконтроллер PIC переходит дальше: к строке, на которую указывает указатель.
Все строки подпрограммы, кроме первой, имеют форму:
retlw, Oah
Эта строка загружает значение (в данном случае - Oah) в рабочий регистр и возвращает процессор назад к главной программе.
В данном случае значение в регистре w используется в программе, которая вызвала подпрограмму.
Пример справочной таблицы кодов, используемых в семисегментном индикаторе.
Данная подпрограмма ориентирована на семисегментный индикатор, управляемый через восьмиразрядный порт (например, С).
Для использования семисегментного индикатора мы загружаем в регистр w отображаемое число и вызываем подпрограмму sevenseg.
После возврата из подпрограммы соответствующий код окажется в регистре w.
Этот код затем загружается в порт С, и число отображается на индикаторе.
Практический пример использования справочной таолицы - программа воспроизведения мелодии робота "Андроид".

Источник: delete-it.ru
Автор: ziko
Опубликовано пользователем: 81 (смотреть все)
Комментарии: