Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 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