Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Проверка функционирования программы




Тумблер «Режим» нужно переключить в положение «Работа». Кнопками и тумблерами, в зависимости от запрограммированной задачи, даются необходимые команды, и визуально контролируется работа программы.

Если в работе обнаружены ошибки, то студент вносит необходимые коррективы в свою программу. Вновь повторяются процедуры компиляции, исправления возможных ошибок, записи программы в микроконтроллер и проверка функционирования программы. Лабораторная работа выполнена, если программа выполняет все заданные функции.

Для проверки работоспособности программы управления виртуальным объектом после компиляции и записи программы в контроллер студент должен перевести тумблер «Режим» в положение «Авт». После этого у преподавателя появляется окно выбора виртуального объекта. Преподаватель должен выбрать соответствующий варианту студента объект, а затем переключить управление в режим «От контроллера». Кнопками и тумблерами, в зависимости от задачи, даются необходимые команды, и визуально контролируется работа механизмов. Если в работе обнаружены отклонения от данной последовательности, студент корректирует свою программу и аналогичным образом проверяет ее работоспособность. Для возврата к редактированию преподаватель закрывает окно с виртуальным объектом, после чего студенту необходимо перевести тумблер «Режим» в положение «Ред». При работе с комплексом нельзя одновременно запускать больше одного виртуального объекта.

 


АССЕМБЛЕР AVR-МИКРОКОНТРОЛЛЕРОВ

Особенности ассемблера

Здесь представлена основная информация по ассемблеру всей серии AVR, т.к. все микроконтроллеры этой серии программно совместимы.

Ассемблер – это инструмент, с помощью которого создаётся программа для микроконтроллера. Ассемблер транслирует ассемблируемый исходный код программы в объектный код, который может быть непосредственно введен в программную память микроконтроллера, а также использоваться в симуляторах или эмуляторах AVR.

При работе с ассемблером нет никакой необходимости в непосредственном соединении с микроконтроллером.

Исходный файл, с которым работает ассемблер, должен содержать мнемоники, директивы и метки.

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

Строка программы может быть в одной из четырёх форм:

[Метка:] директива [операнды] [Комментарий]

[Метка:] команда [операнды] [Комментарий]

Комментарий

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

Комментарий имеет следующую форму:

; [Текст]

Таким образом любой текст после символа «;» игнорируется ассемблером и имеет значение только для пользователя.

Операнды можно задавать в различных форматах:

– десятичный (по умолчанию): 10,255

– шестнадцатеричный (два способа): 0x0а, $0а

– двоичный: 0b00001010, 0b11111111

– восьмеричный (впереди ноль): 010, 077

Директивы ассемблера

Ассемблер поддерживает множество директив. Директивы не транслируются непосредственно в коды операции. Напротив, они используются, чтобы корректировать местоположение программы в памяти, определять макрокоманды, инициализировать память и так далее. То есть это указания самому ассемблеру, а не команды микроконтроллера.

Директивы соответствуют второй версии компилятора ассемблера avrasm2.exe компании «Atmel».

Директивы ассемблера приведены в таблице 8.

Синтаксис всех директив следующий:

.[директива]

То есть перед директивой должна стоять точка. Иначе ассемблер воспринимает это как метку.

Таблица 8. Директивы ассемблера

Директива Описание
BYTE Зарезервировать байт под переменную
CSEG Сегмент кодов
DB Задать постоянным(и) байт(ы) в памяти
DEF Задать символическое имя регистру
DEVICE Задать для какого типа микроконтроллера компилировать
DSEG Сегмент данных
DW Задать постоянное(ые) слово(а) в памяти
EQU Установить символ равный выражению
ESEG Сегмент EEPROM
EXIT Выход из файла
INCLUDE Включить исходный код из другого файла
LIST Включить генерацию.lst - файла
NO.LIST Выключить генерацию.lst - файла
ORG Начальный адрес программы
SET Установить символ, равный выражению

 

Дадим несколько пояснений наиболее важным директивам ассемблера.

Директива CSEG указывает на начало сегмента кодов. Ассемблируемый файл может иметь несколько кодовых сегментов, которые будут объединены в один при ассемблировании. Синтаксис:

.CSEG

Пример:

.DSEG; Начало сегмента данных

vartab:.BYTE 4; Резервируется 4 байта в ОЗУ

.CSEG; Начало сегмента кодов

const:.DW 2; Записать 0x0002 в программной памяти

mov r1,r0; Что-то делать

 

Директива DSEG указывает на начало сегмента данных. Ассемблируемый файл может содержать несколько сегментов данных, которые потом будут собраны в один при ассемблировании. Обычно сегмент данных состоит лишь из директив BYTE и меток. Синтаксис:

.DSEG

Пример:

.DSEG; Начало сегмента данных

varl:.BYTE 1; Резервировать 1 байт под переменную varl

table:.BYTE tab_size; Резервировать tab_size байтов.

.CSEG

ldi r30,low(var1)

ldi r31,high(var1)

ld r1,Z

 

Директива ESEG указывает на начало сегмента EEPROM памяти.

Ассемблируемый файл может содержать несколько EEPROM сегментов, которые будут собраны в один сегмент при ассемблировании. Обычно сегмент EEPROM состоит из DB и DW директив (и меток). Сегмент EEPROM памяти имеет свой собственный счетчик. Директива ORG может использоваться для размещения переменных в нужной области EEPROM. В данной версии комплекса программирование EEPROM может осуществляться только непосредственно из программы учащегося. Прямое программирование в процессе прошивки не предусмотрено.

Синтаксис:

.ESEG

Пример:

.DSEG; Начало сегмента данных

varl:.BYTE 1; Резервировать 1 байт под переменную varl

table:.BYTE tab_size; Зарезервировать tab_size байт

.ESEG

eevarl:.DW 0xffff; Записать 1 слово в EEPROM

 

Директива ORG присваивает значения локальным счетчикам. Используется только совместно с директивами.CSEG,.DSEG,.ESEG.

Синтаксис:

.ORG адрес

Пример:

.DSEG; Начало сегмента данных

.ORG 0x37; Установить адрес ОЗУ на 37h

variable:.BYTE 1; Зарезервировать байт СОЗУ по адресу 37h

.CSEG

.ORG 0x10; Установить счетчик команд на адрес 10h

mov r0,rl; Чего-нибудь делать

 

Директива DB резервирует ресурсы памяти (байты) в программной памяти или в EEPROM. Директиве должна предшествовать метка. DB задает список выражений и должна содержать по крайней мере одно выражение. Размещать директиву следует в сегменте кодов или в EEPROM сегменте.

Список выражений представляет собой последовательность выражений, разделенных запятыми. Каждое выражение должно быть величиной между
–128 и 255.

Если директива указывается в сегменте кодов и список выражений содержит более двух величин, то выражения будут записаны так, что 2 байта будут размещаться в каждом слове Flash-памяти.

Синтаксис:

LABEL:.DB список выражений

Пример:

.CSEG

сonsts:.DB 0, 255, 0b01010101, -128, 0хаа

.ESEG

const2:.DB 1,2,3

 

Директива DW резервирует ресурсы памяти (слова) в программной памяти или в EEPROM. Директиве должна предшествовать метка. DW задает список выражений и должна содержать по крайней мере одно выражение. Размещать директиву следует в сегменте кодов или в EEPROM сегменте.

Список выражений представляет собой последовательность выражений, разделенных запятыми. Каждое выражение должно быть величиной между
–32768 и 65535.

Синтаксис:

LABEL:.DW список выражений

Пример:

.CSEG

varlist:.DW 0, 0xffff, 0b1001110001010101, -32768, 65535

.ESEG

eevarlst:.DW 0, 0xffff, 10

 

Директива DEF позволяет присвоить символическое имя регистру. Регистр может иметь несколько символических имен.

Синтаксис:

.DEF Имя = Регистр

Пример:

. DEF temp=R16.DEF ior=R0

.CSEG

ldi temp,0xf0; Загрузить 0xf0 в регистр temp

in ior,0x3f; Прочитать SREG в регистр ior

eor temp, ior

 

Директива EQU присваивает значение метке. Эта метка может быть использована в других выражениях. Значение этой метки нельзя изменить или переопределить.

Синтаксис:

.EQU метка = выражение

Пример:

.EQU io_offset = 0x23

.EQU porta = io_offset + 2

.CSEG; Начало сегмента кодов

clr r2; Очистить регистр r2

out porta,r2; Записать в порт А

 

Директива INCLUDE предлагает Ассемблеру начать читать из другого файла. Ассемблер будет ассемблировать этот файл до конца файла или до директивы EXIT. Включаемый файл может сам включать директивы INCLUDE.

Синтаксис:

.INCLUDE "имя файла"

Пример:

; iodefs.asm:

.EQU sreg = 0x3f; Регистр статуса

.EQU sphigh = 0хЗе; Старший байт указателя стека.

.EQU splow = 0x3d;; Младший байт указателя стека.

; incdemo.asm

.INCLUDE iodefs.asm; Включить файл «iodefs.asm»

in r0,sreg; Прочитать регистр статуса

 

EXIT – выйти из файла.

Директива EXIT позволяет ассемблеру остановить ассемблирование текущего файла. Обычно ассемблер работает до конца файла. Если он встретит директиву EXIT, то продолжит ассемблировать со строки, следующей за директивой INCLUDE.

Синтаксис:

.EXIT

Пример:

.EXIT; выйти из этого файла

 

DEVICE – указать, для какого микроконтроллера ассемблировать.

Директива позволяет пользователю сообщить ассемблеру, для какого типа устройства пишется программа. Если ассемблер встретит команду, которая не поддерживается указанным типом микроконтроллера, то будет выдано сообщение. Также сообщение появится в случае, если размер программы превысит объем имеющейся в этом устройстве памяти.

Синтаксис:

.DEVICE AT90S1200 |AT90S2313 | AT90S2323 | AT90S2333 | AT90S2343 | AT90S4414 | AT90S4433 | AT90S4434 | AT90S8515 | AT90S8534 | AT90S8535 | ATtinyl1 | ATtinyl2 | ATtiny22 |

ATmega64 | ATmega128| Atmega8535

Пример:

.DEVICE АТmega8535; использовать АТmega8535

.CSEG

.ORG 0000

jmp label1; При ассемблировании появится сообщение, что

; ATmega8535 не поддерживает команду jmp в

; таблице векторов прерываний

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...