Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1576

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Команда serRd clrRd bsetb

bclr b clc sez clz sen cln sev civ ses els

seh

1cUl

set

! clt

sei

cli

Описание

1 Установить все биты регист­

ра Rd,

Rd — $ff

1 Очистить все биты регистра

Rd,

Rd«- $00

Установить бит b в регистре

SREG,

SREG(b) «- 1

Очистить бит b в регистре

1 SREG,

SREG(b) «- 0

Очистить флаг С,

С <— 0

Установить флаг Z,

Z <— 1

Очистить флаг Z,

Z«— 0

Установить флаг N,

N <— 1

Очистить флаг N,

N <— 0

Установить флаг V,

V <— 1

Очистить флаг V,

V <— 0

Установить флаг S,

S <— 1

Очистить флаг S,

S *— 0

Установить флаг Н,

Н <•— 1

Очистить флаг Н,

Н *— 0

Установить флаг Т,

Т <— 1

Очистить флаг Т,

Т <— 0

Установить флаг I,

I *- 1

I Очистить флаг I,

I <— 0

Окончание табл. 5

Флаги Примеч.

Нет

d = (16-31)

VNZ

SREG(b)

SREG(b)

С

Z

Z

N

N

V

V

S

S

н

н

т

т1

I

I I

Команды преобразования битов позволяют определять значения от­ дельных битов в регистрах общего назначения (с ограничениями, указан­ ными в примечании), в первых 32 регистрах ввода-вывода (0-31) и в реги­ стре состояния SREG. Флаг глобального разрешения прерывания I управ­ ляет всеми аппаратными прерываниями микроконтроллера и может в лю88


бой части программы определять разрешение (команда sei) или запрет (ко­ манда cli) прерываний. Флаг копирования бита Т обеспечивает передачу любого бита одного регистра в любой бит другого (или того же самого) ре­ гистра общего назначения без изменения остальных битов:

bst R12, 4 ;пересылка бита 4 регистра R12 во флаг Т bidR16, 0 ;пересылка флага Те бит 0регистра R16

Команды sbr и cbr по маске К определяют биты в регистре Rd, соответ­ ствующие единичным значениям битов константы К:

cbr R16, ОЬЮЮОПО ;очистка битов 7, 5, 2, 1 в регистре R16 sbr R17, $0f установка 4 младших битов в регистре RI7

Команды sbi и сЫ позволяют задавать значения произвольных битов в регистрах ввода-вывода (0-31), например, sbi PORTC, РСО устанавливает бит 0 регистра PORTC.

4.1.5. Прочие команды

Таблица 6

Команда

Описание

Флаги

Примечание

пор

Нет операции

Нет

sleep

Переход в режим sleep

Нет

wdr

Сброс сторожевого таймера

Нет

Эти команды служат для управления специальными режимами микро­ контроллера. Команда sleep переводит микроконтроллер в состояние покоя (sleep mode) с пониженным энергопотреблением и ограниченным функ­ ционированием его элементов, если в управляющем регистре ввода-вывода MCUCR этот режим разрешен. Команда wdr осуществляет программный сброс сторожевого таймера и используется в контрольных точках програм­ мы, когда работа сторожевого таймера разрешена.

89


4.2. Компилятор ассемблера микроконтроллеров AVR

Компилятор транслирует исходные коды с языка ассемблера в объект­ ный код. Полученный объектный код можно использовать в симуляторе AVR Studio. Компилятор также генерирует код, который может быть непо­ средственно записан в память микроконтроллера. Текст программы для компилятора должен строго соответствовать рассмотренным ниже синтак­ сическим правилам. Приведенные ранее в примерах фрагменты программ соответствуют этим правилам.

Компилятор работает с исходными файлами, содержащими в каждой строке метку, команду или директиву и комментарии. Строка не должна быть длиннее 120 символов. Любая строка может начинаться с метки, ко­ торая является набором символов, заканчивающимся двоеточием. Метки используются для указания места, в которое передаётся управление при пе­ реходах, а также для задания имён переменных. Комментарий имеет сле­ дующую форму:

;[Текст]

Текст после точки с запятой и до конца строки игнорируется компилято­ ром, эти комментарии обычно объясняют назначение и смысл выполняе­ мых операций, что существенно облегчает понимание реализуемых в про­ грамме алгоритмов работы.

Входная строка может иметь одну из четырёх форм (позиции в квадрат­

ных скобках необязательны):

[метка:]

директива

[операнды]

[/Комментарий]

[метка:]

команда

[операнды]

[;Комментарий]

;Комментарий

Пустая строка

Перечень команд с допустимыми операндами (регистры, адреса, кон­ станты или метки) приведен выше. Каждая команда преобразуется ком­

пилятором в соответствующий код операции программы микрокон­ троллера. Мнемоника команд и операндов должна строго соответствовать указанной в описаниях. Текст в приведенных ранее примерах использова­ ния команд составлен в соответствии с требованиями компилятора. Регистр для символов (прописные, строчные) и пробелы для компилятора значения не имеют.

Директивы не транслируются непосредственно в код. Они исполь­ зуются компилятором для указания положения в программной памяти, оп­ ределения макросов, инициализации памяти и т.д. Признаком директивы служит точка перед текстом директивы, например: .CSEG. Ниже дано описание директив компилятора, которые в дальнейшем будут применяться в текстах программ.

Директивы .CSEG, .DSEG, .ESEG указывают соответственно на память программ, память данных, EEPROM (EEPROM), к которым относится дальнейший текст программы (по умолчанию тексты программ предназна90


чены для памяти .CSEG). Эти директивы необходимы в связи с использо­ ванием трех раздельных адресных пространств в памяти микроконтролле­ ров AVR. Вместе с директивой .ORG k определяют конкретные физиче­ ские адреса ячеек памяти для хранения кодов программы:

.CSEG

.ORG $120

проверка старших битов АЦП

more: cpi

г19, $00

brne

repADl

; перейти, если не равно

mov

rl7,rl8

;сдвиг влево для проверки бита 7

Mr 17

brcs

repADl

;перейти, если бит 7 неравен 0

.ORG $090 repADl: nop

В приведенном примере коды будут записаны в памяти программ (.CSEG); метка more и код этой строки записываются по адресу $120, последующие коды - в следующие по порядку ячейки памяти. Вторая директива .ORG $090 указывает, что код, соответствующий метке repADl, компилятор должен разместить по адресу $090.

Директивы .DB (определить байты), .DW (определить слова) позволяют записать в память программ или EEPROM массивы однобайтных или двух­ байтовых констант соответственно. Могут использоваться метки для ссы­ лок на адреса памяти, по которым директивы записывают константы. Вме­ сте с директивой ORG позволяют задавать конкретные физические адреса памяти для хранения констант. Директивы DB и DW должны содержать список констант, разделенных запятыми:

.ESEG

const!: . DB 02, 255, ObOlOWlOl, -128, Охаа

.CSEG

.ORG $380

led:. DW $063/, $4f5b, 6d66, a77d, $0000

91

Массив однобайтовых констант (DB) записан в EEPROM, адреса EEPROM определяются компилятором, адрес первой константы массива (02) соот­ ветствует метке const 1. Массив двухбайтовых констант (DW) записан в па­ мять программ, адрес первой константы ($063f) соответствует метке led и определяется директивой .ORG $380.

Директива .INCLUDE "имя файла" (присоединить файл) позволяет включить в текст программы другие файлы. Например: .INCLUDE "8535def.inc" включает в текст программы файл определения стандартных символических имен регистров и переменных. Этот файл позволяет ис­ пользовать в текстах программ в качестве операндов символические имена, определяемый директивами компилятора DEF, EQU, SET.

Директивы .DEF (установить регистру имя), .EQU (установить имени постоянное значение), .SET (установить имени переменное значение) по­ зволяют установить для компилятора соответствие символьных имен и операндов в текстах программ. Директива .EQU указывает для имени зна­ чение, которое не может быть изменено, а директива .SET допускает изме­ нение этого значения другой директивой. Значения символических имен могут задаваться в виде числовых констант или выражений. Более подроб­ но с правилами записи выражений можно ознакомиться в документации фирмы ATMEL. Примеры применения директив:

.EQU MCUCR=$35

установить постоянное значение

.EQU MCUSR:=S34 ;

для переменной суказанным

.EQU PORF =0

;

символическим именем

.DEF

XL—r26

установить регистру R26 имя XL

.DEF

XH-r27

установить регистру R27 имяХН

Первая директива в данном примере назначает переменной с именем MCUCR постоянное значение шестнадцатеричного числа $35 (в десятич­ ном формате 53), в командах, где требуется указать это значение операнда, можно приводить либо численное значение ($35), либо символическое имя (MCUCR). Например, команды out $35, г26 и out MCUCR, XL абсолютно эквивалентны; в первом варианте для операндов используются их физиче­ ские значения, во втором варианте - их символические имена. Как отмеча­ лось ранее, использование символических имен существенно упрощает мнемонику команд, при подготовке программ гораздо легче работать с именами операндов, чем запоминать большое количество адресов, число­ вых констант и т.п. Целесообразно также использовать стандартные симво92


лические имена, назначаемые специальными файлами для каждой модели микроконтроллера.

Полезными при подготовке текстов программ могут быть директивы

.NOLIST (исключить из листинга), .LIST (включить в листинг). Эти ди­ рективы не содержат операндов и позволяют исключить из листинга про­ граммы текст, находящийся ниже директивы .NOLIST и выше директивы

.LIST. Например, целесообразно исключать из листинга программы файл определения стандартных символических имен 8535def.inc, так как он не содержит исполняемых кодов и занимает в листинге объем нескольких страниц текста.

Компилятор позволяет использовать в тексте программ выражения, ко­ торые могут состоять из операндов, операторов и функций. Формат выра­ жений - 4 байта, т.е. они могут содержать значения переменных, уклады­ вающихся в 4-х байтовый диапазон.

Операндами в выражениях могут быть числа; символические имена, оп­ ределенные директивами .SET и .EQU; метки программы (каждая метка в тексте программы соответствует определенному числу - физическому ад­ ресу памяти); PC - текущее состояние программного счетчика.

Над операндами в выражениях можно выполнять различные математи­ ческие операции, задаваемые операторами. Операторы имеют стандартные для компьютерных приложений обозначения:

арифметические операторы: + , - , * , / ;

операторы сдвига: влево «

, вправо »

;

логические операторы: & ,

&& ,

|,

||,

! ,

Л ;

операторы отношений: = ,

!= ,

<,

<= ,

> ,

>= .

Элементы выражений (операнды с операторами) могут быть заключены в круглые скобки, как и в любых математических преобразованиях.

Выражения могут быть аргументами следующих функций:

LOW(выpaжeниe) - младший байт выражения,

НЮН(выражение) - второй байт выражения,

ВУТЕ2(выражение) то же что и функция HIGH,

ВYTE3(выражение) - третий байт выражения,

ВУТЕ4(выражение) - четвёртый байт выражения,

L\¥ЮЗ(выражение) - биты 0-15 выражения,

Н\^1Ш(выражение) - биты 16-31 выражения,

РАСЕ(выражение) - биты 16-21 выражения,

ЕХР2(выражение) - 2 в степени (выражение),

ЬОС2(выражение) - целая часть 1о§2(выражение).

93