Новосибирский государственный технический университет
Кафедра вычислительной техники
Лабораторные работы
по дисциплине «Микропроцессорные системы»
Факультет:
АВТФ
Группа: АМ-709
Студенты: Бутаков Д.Н.,Быков Д.Г.
Преподаватель: Дружинин А.И
Новосибирск, 2011 г.
Содержание
1. Задание. 3
2. Выполнение работы и особенности. 3
3. Список литературы. 11
Изучить лабораторный стенд STК500 и написать две программы, на языках программирования ассемблер и С, задействующие все возможности стенда.
Процессор ATMega16.
Запускаем AVR Studio, на появившемся окне выбираем новый проект. Далее заполняем необходимые поля (Рис.1.).
Рис.1. Создание проекта.
Жмем кнопку далее и на следующей странице выбираем микроконтроллер (Рис.2.).
Рис.2. Выбор микроконтроллера.
Далее пишем программу, ниже приведен скриншот с уже написанной программой.
Рис.3. Основное рабочее окно.
После написания программы компилируем ее нажатием кнопки F7. Затем записываем программу в микроконтроллер (Рис.4.)
Рис.4. Окно программирования.
Удаление программы осуществляется нажатием кнопки Erase Device. Для записи программы в микроконтроллер указываем путь к HEX файлу и жмем кнопку Program.
Трудности выполнения лабораторных работ заключались в освоении среды разработки AVR Studio. Вся сложность написания программ заключалась в том, что отсутствует возможность отладки программы в момент работы стенда. Освоение теории не вызвало проблем, т.к. стенд был описан очень подробно. В программе на ассемблере используется прерывание от таймера и два массива с порядком зажигания лампочек. В программе на С используется опрос флага переполнения таймера и зажигание лампочек происходит путем изменения значения на порту.
Ниже приведен код программы на ассемблере с комментариями.
Директива org предназначена для записи в счетчик адреса сегмента значения своего операнда. То есть при помощи этой директивы можно разместить команду (или данные) в памяти микроконтроллера по любому адресу.
.include "m16def.inc" ;подключение библиотеки
.list ;включение листинга
.org $000
rjmp start ;на рабочую программу
;.org $026
;rjmp start ;на рабочую программу необязательно если не менять прерывание
; nop
;обработка прерывания
timer0: nop
nop ;вместо предыдущего
push r17 ;сохранить состояние регистров в стеке
clr r17
out TCCR0,r17 ;останов таймера 0
ldi r17,0x10
out TCNT0,r17 ;значение счетчика 0
ldi r17,0x01 ;4 : clk - 256
out TCCR0,r17 ;активация счета T0
dec r1 ;сброс быстрого счетчика
brne tim0 ;нет события краткого
ldi r17,0x04;интервал короткого счетчика
mov r1,r17 ;восстановить короткий счетчик
ldi r17,0x02;признак короткого события
or r4,r17
clr r3 ;заготовка нажатия кнопки
in r17,PIND
andi r17,0x01;контроль первой кнопки-1
brne tim1 ;нет нажатия
ldi r17,0x01;идентификатор первой кнопки
mov r3,r17
tim1: in r17,PIND
andi r17,0x02;контроль второй кнопки-2
brne tim2 ;нет нажатия
ldi r17,0x02;идентификатор второй кнопки
mov r3,r17
tim2: dec r2 ;сброс длинного счетчика
brne tim0 ;нет события длинного
ldi r17,0x08;интервал длинного счетчика
mov r2,r17
ldi r17,0x01;признак длинного события
or r4,r17
tim0: nop
pop r17
out SREG,r17
reti
;головная программа реакции на кнопку светодиодом
start: in r17,SREG ;слово сост.для прер.
tst r10
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.