6.3 Порядок выполнения и пример оформления лабораторной работы

Выполнение лабораторной работы состоит из двух этапов: самостоятельная работа и работа на лабораторном стенде.

На этапе самостоятельной работы студент в соответствии с полученным заданием должен разработать алгоритм решения поставленной задачи и написать текст исходного модуля программы в текстовом редакторе "Блокнот". Текст программы должен быть снабжён достаточно полными комментариями. Наличие текста с исходным модулем программы является основанием для допуска к выполнению лабораторной работы.

Второй этап выполняется на лабораторном стенде и состоит из следующих шагов:

Защита лабораторной работы происходит в форме свободной беседы по теме лабораторной работы.

Отчёт по лабораторной работе должен содержать следующие разделы:

Отчёт по лабораторной работе должен быть оформлен в соответствии с требованиями стандарта ВУЗа.

Ниже приводится пример оформления отчёта по лабораторной работе.

Лабораторная работа 1

Работа с портом ввода/вывода общего назначения микроконтроллера AT90S2313.

Цель работы: Разработать программу вывода информации на светодиодный индикатор через порт РВ с использованием программной временной задержки.

Задание: Вид выводимой информации – "Бегущая единица", начиная с РВ0; временная задержка изменения состояний – 0,5 С.

Чертёж структурной схемы лабораторного макета приведен на рисунке Л1.1


Рисунок Л1.1 Структурная схема лабораторного макета.

Чертёж блок схемы алгоритма решения задачи приведен на рисунке Л1.2.


Рисунок Л1.2 Блок схема алгоритма программы

Примечание: переменная In1 содержит текущее значение выводимого в порт В значения.

Ниже приведен исходный текст программы proba.asm, решающий поставленную задачу

.include "2313def.inc"  ;  определение типа устройства для которого разработана программа
.def     In1 = r18      ;  определить для хранения переменной In1 регистр r18

; определение таблицы векторов прерываний
rjmp MAIN   ; сброс по reset , переход на начало программы; метка MAIN
    reti    ; не определено; возврат
    reti    ; 
    reti    ; 
    reti    ;  
    reti    ; 
    reti    ; 
    reti    ; 
    reti    ; 
    reti    ; 
    reti    ; 
    reti    ; 
    reti    ; 
;-----------------------------------------------------
;начало программы
MAIN:
    ldi    r16,low(RAMEND);установка указателя стека
    out    spl,r16         
    ldi    r16,255        ; настройка порта В на вывод информации
    out    ddrb,r16       ; 
;------------------------------------------------------ 
;основной цикл
tostart:
    ldi    In1,1          ; In1 = 1
oneop:
    ldi    r16,low(50000) ;записать в регистры  r16, r17  значение множителя временной 
    ldi    r17,high(50000);задержки   с учётом, что шаг задержки 100 мкС для передачи  в п/п временной задержки 
    rcall  wait           ;вызов подпрограммы временной задержки
    com    In1            ;инвертировать значение In1 (необходимость этого
	                      ; продиктована особенностями работы блока индикации)
    out    portb, In1     ;вывести In1 в порт В
    com    In1            ;инвертировать значение    
    lsl    In1            ;логический сдвиг влево на 1 разряд значения In1
    breq   tostart        ;если In1 = 0, переход на метку tostart
    rjmp   oneop          ;в противном случае на метку oneop
;--------------------------------------------------------
;подпрограмма временной задержки
; содержимое регистров r16 (младшая часть) и r17 (старшая часть) содержат множитель ;временной задержки

wait:                 
    cpi    r16,0          ;сравнить содержимое r16 с 0
    breq   wait1          ;переход на метку wait1 если 0
    rcall  wait100us      ;вызов подпрограммы "задержка на 100 мкС"
    dec    r16            ;вычесть единицу из содержимого регистра r16
    rjmp   wait           ;перейти в начало п/п
wait1:
    cpi    r17,0          ;сравнить содержимое r16 с 0
    breq   waitend        ;переход на метку waitend если 0
    dec    r16            ;вычесть единицу из содержимого регистра r16
    dec    r17            ;вычесть единицу из содержимого регистра r17
    rjmp   wait           ;перейти в начало п/п
waitend:
    ret                   ;возврат в основную программу
;---------------------------------------------
; подпрограмма формирования временной задержки длительностью 100 мкС
.equ CLK=4000000          ;присвоить  переменной CLK значение тактовой частоты 4МГц 
wait100us:
    push   r16            ;поместить  r16  в стек
    ldi    r16,((CLK/10000-16)/4)  ; загрузить в регистр r16 коэффициент пересчёта
	                 ;тактовой частоты микроконтроллера в частоту 10  кГц ( период 100 мкС)
	                 ;с учётом времени выполнения цикла wait100us1
wait100us1:
    nop                    ;"нет операции" задержка счета на 1 цикл тактовой частоты
    dec    r16             ;вычесть единицу из содержимого регистра r16
    brne   wait100us1      ;перейти на wait100us1если содержимое r16 не равно 0
    pop    r16             ;загрузить из стека регистр  r16
    ret                    ;выход из подпрограммы" 

После компиляции и загрузки программы в Flash память микроконтроллера на линейке светодиодных индикаторов наблюдается заданная информационная последовательность с частотой смены состояний порядка 0,5 сек

Выводы: В ходе выполнения лабораторной работы получены навыки программирования порта ввода/вывода общего назначения и разработки программы временной задержки без применения периферийных устройств микроконтроллера.

Примеры программирования на языке ассемблера для микроконтроллеров AVR

При установке интегрированной среды разработки AVR Studio в папке Appnotes размещён ряд подпрограмм на языке ассемблера часто встречающихся при решении практических задач. Все исходные тексты приведенных программных фрагментов разработаны специалистами фирмы Atmel corp. и достаточно подробно откомментированы на английском языке. Перечень названий файлов с исходными текстами и их назначение приведены в приложении 4. Для углублённого изучения программирования для микроконтроллеров семейства AVR можно обратиться к руководящим техническим материалам (Application Notes) размещенным на сайте Atmel corp. (www.atmel.com).


Hosted by uCoz