Исследование основ программирования микроконтроллера ATmega16
Автор: 0002221 • Февраль 3, 2023 • Лабораторная работа • 1,957 Слов (8 Страниц) • 176 Просмотры
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Институт заочно-вечернего образования
Кафедра вычислительные системы и сети
Лабораторная работа
Лабораторная работа №6. Исследование основ программирования микроконтроллера ATmega16
Выполнил:
студент группы АТПбз-21-1
Пилипенко И.В.
Проверил преподаватель:
_________________________
Иркутск 2023 г.
Цель работы: Изучение основ программирования и отладки программ на микроконтроллере ATmega16.
Используемое оборудование и средства: персональный компьютер, пакет «AVR Studio 4.0»
Задание 1
В поле программы записан код, представленный в лабораторной работе (рисунок 1.1). Исходя из задания, были устранены ошибки в написании кода, результат – на рисунке 1.2.
[pic 1]
Рисунок 1.1 Неверный код программы
[pic 2]
Рисунок 1.2 Код с исправленными ошибками
Результат работы программы, а также время её выполнения представлены на рисунке 1.3:
[pic 3]
Рисунок 1.3 Результат работы программы
Далее необходимо выполнить оптимизацию кода, с целью сокращения времени выполнения команд. Из данного кода можно убрать команду “nop” и “clr r16”. Кроме того, повысим частоту до 16МГц.
Результаты работы – на рисунке 1.4:
[pic 4]
Рисунок 1.4 Работа программы после оптимизации
В результате оптимизации программы, её быстродействие возросло и время выполнения стало 0,25мкс.
Задача №2
Написать и отладить программу по вычислению заданной арифметической операции. Результат поместить в регистр R18 и вывести в заданный параллельный порт (PortХ). Ввод константы b выполнить с заданного порта (PortY). Параметры индивидуального задания выбираются из табл. 1.
Таблица 1 – Индивидуальные задания по вариантам
№ студента в журнале | Константа a | Константа b | Константа с | Операция | Тактовая частота МК (МГц) | Порт вывода X | Порт ввода Y |
8 | 240 | 13 | 111 | b+(a – 2*c) (арифм.) | 2 | A | С |
Программа:
.include "m16def.inc" ;подключение библиотеки для работы с ATmega16
;описание псевдонимов регистров
.def a=r16
.def b=r17
.def c=r19
;**********************************************************
; Начало основной программы
;**********************************************************
ser R16 ; R16 = 0xFF
out DDRA, R16 ; DDRA = R16 - настройка на выход порта A
clr R16 ; R16 = 0
out DDRC, R16 ; DDRC = R16 - настройка на вход порта C
ldi a, 240 ; a = 240
in b, PINC ; b = PINC = 13 (ввод константы b из порта C)
ldi c, 111 ; с = 111
mov R18, c ; R18 = c = 111
lsl R18 ; R18 = R18 << 1 = 111 << 1 = 222
neg R18 ; R18 = -R18 = -222
add R18, a ; R18 = R18 + a = a - 2*c = 18
add R18, b ; R18 = R18 + b = b + (a - 2*c) = 31
out PORTA, R18 ; PORTA = R18 (вывод результата в порт A)
loop:
rjmp loop ; зацикливание программы
Результаты выполнения программы приводятся на рисунках 3 – 5.
[pic 5]
Рисунок 3 – Ввод в R17 значения константы b из порта C
[pic 6]
Рисунок 4 – Вычисление R18 = a – 2*c (арифм.)
[pic 7]
Рисунок 5 – Вычисление результата выражения в R18 и вывод в порт A
...