- •Кузнецов в.Н., Лисютченков с.Н. Цифровые и микропроцессорные устройства
- •Часть 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 Контрольные вопросы
- •Приложение
- •Список литературы
2.2.10 Выражения
Ассемблер позволяет использовать в тексте программы выражения. Они могут содержать операнды, операции и функции. Все выражения имеют разрядность 32 бита.
2.2.11 Операнды
Могут быть использованы следующие операнды:
определенные программистом метки, имеющие значение счетчика, в зависимости от места своего расположения;
переменные, определенные с помощью директивы SET;
константы, определенные с помощью директивы EQU;
целые константы:
- десятичные (по умолчанию): 10, 255,
- шестнадцатеричные (два вида записи): 0х0а, $0а, 0xff, $ff,
- двоичные: 0b0101011, 0b1111111;
коды символов ASCII: 'A', 'a';
строки ASCII (без нуля в конце строки): «String»;
PC - текущее значение счетчика команд в памяти программ.
2.2.12 Функции
LOW (выражение) - возвращает младший байт выражения;
HIGH (выражение) - возвращает старший байт выражения,
BYTE2 (выражение) - возвращает 2 байта выражения;
BYTEЗ (выражение) - возвращает 3 байта выражения;
BYTE4 (выражение) - возвращает 4 байта выражения;
LWRD (выражение) - возвращает биты 0 --15 выражения;
HWRD (выражение) - возвращает биты 16--31 выражения;
РАGЕ (выражение) - возвращает биты 16--21 выражения;
ЕХР2 (выражение) - возвращает 2^ выражения;
LOG2 (выражение) - возвращает целую часть log2(выражение).
2.2.13 Операции
Ассемблер поддерживает различные операторы, описанные ниже. При их использовании можно применять скобки.
.equ const1 =А ; Определение константы const1
.equ const2 =В ; Определение константы const2
.equ c1 =С ;Определение константы c1
.equ c2 =D ;Определение константы c2
Логическое НЕ
Обозначение: ! Описание: унарный оператор, возвращает 1, если выражение равно нулю, и 0, если выражение было не равно нулю.
Приоритет: 14.
Пример: ldi r16,!0xf0 ; Загрузить в r16 0х00
Побитовое НЕ
Обозначение: ~ Описание: унарный оператор, который возвращает исходное выражение со всеми инвертированными битами.
Приоритет: 14.
Пример: ldi r16, ~0xf0 ; Загрузить, в r16 0x0f
Унарный минус
Обозначение: — Описание: возвращает число с измененным на противоположный знаком.
Умножение
Обозначение: * Описание: возвращает результат умножения двух чисел.
Приоритет: 13.
Пример: ldi r18,const1*2 ; Загрузить в регистр r18 const1*2
Деление
Обозначение: / Описание: возвращает целую часть от деления левого параметра на правый.
Приоритет: 13.
Пример: ldi r30,const2/2 ; Загрузить в регистр r30 const2/2
Сложение
Обозначение: + Описание: возвращает сумму двух чисел.
Приоритет: 12.
Пример: ldi r30,с1+с2 ; Загрузить в регистр r30 с1+с2
Вычитание
Обозначение: - Описание: возвращает результат вычитания правого числа из левого.
Приоритет: 12.
Пример: ldi r17,с1-с2 ; Загрузить в регистр r30 с1-с2
Сдвиг влево
Обозначение: << Описание: возвращает значение левого числа, сдвинутое влево на число раз, равное правому числу.
Приоритет: 11.
Пример: ldi r17,1<<3 ; Загружает в регистр г17 число 1, сдвинутое влево на 3 бита
Сдвиг вправо
Обозначение: >> Описание: возвращает значение левого числа, сдвинутое вправо на число раз, равное правому числу.
Приоритет: 11.
Пример: ldi r17,1>>2 ; Загружает в регистр r17 число 1, сдвинутое вправо на 2 бита
Меньше
Обозначение:< Описание: возвращает 1, если первое число меньше второго, иначе - 0. Приоритет: 10.
Пример: ldi r16, const1*(c1<c2) ; Загружает в регистр r16 const1 если c1<c2
Меньше или равно
Обозначение: <= Описание: возвращает 1, если первое число меньше второго или равно ему, иначе - 0. Приоритет: 10.
Пример: ldi r16,const1*(c1<=c2) ; Загружает в регистр r16 const1 если c1<=c2
Больше
Обозначение: > Описание: возвращает 1, если первое число больше второго, иначе - 0.
Приоритет: 10.
Пример: ldi r16,const1*(c1>c2) ; Загружает в регистр r16 const1 если c1>c2
Больше или равно
Обозначение: >= Описание: возвращает 1, если первое число больше второго или равно ему, иначе - 0. Приоритет: 10.
Пример: ldi r16,const1*(c1>=c2) ; Загружает в регистр r16 const1 если c1>=c2
Равно
Обозначение: = = Описание: возвращает 1, если первое число равно второму, иначе - 0.
Приоритет: 9
Пример: ldi r16,const1*(c1==c2) ; Загружает в регистр r16 const1 если c1==c2
Не равно
Обозначение: != Описание: возвращает 1, если первое число не равно второму, иначе - 0.
Приоритет: 9.
Пример: ldi r16,const1*(c1!=c2) ; Загружает в регистр r16 const1 если c1!=c2
Побитовое И
Обозначение: & Описание: возвращает результат побитной операции «И» между операндами.
Приоритет: 8.
Пример: ldi r19,low(c1&c2)
Побитовое исключающее ИЛИ
Обозначение: ^ Описание: возвращает результат побитной операции «исключающее ИЛИ» между операндами.
Приоритет: 7.
Пример: ldi r18,Low(c1^c2)
Побитовое ИЛИ
Обозначение: | Описание: возвращает результат побитной операции «ИЛИ» между операндами.
Приоритет: 6.
Пример: ldi rl8,Low(cl |c2)
Логическое И
Обозначение: && Описание: возвращает 1, если оба выражения не равны нулю, иначе - 0.
Приоритет: 5.
Пример: ldi r18,Low(c1&&c2)
Логическое ИЛИ
Обозначение: || Описание: возвращает 0, если оба выражения равны нулю, иначе - 1.
Приоритет: 4.
Пример: ldi r18,Low(c1||c2)
Ниже приведены программа и ее алгоритм. Данная программа не выполняет какую-то определенную задачу, она демонстрирует работу с директивами и некоторыми командами.
Рис.2.17 Алгоритм программы
Рис. 2.18 Алгоритм подключаемой программы
Листинг программы:
; BASIC .ASM template file for AVR
; ******************************************************
; Define here the variables
;
.include "C:\VMLAB\include\m128def.inc""; определение библиотеки МК ;ATmega128, при условии расположения программы VMLAB на ;локальном диске С
.def numb = r16 ;запись символьного имени
.def const = r17 ; запись символьного имени
.def sum = r18 ; запись символьного имени
.macro sdvig ; Начало определения макрокоманды sdvig
lsr @0 ;Логический сдвиг фиксированного имени @0
sub r0,@1 ;Вычитание из РОН(r0) фиксированного имени @1
.ENDMACRO ; Конец определения макрокоманды
reset: ; начальная метка
rjmp start; Переход на начало основной программы
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03 Вектора прерываний МК ATmega128.
reti ; Addr $04 Приведены вектора с адреса $01 по адрес $10.
reti ; Addr $05 Полностью вектора прерываний представлены
reti ; Addr $06 в приложении с назначением прерываний
reti ; Addr $07 (внешних и внутренних).
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B
reti ; Addr $0C
reti ; Addr $0D
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
start:
ldi numb,$0a ;инициализация стека(младший байт)
out SPL,numb
ldi const,0b1101 ;инициализация стека(старший байт)
out SPH,const
mov r18,r16 ;пересылка значения r16 в регистр r18
add sum,const ;сложение r18,r17
.include "umn.asm" ; Включение другого файла на ассемблере
sdvig r18,r17 ; Вызов макрокоманды sdvig
.exit
Листинг подключаемого файла(программы)
; файл umn.asm
mul r17, r16 ; Перемножить r17 и r16
;результат перемножения регистров заносится в регистры R0 и R1
mov r19, r0 ; Вернуть результат r19
mov r20, r1 ; Вернуть результат r20
Листинг проектного файла
.MICRO "ATmega128" ; Указание типа микроконтроллера (ATmega128)
.PROGRAM " Project2.asm" ; Ассемблируемый файл
.TARGET " Project2.hex" ; Файл машинного кода
.TRACE ; Включение трассировки
.POWER VDD=5 VSS=0 ; Задание напряжения питания 5 В
.CLOCK 4meg ; Задание тактовой частоты работы микроконтроллера
.STORE 250m ; Время регенерации сигнала осциллографа