[an error occurred while processing this directive] [an error occurred while processing this directive]
Всем знатокам и любителям PICов
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Bill 16 мая 2002 г. 10:19

Возможно найдутся желающие полмать свои головы над решением следующей задачи, которая достаточн часто встречается в практике. Задача состоит в следующем:
Требуется организовать ветвление в программе на основании значения некоторой переменной (назовем ее Var). Стандартный прием заключается в последовательном сравнении данной переменной с набором констант и переход происходит при совпадении этой переменной с какой-то константой. При несовпадении - выполняется сравнение переменной со следующей костантой и т.д. Проблема заключается в том, что в PICах отсутствуют инструкции неразрушающего сравнения и последнее выполняется с помощью инструкции XORLW, при этом содержимое W регистра разрушается и для выполнения последущих проверок его необходимо каждый раз перезагружать. Код программы может быть примерно таким:
movwf Var ; Загрузить Var
xorlw 'A' ; Это символ A
bz Lab1 ; Переход если ДА

movwf Var ; Перезагрузка Var???????
xorlw '3' ; Это символ 3
bz Lab2 ; Переход если ДА

movwf Var ; Перезагрузка Var???????
xorlw 0x03 ; Это символ 3
bz Lab3 ; Переход если ДА

и т.д.
Весь фокус состоит в том, что инструкции перезагрузки совершенно ненужны и их можно исключить, если немножко модифицировать код. Как это сделать? Решение есть но только (повторяю) для сравнения с константами. Огранчений на величины констант и порядок сравнения нет. Если у кого-то уже есть решение - поделитесь, please.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru