Изучение лабораторного стенда STК500 и написание двух программ на языках программирования ассемблер и С, задействующие все возможности стенда

Страницы работы

Содержание работы

Новосибирский государственный технический университет

Кафедра вычислительной техники


Лабораторные работы

по дисциплине «Микропроцессорные системы»

Факультет: АВТФ
Группа: АМ-709
Студенты: Бутаков Д.Н.,Быков Д.Г.
Преподаватель: Дружинин А.И

Новосибирск, 2011 г.

Содержание

1. Задание. 3

2. Выполнение работы и особенности. 3

3. Список литературы. 11


1. Задание.

Изучить лабораторный стенд STК500 и написать две программы, на языках программирования ассемблер и С, задействующие все возможности стенда.

Процессор ATMega16.

2. Выполнение работы и особенности.

            Запускаем 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

Похожие материалы

Информация о работе