Вычисляемый переход .

Автор: Super User Просмотров: 1387

Если после команды ADDWF PCL   расположить группу команд RETLW (как ниже в примере), то  в результате произойдет  «прыжок» на одну из команд, в пределах  256-байтного блока. Обычно  данный алгоритм применяется в подпрограммах табличной перекодировки, где таблица позволяет сопоставить одному 8-битному числу другое произвольное 8-битное число.

В качестве примера рассмотрим ПП перевода десятичного числа в семисегметный код:

;----------------------------------------------------------------------------
; ПП перевода десятичного числа в семисегментный код.
;----------------------------------------------------------------------------
PER_10_7   mullw               .2 ; Умножаем W на 2.
           movf           PRODL,0 ; Результат умножения в W
           addwf              PCL ; Увеличение PCL на величину содержимого W.
           retlw      b'00111111' ; Символ "0".
           retlw      b'00000110' ; Символ "1".
           retlw      b'01011011' ; Символ "2".
           retlw      b'01001111' ; Символ "3".
           retlw      b'01100110' ; Символ "4".
           retlw      b'01101101' ; Символ "5".
           retlw      b'01111101' ; Символ "6".
           retlw      b'00000111' ; Символ "7".
           retlw      b'01111111' ; Символ "8".
           retlw      b'01101111' ; Символ "9".
           retlw      b'00000000' ; Символ потушен 10
           retlw      b'00000001' ; Символ прочерк  (верхний)  11
           retlw      b'00001000' ; Символ прочерк (нижний) 12
           retlw      b'01000000' ; Символ прочерк  (средний) 13     


Те кто имеет опыт программирования на микроконтроллерах 16 серии и применяли данной метод заметили разницу  в коде программы. Дело в том, что в микроконтроллерах 18 серии память программ 16 разрядная и соответственно "прыжок" должен быть "четным"  (0,2,4,6...128) и максимальной длиной 128  , при условии размещения начала таблицы на границе 256-байтного блока.

В данном примере  до вызова ПП было записано некое 8-битное число в регистр  "W"   (0-128), это число умножается на 2, результат умножения из младшего  регистра PRODL (младший регистр результата умножения)  снова копируется в W, тем самым производится коррекция  "прыжка" при выполнении команды ADDWF PCL.

При разработки приложений необходимо  что бы таблица находилась в пределах 256-байтного блока, т.е. не было переполнения регистра PCL при "прыжке" на одну из команд ADDWF.  Что бы избежать данного недоразумения нужно после компиляции приложения в MPLAB посмотреть как расположилась таблица с данными.  И в случае "неудачного" расположения  сместить таблицу ниже. Для этого можно применить директиву ORG (org     XXXXh), вставив ее перед таблицей данных.

Кроме этого можно сделать программную  защиту от максимального значения регистра W.

На пример как сделано в этой подпрограмме.


Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru