Специальное программное обеспечение микроконтроллеров
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Черноморское Высшее Военно-Морское
училище имени П.С. Нахимова
Дисциплина «Цифровые устройства и микропроцессоры»
Лекция № 26
ТЕМА: СПЕЦИАЛЬНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
МИКРОКОНТРОЛЛЕРОВ
ТЕМА: : СПЕЦИАЛЬНОЕ ПРОГРАММНОЕ
ОБЕСПЕЧЕНИЕ МИКРОКОНТРОЛЛЕРОВ
Цель : получить знания по особенностям системы команд и
специальному программному обеспечению для микроконтроллеров
семейства AVR.
Вопросы
1.Классификация команд микроконтроллера и особенности их
применения.
2.Понятие о языке Ассемблер для микроконтроллеров.
3.Специальные пакеты прикладных программ для работы с МКС.
Литература
1.Курс лекций по дисциплине «Информационно-управляющие
технологии», Севастополь, ЧВВМУ, 2016 г,
лекция № 26
(электронный вариант).
2. Микропроцессорные системы: Уч. пос. / В.Я.Хартов - 2 изд - М.:ИЦ
Академия,2014 - 368с.
3. Шпак Ю.А. Программирование на языке С для AVR и PIC
микроконтроллеров. –СПб.:»КОРОНА-ВЕК», 2011. -544 с.,ил.
2
1. КЛАССИФИКАЦИЯ КОМАНД МИКРОКОНТРОЛЛЕРА И
ОСОБЕННОСТИ
ИХ ПРИМЕНЕНИЯ.
Система команд микроконтроллеров ATMEL семейства AVR
имеет определенные отличия, свойственные всем
микроконтроллера. Одной из отличительных особенностей
микроконтроллеров AVR является то, что почти все команды
выполняются за 1 тактовый цикл. Исключение составляют
команды перехода. Это существенно увеличивает
производительность микроконтроллера даже при относительно
невысокой тактовой частоте.
Все команды можно классифицировать на 5 типов:
1. Арифметические команды.
2. Логические команды.
3. Команды перехода.
4. Команды пересылки (передачи) данных.
5. Побитовые команды и команды тестирования битов.
3
2. КЛАССИФИКАЦИЯ КОМАНД МИКРОКОНТРОЛЛЕРА И
ОСОБЕННОСТИ
ИХ ПРИМЕНЕНИЯ.
Команды пересылки данных не требуют выполнения никаких
операций над операндами. Операнды просто пересылаются
(точнее, копируются) из источника (Source) в приемник
(Destination). Источником и приемником могут быть
внутренние регистры процессора, ячейки памяти или
устройства ввода/вывода. АЛУ в данном случае не
используется.
Арифметические команды выполняют операции сложения,
вычитания, умножения, деления, увеличения на единицу
(инкрементирования),
уменьшения
на
единицу
(декрементирования) и т.д. Этим командам требуется один или
два входных операнда. Формируют команды один выходной
операнд.
4
2. КЛАССИФИКАЦИЯ КОМАНД МИКРОКОНТРОЛЛЕРА И
ОСОБЕННОСТИ
ИХ ПРИМЕНЕНИЯ.
Логические команды производят над операндами логические
операции, например, логическое И, логическое ИЛИ, исключающее
ИЛИ, очистку, инверсию, разнообразные сдвиги (вправо, влево,
арифметический сдвиг, циклический сдвиг). Этим командам, как и
арифметическим, требуется один или два входных операнда, и
формируют они один выходной операнд.
Команды переходов предназначены для изменения обычного порядка
последовательного выполнения команд. С их помощью организуются
переходы на подпрограммы и возвраты из них, всевозможные циклы,
ветвления программ, пропуски фрагментов программ и т.д. Команды
переходов всегда меняют содержимое счетчика команд. Переходы
могут быть условными и безусловными. Именно эти команды
позволяют строить сложные алгоритмы обработки информации.
5
2. КЛАССИФИКАЦИЯ КОМАНД МИКРОКОНТРОЛЛЕРА И
ОСОБЕННОСТИ
ИХ ПРИМЕНЕНИЯ.
Команды работы с битами
Особую группу команды микроконтроллеров составляют
команды для работы с битами. Эта группа команд позволяет
обращаться (читать состояние, сбрасывать в 0, устанавливать в
1, инвертировать и т.д.) отдельные биты регистров
микроконтроллера. Наличие таких команд связано с
относительной ограниченностью аппаратных ресурсов МК и
необходимостью
точечного
управления
имеемыми
аппаратными средствами при минимальном количестве команд
обращения к аппаратным средствам.
Системные команды осуществляют разрешение (EI) или
запрещение (DI) внешних прерываний, формируют пустую
операцию NOP (например для временной задержки),
останавливают процессор ( операция HLT).
6
2.Понятие о языке Ассемблер для микроконтроллеров
Ассемблер – это инструмент, с помощью которого создаётся
программа для микроконтроллера. Ассемблер транслирует
ассемблируемый исходный код программы в объектный код,
который может использоваться в симуляторах или эмуляторах
AVR. Также ассемблер генерирует код, который может быть
непосредственно
введен
в
программную
память
микроконтроллера.
При работе с ассемблером нет никакой необходимости в
непосредственном соединении с микроконтроллером.
Исходный файл, с которым работает ассемблер, должен
содержать мнемоники, директивы и метки.
7
2.Понятие о языке ассемблер для микроконтроллеров.
Перед каждой строкой программы можно ставить метку,
которая
является
алфавитно-цифровой
строкой,
заканчивающейся двоеточием. Метки используются как указания
для безусловного перехода и команд условного перехода.
Строка программы может быть в одной из четырёх форм:
[ Метка:] директива [операнды] [Комментарий]
[ Метка:] команда [операнды] [Комментарий]
Комментарий
Пустая строка
Примечение: Символы квадратной скобки […]означают, что
использование элемента необязательно.
Комментарий имеет следующую форму:
; [Текст]
Таким образом любой текст после символа “ ; ” игнорируется
ассемблером и имеет значение только для пользователя.
8
2.Понятие о языке ассемблер для микроконтроллеров.
Таким образом любой текст после символа “ ; ” игнорируется
ассемблером и имеет значение только для пользователя.
Операнды можно задавать в различных форматах:
- десятичный: 10, 255
- шестнадцатеричный (два способа): 0х1а или $1а
- двоичный:
0b00001010, 0b11111111
- восьмеричный: 010, 077
9
2.Понятие о языке ассемблер для микроконтроллеров.
•Директивы ассемблера
•Ассемблер поддерживает множество директив. Директивы не
транслируются непосредственно в коды операции. Напротив, они
используются,
чтобы
корректировать
местоположение
программы
в
памяти,
определять
макрокоманды,
инициализировать память и так далее. То есть это указания
самому ассемблеру, а не команды микроконтроллера.
10
ДИРЕКТИВЫ АССЕМБЛЕРА.
Директива
Описание
BYTE
Зарезервировать байт под переменную
CSEG
Сегмент кодов
DB
Задать постоянным(и) байт(ы) в памяти
DEF
Задать символическое имя регистру
DEVICE
Задать для какого типа микроконтроллера компилировать
DSEG
Сегмент данных
DW
Задать постоянное(ые) слово(а) в памяти
EQU
Установите символ равный выражению
ESEG
Сегмент EEPROM
EXIT
Выход из файла
INCLUDE
Включить исходный код из другого файла
LIST
Включить генерацию .lst - файла
NOLIST
Выключить генерацию .lst - файла
ORG
Начальный адрес программы
SET
Установите символ равный выражению
11
СИНТАКСИС ДИРРЕКТИВ АССЕМБЛЕРА
.<директива>
Перед директивой должна стоять точка. Иначе ассемблер
воспринимает это как метку.
.CSEG - Code segment
Директива CSEG указывает на начало сегмента кодов.
Ассемблируемый файл может иметь несколько кодовых сегментов,
которые будут объединены в один при ассемблировании.
Синтаксис:
.CSEG
Пример:
.DSEG
; Начало сегмента данных
vartab: .BYTE 4
; Резервируется 4 байта в СОЗУ
.CSEG
; Начало сегмента кодов
const: .DW 2
; Записать 0x0002 в программной памяти
mov r1,r0
; Что-то делать
12
2.Понятие о языке ассемблер для микроконтроллеров.
Особенности программирования на Ассемблере
Память данных почти полностью доступна программе
пользователя и большинство команд ассемблера предназначено для
обмена данными с ней. Команды пересылки данных предоставляют
возможность непосредственной и косвенной адресации ячеек СОЗУ,
непосредственной адресации регистров ввода/вывода и регистров
общего назначения. Так как каждому регистру сопоставлена ячейка
памяти, то обращаться к ним можно не только командами адресации
регистров, но и командами адресации ячеек СОЗУ.
Например, команда:
MOV R10,R15 ; скопировать регистр R15 в регистр R10 делает
; абсолютно то же самое, что и команда:
LDS R10,$0015 ; загрузить в регистр R10 содержимое ячейки с
; адресом $0015
13
3.Специальные пакеты прикладных программ для
работы с микроконтроллерными системами.
Почти каждая фирма - производитель микроконтроллеров
разрабатывает интегрированную среду для разработки
программного
обеспечения
микроконтроллеров
своего
производства. Как правило, эти среды весьма схожи и
выполнены по принципу интерфейса в виде Windows-подобных
систем.
Рассмотрим такую среду на примере среды AVR Studio —
интегрированная среда разработки (IDE) для разработки 8- и
32-битных AVR приложений от компании Atmel, работающая в
операционных системах Windows NT/2000/XP/Vista/7/8.
AVR Studio содержит компилятор C/C++ и симулятор,
позволяющий отследить выполнение программы. Текущая
версия поддерживает все выпускаемые на сегодняшний день
контроллеры AVR и средства разработки. AVR Studio содержит
в себе менеджер проектов, редактор исходного кода,
14
ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ
Характеристики AVR Studio:
Интегрированный компилятор Ассемблер и C/C++;
Интегрированный симулятор;
При помощи плагина возможна поддержка компилятора GCC в
виде сборки WinAVR;
Поддержка инструментов Atmel, совместимых с 8-разрядной
AVR архитектурой, в том числе AVR ONE!, JTAGICE mkI,
JTAGICE mkII, AVR Dragon, AVRISP, AVR ISPmkII, AVR
Butterfly, STK500 и STK600;
15
ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ.
РАБОЧЕЕ ОКНО AVR STUDIO 4.0
2
1
4
3
– окно проекта «Project». Здесь отображается структура проекта, которая
содержит его имя и список подключенных файлов и библиотек ( окно «1»);
– центральная рабочая область, в которой осуществляется непосредственно
набор программы (окно «2»);
– окно текущих сообщений «built» программы (окно «3»);
– окно регистров микроконтроллера «I/O View» (окно «4»).
16
ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ.
СОЗДАНИЕ ПРОЕКТА.
17
ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ.
ПРИМЕР СОЗДАНИЯ ПРОГРАММЫ.
;---------------------------------------------------------------;Пробная программа для микроконтроллера ATMEGA32
;Входы: PORTB0
;Выходы: PORTC0...PORTC7
.include "m32def.inc" ;подключение библиотеки контроллера
.cseg
;начало сегмента кода
.org 0
reset:
ldi r16,0xFF
out DDRC,r16
clr r16
out DDRB,r16
main:
sbis PINB,0
rjmp PINB0_is_0
ldi r16,0xAA
out PORTC,r16
rjmp main
;назначение PORTC на вывод
;назначение PORTB на ввод
;если на PINB0=0, то
;переход на "PINB0_is_0"
;иначе вывод на PORTC числа 0xAA (1010 1010)
;далее – возврат на main
PINB0_is_0:
;PINB0=0
ldi r16,0x55
;вывод на PORTC числа 0x55 (0101 0101)
out PORTC,r16
rjmp main
;далее – возврат на main
;-----------------------------------------------------------------
18