Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
История отрасли методические указания.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

Представление констант в виде алгебраических выражений

Константа, обозначенная в шаблоне операторов как «#», может быть представлена не только непосредственно, но и в виде алгебраического выражения.

Членами такого выражения могут быть:

– константы, представленные непосредственно;

– имена констант, объявленные в секции Constants;

– имена вершин и меток, которые содержат адрес соответствующих мест в памяти программы.

– имена объявленные в секциях SRAM: и EEPROM: переменных с префиксом «@», которые содержат соответствующие адреса памяти;

– имена объявленных в секции Bits: битов регистров с префиксом «@», которые содержат номера этих битов.

В выражении могут быть использованы арифметические операции сложения: «+», вычитания: «–», умножения: «*» и целочисленного деления: «/». Кроме того, возможно использование побитовых логических операций или: «!» и: «&» и исключающего или: «^». Например в операторе:

«[@LCD_Page + 5*3]->r0» (шаблон: «[#]->R»)

«@LCD_Page + 5*3» – константа, представленная алгебраическим выражением.

Возможно построение сложных выражений с использованием круглых скобок.

Микрооператоры

Программирование только с использованием элементарных операций микроконтроллера не всегда удобно. Если, например, необходимо загрузить константу $1234 в двойной регистр X, то придется разбивать ее на старшую и младшую часть и записывать по очереди:

$12->XH

$34->XL

При этом теряется наглядность. Очевидна необходимость иметь возможность записи «$1234->X», а компилятор должен сам разложить такой оператор на составляющие «$12->XL» и «$34->XH». А если константа в десятичном виде, то такая необходимость еще острее.

Кроме того, ряд необходимых действий невозможно реализовать непосредственно элементарными операциями. Например «37->r0» или «$FF->DDRB». В обоих случаях необходимо сначала загрузить константу в какой-либо рабочий регистр из старшей половины, и лишь затем из него копировать в r0 или DDRB.

Шаблоны макрооператоров

Арифметико-логические макрооператоры. (Используется элемент «FIELD»)

Шаблон

Коментарий

* -> *

Копирование

* + *

Арифметическое сложение

* - *

Арифметическое вычитание

* & *

Побитная операция «И»

* ! *

Побитная операция «ИЛИ»

* ^ *

Побитная операция «Исключающее ИЛИ»

*

Сброс (запись нуля)

* ++

Инкремент

* --

Декремент

- * -

Побитная инверсия

- *

Арифметическая инверсия

* >>

Логический сдвиг вправо

> * >>

Логический сдвиг вправо с переносом

± * >>

Арифметический сдвиг вправо

<< *

Логический сдвиг влево

<< * <

Логический сдвиг влево с переносом

* ->

Копирование в стек

-> *

Копирование из стека

Макроусловия. Вписываются в элементы «CONDITION». (Звездочкой (*) обозначены произвольные операнды):

Шаблон

Комметарий

* = *

Переход, если равно

* -= *

Переход, если не равно

* < *

Переход, если меньше

* >= *

Переход, если больше или равно

* ±< *

Переход, если меньше с учетом знака

* ±>= *

Переход, если больше или равно с учетом знака

* --

Декремент и переход, если результат не равен нулю

Операнд

Комментарий

R

Рабочий регистр (...)

#

Константа (...)

SRAM Var

Переменная SRAM (...)

EEPROM Var

Переменная EEPROM (...)

[#]

Ячейка SRAM, адресуемая непосредственно

[X]

Ячейка SRAM, адресуемая косвенно, по X

[--X]

Ячейка SRAM, адресуемая косвенно, по X с предекрементом

[X++]

Ячейка SRAM, адресуемая косвенно, по X с постинкрементом

[Y]

Ячейка SRAM, адресуемая косвенно, по Y

[--Y]

Ячейка SRAM, адресуемая косвенно, по Y с предекрементом

[Y++]

Ячейка SRAM, адресуемая косвенно, по Y с постинкрементом

[Y+#]

Ячейка SRAM, адресуемая косвенно, по Y со смещением адреса на # байт

[Z]

Ячейка SRAM, адресуемая косвенно, по Z

[--Z]

Ячейка SRAM, адресуемая косвенно, по Z с пре-декрементом

[Z++]

Ячейка SRAM, адресуемая косвенно, по Z с пост-инкрементом

[Z+#]

Ячейка SRAM, адресуемая косвенно, по Z со смещением адреса на # байт

P

Регистр ввода-вывода (...)

EE[#]

Ячейка EEPROM адресуемая непосредственно

EE[X]

Ячейка EEPROM, адресуемая косвенно, по X

EE[X++]

Ячейка EEPROM, адресуемая косвенно, по X с пост-инкрементом

EE[Y]

Ячейка EEPROM, адресуемая косвенно, по Y

EE[Y++]

Ячейка EEPROM, адресуемая косвенно, по Y с пост-инкрементом

EE[Z]

Ячейка EEPROM, адресуемая косвенно, по Z

EE[Z++]

Ячейка EEPROM, адресуемая косвенно, по Z с пост-инкрементом