- •Кузнецов в.Н., Лисютченков с.Н. Цифровые и микропроцессорные устройства
- •Часть 3
- •220301– Автоматизация технологических процессов и производств
- •Содержание
- •Предисловие
- •Лабораторная работа №1 «Освоение среды разработки vmlab 3.12»
- •1.2 Теоретическое введение
- •1.2.1 Общие сведения
- •1.2.2 Среда разработки vmlab
- •1.2.3 Описание пользовательского интерфейса
- •1.2.4 Команды меню
- •Save All − сохранить все файлы Save As − сохранить файл текущего окна под новым именем
- •1.2.5 Доступные окна
- •1.2.6 Аппаратные компоненты
- •1.2.7 Формат программы на ассемблере
- •1.3 Порядок выполнения лабораторной работы
- •1.3.1 Создание нового проекта
- •1.3.2 Редактирование файла ассемблера
- •1.3.3 Ассемблирование и выполнение программы
- •1.4 Задание на лабораторную работу
- •1.5 Контрольные вопросы
- •1.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №2 «Изучение микроконтроллера aTmega128 и основы программирования»
- •2.2.1 Общие сведения о микроконтроллере aTmega128
- •Регистры ввода/вывода (рвв)
- •Организация памяти
- •Внешние прерывания
- •2.2.9 Директивы транслятора ассемблера
- •2.2.10 Выражения
- •2.2.11 Операнды
- •2.2.12 Функции
- •2.2.13 Операции
- •2.3 Порядок выполнения лабораторной работы
- •2.4 Задание на лабораторную работу
- •Задание для индивидуальной работы
- •2.5 Контрольные вопросы
- •2.6 Содержание отчета по лабораторной работе
- •3.2.2 Адресация в микроконтроллере
- •3.2.3 Команды пересылки данных
- •Mov Rd,Rr(пересылка между рон) – копирует содержимое регистра Rrв регистр Rd. Регистр-источник Rrне изменяется.
- •3.2.4 Команды передачи управления
- •3.3 Порядок выполнения лабораторной работы
- •3.4 Задание на лабораторную работу
- •3.5 Контрольные вопросы
- •3.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №4 «Выполнение арифметических операций»
- •4.2 Теоретическое введение
- •4.3 Порядок выполнения лабораторной работы
- •4.4 Задание на лабораторную работу
- •4.5 Контрольные вопросы
- •4.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №5 «Изучение логических операций»
- •5.2 Теоретическое введение
- •Управление энергопотреблением и режимы сна.
- •5.3 Порядок выполнения лабораторной работы
- •5.4 Задания на лабораторную работу
- •5.5 Контрольные вопросы
- •5.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №6 «Изучение портов ввода/вывода и их программирование»
- •6.2 Теоретическое введение
- •6.2.1 Общие сведения
- •6.2.2 Порты в качестве универсального цифрового ввода-вывода
- •6.2.3 Настройка выводов
- •6.2.4 Неподключенные выводы
- •6.2.5 Альтернативные функции порта
- •6.2.5.1 Альтернативные функции порта a
- •6.2.5.2 Альтернативные функции порта в
- •6.2.5.3 Альтернативные функции порта c
- •6.2.5.4 Альтернативные функции порта d.
- •6.2.5.5 Альтернативные функции порта e
- •6.2.5.6 Альтернативные функции порта f
- •6.2.5.1 Альтернативные функции порта g
- •6.2.6 Описание регистров портов ввода-вывода
- •6.2.7 Обращение к портам ввода/вывода
- •6.3 Порядок выполнения лабораторной работы на симуляторе
- •6.4 Задание на лабораторную работу
- •Задания для индивидуальной работы
- •Контрольные вопросы
- •6.6 Содержание отчета по лабораторной работе
- •Лабораторная работа №7.
- •7.2.1 Общие сведения о Память
- •7.2.2 Статическое озу памяти данных
- •7.2.3 Организация памяти
- •7.2.4 Запоминающее устройство sram
- •7.2.5 Временная диаграмма доступа к памяти
- •7.3 Память данных на эсппзу
- •7.3.1 Чтение и запись эсппзу
- •7.3.2 Адресные регистры эсппзу
- •Порядок выполнения
- •7.4 Память ввода-вывода
- •Порядок выполнения
- •Порядок выполнения
- •7.5 Задание на лабораторную работу
- •Задание для индивидуальной работы
- •7.6 Контрольные вопросы
- •7.7 Содержание отчета по лабораторной работе
- •Генерация тактовых импульсов
- •Инициализация усапп
- •8.2.2 Передача данных - Передатчик усапп
- •8.2.3 Прием данных - Приемник усапп
- •Асинхронный прием данных
- •8.2.4 Многопроцессорный режим связи
- •8.2.5 Описание регистров усапп
- •8.2.6 Последовательный периферийный интерфейс - spi
- •8.2.7 Функционирование вывода ss
- •8.2.8 Связь двух мк
- •8.3 Задание на лабораторную работу
- •Задание для индивидуальной работы
- •8.6 Контрольные вопросы
- •Лабораторная работа №9 «Изучение принципа работы таймеров/счетчиков микроконтроллера»
- •9.2 Теоретическое введение
- •9.2.1 Общие сведения о таймерах/счетчиках
- •9.2.2 Назначение выводов таймеров/счетчиков
- •9.2.5 Выбор источника тактового сигнала
- •9.2.6 Режим таймера
- •9.2.7 Функция захвата (Capture)
- •9.2.8 Функция сравнения (Compare)
- •9.2.9 Режим шим
- •9.2.10 Сторожевой таймер
- •9.2.11 Общие сведения о работе клавиатуры
- •9.2.12 Ввод кода нажатой клавиши
- •9.2.13 Сканирование и идентификация
- •Листинг проектного файла №9
- •На эмуляторе
- •9.4 Задание на лабораторную работу
- •Задания для индивидуальной работы
- •9.5 Контрольные вопросы
- •10.2.2 Функционирование модуля ацп
- •10.2.3 Принцип действия
- •10.2.4 Каналы дифференциального усиления
- •10.2.5 Изменение канала или выбор опорного источника
- •10.2.6 Входные каналы ацп
- •10.2.7 Источник опорного напряжения ацп
- •10.2.8 Повышение точности преобразования
- •10.2.9 Методы компенсации смещения
- •10.2.10 Описание получения результата преобразования
- •10.2.5 Параметры ацп
- •10.2 Порядок выполнения работы на симуляторе
- •На эмуляторе
- •10.3 Задание на лабораторную работу
- •Задания для индивидуальной работы
- •10.4 Контрольные вопросы
- •Приложение
- •Список литературы
1.4 Задание на лабораторную работу
В лабораторной работе необходимо ознакомиться с теоретической частью, разобраться с предложенной программой и отладить программу в среде разработки VMLAB. В соответствии с вариантом необходимо выполнить задание, приведенное в таблице 1.1.
Таблица 1.1
|
№ Варианта |
Задание |
|
1 |
Организовать счетчик |
|
2 |
Организовать программно временную задержку |
|
3 |
Организовать временную задержку с помощью таймера |
|
4 |
Изменить знак числа |
|
5 |
Определить модуль числа |
|
6 |
Организовать проверку числа на четность |
|
7 |
Произвести сложение |
|
8 |
Произвести вычитание |
|
9 |
Определить максимальное из двух положительных чисел |
|
10 |
Произвести умножение однобайтных целых чисел без знака |
|
11 |
Произвести деление однобайтных целых чисел без знака |
|
12 |
Вычислить булеву функцию переменных |
|
13 |
Организовать маскирование |
|
14 |
Произвести подсчет импульсов |
1.5 Контрольные вопросы
Из каких этапов состоит создание прикладных программ?
Какие отличия между симулятором и эмулятором?
Для чего предназначена среда разработки VMLAB? Какими возможностями обладает VMLAB?
Что представляет из себя пользовательский интерфейс VMLAB?
Как создать новый проект?
Для чего предназначен файл проекта?
Для чего предназначен файл кодов?
Что показывает окно периферийных устройств?
Для чего предназначено окно сообщений?
Для чего предназначено окно Watch. На сколько секций поделено и для чего они необходимы?
Какой формат программы на ассемблере?
Что входит в окно регистров и флагов. Как изменить содержимое окна?
Какие окна есть у среды разработки VMLAB?
Где и как можно определить осциллограф?
Какие основные аналоговые компоненты вы знаете?
Для чего нужно ассемблирование программы?
1.6 Содержание отчета по лабораторной работе
Краткое теоретическое введение.
Алгоритм и блок схема программы самостоятельного задания.
Листинг программы и проектного файла с комментариями.
Выводы по лабораторной работе.
Лабораторная работа №2 «Изучение микроконтроллера aTmega128 и основы программирования»
2.1 Цель работы: Обзор архитектуры микроконтроллера ATmega128, а также написание программ на языке программирования ассемблер.
2.2.1 Общие сведения о микроконтроллере aTmega128
ATmega128 – маломощный 8-разрядный КМОП микроконтроллер, основанный на расширенной AVR RISC-архитектуре. За счет выполнения большинства инструкций за один машинный цикл ATmega128 достигает производительности 1 млн. операций в секунду/МГц, что позволяет проектировщикам систем оптимизировать соотношение энергопотребления и быстродействия. Ядро AVR сочетает богатый набор инструкций с 32 универсальными рабочими регистрами. Все 32 регистра общего назначения (РОН) непосредственно подключены к арифметико-логическому устройству (АЛУ), который позволяет указать два различных регистра в одной инструкции и выполнить ее за один цикл. Данная архитектура обладает большей эффективностью кода за счет достижения производительности в 10 раз выше по сравнению с обычными CISC-микроконтроллерами.
ATmega128 содержит следующие элементы: 128 кбайт внутрисистемно программируемой флэш-памяти с поддержкой чтения во время записи, 4 кбайт ЭСППЗУ, 4 кбайт статического ОЗУ, 53 линии универсального ввода-вывода, 32 универсальных рабочих регистра, счетчик реального времени (RTC), четыре гибких таймера-счетчика с режимами сравнения и ШИМ (широтно-импульсной модуляции), 2 УСАПП (универсальный синхронный и асинхронный последовательный приемопередатчик), двухпроводной последовательный интерфейс ориентированный на передачу байт, 8-канальный 10-разрядный аналого-цифровой преобразователь (АЦП) с опциональным дифференциальным входом с программируемым коэффициентом усиления, программируемый сторожевой таймер с внутренним генератором, последовательный порт SPI, испытательный интерфейс JTAG совместимый со стандартом IEEE 1149.1, который также используется для доступа к встроенной системе отладке и для программирования, а также шесть программно выбираемых режимов уменьшения мощности. Режим холостого хода (Idle) останавливает центральное процессорное устройство (ЦПУ), но при этом поддерживая работу статического ОЗУ, таймеров-счетчиков, SPI-порта и системы прерываний. Режим выключения (Powerdown) позволяет сохранить содержимое регистров, при остановленном генераторе и выключении встроенных функций до следующего прерывания или аппаратного сброса. В экономичном режиме (Power-save) асинхронный таймер продолжает работу, позволяя пользователю сохранить функцию счета времени в то время, когда остальная часть контроллера находится в состоянии сна. Режим снижения шумов АЦП (ADC Noise Reduction) останавливает ЦПУ и все модули ввода-вывода, кроме асинхронного таймера и АЦП для минимизации импульсных шумов в процессе преобразования АЦП. В дежурном режиме (Standby) кварцевый/резонаторный генератор продолжают работу, а остальная часть микроконтроллера находится в режиме сна. Данный режим характеризуется малой потребляемой мощностью, но при этом позволяет достичь самого быстрого возврата в рабочий режим. В расширенном дежурном режиме (Extended Standby) основной генератор и асинхронный таймер продолжают работать. Микроконтроллер производится по технологии высокоплотной энергонезависимой памяти компании Atmel. Встроенная внутрисистемно программируемая флэш-память позволяет перепрограммировать память программ непосредственно внутри системы через последовательный интерфейс SPI с помощью простого программатора или с помощью автономной программы в загрузочном секторе. Загрузочная программа может использовать любой интерфейс для загрузки прикладной программы во флэш-память. Программа в загрузочном секторе продолжает работу в процессе обновления прикладной секции флэш-памяти, тем самым поддерживая двухоперационность: чтение во время записи. За счет сочетания 8-разрядного RISC ЦПУ с внутрисистемно самопрограммируемой флэш-памятью в одной микросхеме ATmega128 является мощным микроконтроллером, позволяющим достичь высокой степени гибкости и эффективной стоимости при проектировании большинства приложений встроенного управления.
ATmega128 поддерживается полным набором программных и аппаратных средств для проектирования, в т.ч.: Си-компиляторы, макроассемблеры, программные отладчики/симуляторы, внутрисистемные эмуляторы и оценочные наборы.

Рис. 2.1 Функциональная схема
Краткий обзор архитектуры

Рис. 2.2 Функциональная схема архитектуры AVR
АЛУ – арифметико-логическое устройство
Высокопроизводительное АЛУ AVR-микроконтроллеров работает в непосредственной связи со всеми 32 универсальными рабочими регистрами. АЛУ позволяет выполнить за один машинный цикл операцию между двумя регистрами или между регистром и константой. Операции АЛУ могут быть классифицированы на три группы: арифметические, логические и битовые. Кроме того, архитектурой ATmega128 поддерживаются операции умножения со знаком и без знака и дробным форматом.
Регистр статуса
Регистр статуса содержит информацию о результате только что выполненной арифметической инструкции. Данная информация может использоваться для ветвления программы по условию. Следует понимать, что регистр статуса обновляется после выполнения всех операций АЛУ в объеме, предусмотренном для каждой конкретной инструкции. Флаги этого регистра в большинстве случаев позволяют отказаться от использования инструкций сравнения, делая код программы более компактным и быстрым.
Обратите внимание, что состояние регистра статуса автоматически не запоминается при вызове процедуры обработки прерываний и не восстанавливается при выходе из нее. Это необходимо выполнить программно.
Регистр статуса SREG AVR-микроконтроллера имеет следующую структуру:

Рис. 2.3 Регистр статуса SREG
Разряд 7 – I: Общее разрешение прерываний
Бит общего разрешения прерываний используется для активизации работы системы прерываний. Разрешение отдельных прерываний осуществляется в соответствующих управляющих регистрах. Если бит общего разрешения прерываний сбросить, то ни одно из прерываний не будет активным независимо от их индивидуальной конфигурации. Бит I сбрасывается в 0 аппаратно после генерации запроса на прерывание, а после выполнения инструкции возврата из прерывания RETI снова устанавливается к 1 для выполнения последующих прерываний. Бит I может также сбрасываться и устанавливаться с помощью инструкций CLI и SEI, соответственно.
Разряд 6 – T: Хранение копируемого бита
Специальные битовые операции BLD (копирование из Т-бита) и BST (копирование в Т-бит) используют в качестве источника и получателя данных бит T. Любой бит из регистрового файла может быть скопирован в бит T инструкцией BST, а также содержимое бита Т может быть скопировано в любой бит регистрового файла с помощью инструкции BLD.
Разряд 5 – H: Флаг половинного переноса
Данный флаг устанавливается при выполнении некоторых арифметических инструкций и индицирует о возникновении половинного переноса. Как правило, половинный перенос широко используется в двоично-десятичной арифметике. Более подробная информация приведена в описании набора инструкций.
Разряд 4 – S: бит знака
Бит S – результат выполнения логической операции исключающего ИЛИ между флагом отрицательного результата N и флагом переполнения двоичного дополнения V. Более подробная информация приведена в описании набора инструкций.
Разряд 3 – V: Флаг переполнения двоичного дополнения
Флаг переполнения двоичного дополнения V поддерживает арифметику с двоичным дополнением. Более подробная информация приведена в описании набора инструкций.
Разряд 2 – N: Флаг отрицательного результата
Флаг отрицательного результата N индицирует, что результатом выполнения арифметической или логической операции является отрицательное значение. Более подробная информация приведена в описании набора инструкций.
Разряд 1 – Z: Флаг нулевого результата
Флаг нулевого результата Z индицирует, что результатом выполнения арифметической или логической операции является ноль. Более подробная информация приведена в описании набора инструкций.
Разряд 0 – C: Флаг переноса
Флаг переноса C индицирует о возникновении переноса в результате выполнения арифметической или логической операции. Более подробная информация приведена в описании набора инструкций.
Регистр выбора Z-страницы

Рис. 2.4 Регистр выбора Z-страницы ОЗУ – RAMPZ
Разряды 7…1 – Зарезервированные разряды
Данные зарезервированные разряды считываются как 0. При записи в данные разряды необходимо записывать нули для совместимости с последующими микроконтроллерами.
Разряд 0 – RAMPZ0: Расширенный указатель страницы ОЗУ
Регистр RAMPZ обычно используется для указания той страницы ОЗУ размером 64 кбайт, к которой выполняется доступ через Z-указатель. Т.к. ATmega128 не поддерживает память на статическом ОЗУ размером свыше 64 кбайт, то данный регистр используется только для выбора страницы памяти программ, доступ к которой осуществляется с помощью инструкций ELPM/SPM. Различные установки бита RAMPZ0 имеют следующий результат:
RAMPZ0 = 0: Инструкции ELPM/SPM осуществляют доступ к памяти программ в диапазоне адресов $0000 - $7FFF (младшие 64 кбайт)
RAMPZ0 = 1: Инструкции ELPM/SPM выполняют доступ к памяти программ в диапазоне адресов $8000 - $FFFF (старшие 64 кбайт)
Обратите внимание, что действие инструкции LPM не зависит от установки RAMPZ.
Файл регистров общего назначения
Все регистры общего назначения объединены в файл. Файл регистров оптимизирован под расширенный набор инструкций AVR-микроконтроллеров. В целях достижения требуемой производительности и гибкости файлом регистров поддерживаются следующие схемы ввода-вывода:
Один 8- разрядный операнд и один 8- разрядный результат
Два 8- разрядных операнда и один 8- разрядный результат
Два 8- разрядных операнда и один 16- разрядный результат
Один 16- разрядный операнд и один 16- разрядный результат
Рисунок 2.5 показывает структуру 32 рабочих регистров общего назначения в ЦПУ.

Рис. 2.5 Рабочие регистры общего назначения ЦПУ AVR
Большинство инструкций работающих с файлом регистров имеют непосредственный доступ ко всем регистрам, чем достигается выполнение их за один машинный цикл.
Как показано на рисунке 2.5, каждый регистр имеет свой адрес в области памяти данных, для чего отведено там первые 32 позиции. Не смотря на физическую реализацию не по адресам статического ОЗУ, данная архитектура памяти обеспечивает высокую гибкость доступа к регистрам, например, регистры-указатели X, Y и Z могут быть установлены для присвоения индекса любому регистру в файле.
X-регистр, Y-регистр и Z-регистр (индексные регистры)
Регистры R26..R31 обладают некоторым дополнительными функциями для их общецелевого использования. Данные регистры являются тремя 16-разрядными указателями адреса для косвенной адресации в пределах памяти данных.
Три регистра косвенной адресации X, Y и Z представлены на рисунке 2.6.

Рис. 2.6 X, Y и Z-регистры
В различных режимах адресации данные адресные регистры выполняют функции фиксированного смещения, автоматического инкрементирования и автоматического декрементирования.
