Методическое обеспечение базовой лабораторной работы практикума «Изучение работы и программирование микроконтроллеров avr»

Вид материалаПрактикум

Содержание


Фронтальная лабораторная работа №1 «Разработка программного обеспечения работы однокристальных микроЭВМ» (4 часа)
Описание выводов
Подключение Подключение внешнего
Порты ввода/вывода
Регистр направления данных порта В — DDRB
Практическая часть работы.
Рисунок 2.2. Создание нового проекта.
Структура программы.
Этап №3. Практическое программирование.
Разработка модуля управлением светодиодами.
File→New File
Подпрограмма управления светодиодами
Программирование микроконтроллера.
Подобный материал:
Методическое обеспечение базовой лабораторной работы практикума «Изучение работы и программирование микроконтроллеров AVR»


В рамках первого цикла проводится только фронтальные лабораторные работы – эта особенность методики связана с высокой сложностью изучаемого материала, необходимостью постоянного контроля со стороны преподавателя. Базовым элементом любой цифровой измерительной системы и системы управления является однокристальная микроЭВМ (микроконтроллер), поэтому проводятся следующие работы: «Разработка программного обеспечения работы однокристальных микроЭВМ» (4 ч), «Работа портов ввода-вывода микроконтроллера AT90S2313 (ATTINY2313)» (4 ч), «Компонеты среды программирования Delphi для работы с последовательным портом» (4 ч), «Архитектура и основы программирования микроконтроллера ATMEGA8535» (4 ч). В результате студент умеет составлять программу на языке ассемблер для микроконтроллера AVR, компилировать исходный текст с помощью среды AVR Studio в HEX-файл, осуществлять внутрисхемное программирование микроконтроллера и подключение простых устройств ввода-вывода (кнопок и светодиодов), организовать связь компьютера и микроконтроллера через последовательный интерфейс RS-232.

Курс по цифровым измерения и микроконтроллерам достаточно трудно обеспечит литературой. Поэтому, методическим литературным обеспечением лекционного курса и практикума служат книги по микроконтроллерам выложенные в сети в электронном виде.

Фронтальная лабораторная работа №1 «Разработка программного обеспечения работы однокристальных микроЭВМ» (4 часа)

Цель работы. Изучение технологии программирования микроконтроллеров. Знакомство с программой AVRStudio. Изучение особенностей программирования и структуры программ на языке ассемблер для микроконтроллеров AVR. Выполнение практического задания.

Литература.
  1. М.С. Голубцов, А.В. Кириченкова Микроконтроллеры AVR : от простого к сложному. Изд. 2-е, испр. и доп.- М.: СОЛН-Пресс, 2004. 304с.- (Серия "Библиотека инженера").
  2. Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. - М.: Издательский дом "Додэка-ХХI", 2004. - 288 с.: ил. (Серия "Мировая электроника").



Теория.

В этой лабораторной работе мы кратко познакомимся с микроконтроллерами. Микроконтроллеры являются сердцем многих современных устройств и приборов, в том числе и бытовых. Самой главной особенностью микроконтроллеров, с точки зрения конструктора-проектировщика, является то, что с их помощью легче и зачастую гораздо дешевле реализовать различные схемы.

На рисунке изображена структурная схема типичного современного микроконтроллера.



Из рисунка видно, что микроконтроллер может управлять различными устройствами и принимать от них данные при минимуме дополнительных узлов, так как большое число периферийных схем уже имеется непосредственно на кристалле микроконтроллера. Это позволяет уменьшить размеры конструкции и снизить потребление энергии от источника питания.

Для сравнения: при использовании традиционных микропроцессоров приходится все необходимые схемы сопряжения с другими устройствами реализовывать на дополнительных компонентах, что увеличивает массу, размеры и потребление электроэнергии.

Давайте рассмотрим типичные схемы, присутствующие в микроконтроллерах.
  1. Центральное процессорное устройство (ЦПУ) — сердце микроконтроллера. Оно принимает из памяти программ коды команд, декодирует их и выполняет. ЦПУ состоит из регистров, арифметико-логического устройства (АЛУ) и цепей управления.
  2. Память программ. Здесь хранятся коды команд, последовательность которых формирует программу для микроконтроллера.
  3. Оперативная память данных. Здесь хранятся переменные программ. У большинства микроконтроллеров здесь расположен также стек.
  4. Тактовый генератор. Этот генератор определяет скорость работы микроконтроллера.
  5. Цепь сброса. Эта цепь служит для правильного запуска микроконтроллера.
  6. Последовательный порт — очень полезный элемент микроконтроллера. Он позволяет обмениваться данными с внешними устройствами при малом количестве проводов.
  7. Цифровые линии ввода/вывода. По сравнению с последовательным портом с помощью этих линий возможно управлять одновременно несколькими линиями (или проверять несколько линий).
  8. Таймер. Используется для отсчета временных интервалов.
  9. Сторожевой таймер. Это специальный таймер, предназначенный для предотвращения сбоев программы. Он работает следующим образом: после запуска он начинает отсчет заданного временного интервала. Если программа не перезапустит его до истечения этого интервала времени, сторожевой таймер перезапустит микроконтроллер. Таким образом, программа должна давать сторожевому таймеру сигнал — все в порядке. Если она этого не сделала, значит, по какой-либо причине произошел сбой.

В данной лабораторной работе изучается микроконтроллер AT90S2313 — наиболее удобный микроконтроллер для первоначального знакомства. Он имеет почти все базовые периферийные устройства, присутствующие в микроконтроллерах серии AVR и отличается от более мощных только меньшим числом линий ввода/вывода, размером памяти программ, данных, числом таймеров (тем не менее он имеет два таймера: 8- и 16-разрядный).

AT90S2313 — современный 8-битовый КМОП-микроконтрол-лер. AT90S2313 имеет производительность около 1 MIPS на мегагерц за счет того, что почти все команды он выполняет за один период тактового генератора.

Микроконтроллеры семейства AVR построены на основе расширенной RISC-архитектуры, объединяющей развитый набор команд и 32 регистра общего назначения. Все 32 регистра непосредственно подключены к арифметико-логическому устройству (АЛУ), что дает доступ к любым двум регистрам в течение одного машинного цикла. Подобная архитектура обеспечивает почти десятикратный выигрыш в производительности по сравнению с традиционными микроконтроллерами, например, серии 8051.

Микроконтроллер AT90S2313 имеет следующие характеристики: 2 Кб загружаемой флэш-памяти; 128 байтов EEPROM; 15 линий ввода/вывода общего назначения; 32 рабочих регистра; два таймера/счетчика, один 8-разрядный, другой 16-разрядный; внешние и внутренние прерывания; встроенный последовательный порт; программируемый сторожевой таймер со встроенным генератором; последовательный порт SPI для загрузки программ; два выбираемых программно режима низкого энергопотребления.

Флэш-память на кристалле может быть перепрограммирована прямо в системе через последовательный интерфейс SPI.

Описание выводов

VCC — вывод источника питания.

GND — общий провод («земля»).

PORT В (РВ7...РВ0) — порт В является 8-битовым двунаправленным параллельным портом ввода/вывода с встроенными подтягивающими резисторами. У выводов порта предусмотрены внутренние подтягивающие резисторы (их можно включать или выключать для каждого бита отдельно). Выводы РВО и РВ1 также являются положительным (AIN0) и отрицательным (AIN1) входами встроенного аналогового компаратора. Выходные буферы порта В могут поглощать ток до 20 мА и непосредственно управлять светодиодными индикаторами. Это означает, что микроконтроллер способен управлять нагрузкой до 20 мА при состоянии логического 0 на выходе порта. Таким образом, для управления светодиодом его следует подсоединить одним выводом к выводу порта микроконтроллера, а другим — к напряжению питания +Vcc. Соответственно светиться светодиод (а значит, и потреблять ток) будет при значении 0 на соответствующей линии порта. Если выводы РВ0...РВ7 используются как входы и извне устанавливаются в низкое состояние, они являются источниками тока, если включены внутренние подтягивающие резисторы. Кроме того, порт В обслуживает некоторые специальные функции, которые будут описаны ниже.

PORT D (PD6...PD0) — порт D является 7-битовым двунаправленным параллельным портом ввода/вывода с встроенными подтягивающими резисторами. Выходные буферы порта D также могут поглощать ток до 20 мА. Как входы, установленные в низкое состояние, выводы порта D являются источниками тока, если задействованы подтягивающие резисторы. Кроме того, порт D обслуживает некоторые специальные функции.

RESET — вход сброса. Удержание на входе низкого уровня в течение двух машинных циклов (если работает тактовый генератор), перезапускает микроконтроллер.

XTAL1 — вход инвертирующего усилителя генератора и вход внешнего тактового сигнала.

Выводы XTAL1 и XTAL2 являются входом и выходом инвертирующего усилителя, на котором можно собрать генератор тактовых импульсов. Можно использовать как кварцевые, так и керамические резонаторы. Если нужно использовать внешний тактовый сигнал, он подается на вывод XTAL1, а вывод XTAL2 при этом остается неподключенным.



Подключение Подключение внешнего

кварцевого резонатора к источника тактовых импульсов

микроконтроллеру

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

Порты ввода/вывода

Порт В 8-разрядный — двунаправленный для ввода/вывода. Для обслуживания порта отведено три регистра: регистр данных PORTB ($18, $38), регистр направления данных — DDRB ($17, $37) и выводы порта В ($16, $36). Адрес выводов порта В предназначен только для чтения, в то время как регистр данных и регистр направления данных — для чтения и записи.

Все выводы порта имеют отдельно подключаемые подтягивающие резисторы. Выходы порта В могут поглощать ток до 20 мА и непосредственно управлять светодиодными индикаторами. Если выводы РВ0...РВ7 используются как входы и замыкаются на землю, то при включенных внутренних подтягивающих резисторов выводы являются источниками тока. Дополнительные функции выводов порта В приведены в таблице.

Вывод

Альтернативная функция

РВ0

AIN0 (положительный вход аналогового компаратора)

РВ1

AIN1 (отрицательный вход аналогового компаратора)

РВ3

OC1 (выход совпадения таймера/счетчика 1)

РВ5

MOS1 (вход данных для SPI)

РВ6

MIS0 (выход данных для SPI)

РВ7

SCK (вход тактовых импульсов SPI)

При использовании альтернативных функций выводов регистры DDRB и PORTB должны быть установлены в соответствии с описанием альтернативных функций. При использовании возможности внутрисхемного программирования микроконтроллера следует учитывать, что программатор использует для своей работы линии MOSI, MISO и SCK. Соответственно, устройства, подключенные к этим линиям, не должны мешать работе программатора.



Регистр направления данных порта В — DDRB

Выводы порта В — PINB

PINB не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов порта В. При чтении PORTB читаются данные из регистра-защелки, при чтении PINB читаются логические значения, соответствующие фактическому состоянию выводов порта.

Все 8 битов порта В при использовании для ввода/вывода одинаковы. Бит DDBn регистра DDRB выбирает направление передачи данных. Если бит установлен (т. е. равен единице), вывод сконфигурирован как выход. Если бит сброшен (т. е. равен нулю) — вывод сконфигурирован как вход. Если PORTBn установлен и вывод сконфигурирован как вход, включается КМОП, подтягивающий резистор. Для отключения резистора PORTBn должен быть сброшен или вывод должен быть сконфигурирован как выход.

DDRn

PORTDn

Вход-выход

Подтягивающий

резистор

Комментарий

0

0

Вход

Нет

Третье состояние

0

1

Вход

Да

Источник тока

1

0

Выход

Нет

Выход = 0

1

1

Выход

Нет

Выход = 1

Примечание: n – номер вывода.

Альтернативные функции PORTB:

Бит 7 SCK — вход тактовой частоты для SPI.

Бит 6 MISO — выход данных для SPI.

Бит 5 MOSI — вход данных для SPI.

Бит 3 ОС1 — выход совпадения. Этот вывод может быть сконфигурирован для внешнего вывода события совпадения таймера 1. Для этого бит DDB3 должен быть установлен в 1 (вывод сконфигурирован как выход).


Практическая часть работы. Выполнение лабораторной работы должно проводится строго поэтапно.

Этап №1. Знакомство с программой AVRStudio.

Запуск программы. Запуск программы осуществляется с помощью иконки AVR Studio 4.0 на рабочем столе или через меню

Пуск→Программы→Atmel AVR Tools→AVR Studio 4.0



Рисунок 2.1. Окно системы программирования.

При запуске появится окно диалога Welcome to AVR Studio 4.0, которое необходимо закрыть (кнопка Cansel). Программная среда загрузится в начальной конфигурации – экран разделен на три основные зоны (зона текста программы, зона устройств ввода-вывода и зона компиляции). Далее необходимо познакомится с пунктами главного меню в верхней части программы. В основном они соответствуют стандартам систем программирования.



Рисунок 2.2. Создание нового проекта.

Создание проекта. Для создания проекта нужно выбрать Project→New Project, снова появится окно для создания проект. Необходимо выбрать пункт Atmel AVR Assembler и ввести название проекта Project Name (например my_prob_01). Автоматически заполняется поле ввода Initial file. В поле Location необходимо указать место расположения (папку) проекта на диске D (например D:/Student_400/448/).

Далее нужно определить платформу программирования – выбрать Debug platform = AVR Simulator; Device = AT90S2313.



Рисунок 2.3. Выбор платформы программирования.

Нажать кнопку Finish. Внимательно следите за тем, чтобы все каталоги и подкаталоги расположения проекта были записаны латинскими буквами.

Этап №2. Создание программы.

Структура программы. Далее работа продолжается в окне, название которого совпадает с названием проекта. Это окно соответствует главному модулю проекта.

В окно главного модуля вводится текст программы в соответствии с правилами написания программ на языке ассемблер:
  • Комментарии – это строки (или часть строки), которые начинаются со знака «точка с запятой - ; »
  • Дерективы начинаются со знака «точка - . » и пишутся без отступа от левого края текста.
  • Команды пишутся с отступом (нажатие клавиши Tab).

Следует подчеркнуть, что ассемблер один из самых абстрактных языком программирования, поскольку в основном программа управляет процессами пересылки между ячейками памяти, а средства управления ограничиваются условными и безусловными переходами. Поэтому приходится использовать большое количество комментариев – на начальном этапе приходится комментировать практически каждую строку программы.

В окно главного модуля необходимо ввести следующий текст:

;проверка для макетной платы с микроконтроллером AT90S2313

;дата создания – 23.02.2008, изменен 28.03.2008

.include "2313def.inc" ;подключ. файла определения систем. переменных

.device AT90S2313 ;выбор набора команд данной микросхемы

;определение условных имен регистров REG

.def data=r16

.def data1=r17

;определение условных имен переменных SRAM

.dseg

code: .byte 1 ;переменная в один байт

keys: .byte 1 ;переменная состояния кнопок

keys1: .byte 1 ;переменная состояния кнопок

key_up: .byte 1;переменная промежуточного состояния кнопок

leds: .byte 1 ;переменная состояния светодиодов

;начало flash

.cseg

.org 0 ;вектор сброса

rjmp ini

;начало программы

ini:

;инициализация стека

ldi data,low(RAMEND)

out spl,data

; ldi data,high(RAMEND)

; out sph,data

;.include "ini_device.asm" ;начальные установки микроконтроллера

start:

rjmp start

;

;**** ПОДПРОГРАММЫ И ВСПОМОГАТЕЛЬНЫЕ МОДУЛИ *******

.include “delays.asm”

;*****************************************

.exit


Обсуждение данного текста начнет с первой строки. Этот комментарий указывает назначение программы и дату (или версию) создания и изменения. В процессе длительной работы, например на протяжении семестра программа многократно изменяется, поэтому обязательно нужно указывать в начале данную информацию.

Особенностью программирования микроконтроллеров является тот факт, что программа не носит универсального характера, а пишется для конкретного типа устройства. Поэтому далее директивы (.include) должны подгружать файл системных переменных в котором абсолютным адресам памяти микроконтроллера присваиваются условные имена (например, RAMEND – максимальный адрес оперативной памяти) и указывать компилятору ассемблера какие команды он может использовать для данного типа микроконтроллера (.device). Чтобы файл системных переменных автоматически был найден системой программирования необходимо в пункте Project→Assembler Options→Additional include file указать путь:

C:/Programm Files/Atmel/AVR Tools/AvrAssembler2/Appnotes/

Далее пользователь с помощью директивы (.def) программист может дать условные имена регистрам сверхоперативной памяти с которыми непосредственно работает процессор.

Все языки программирования имеют много общего. Не исключение язык ассемблера в современной версии. Программа структурирована и делится на разделы:
  • Название – описание цели и даты программы.

;проверка для макетной платы с микроконтроллером AT90S2313

;дата создания – 23.02.2008, изменен 28.03.2008
  • Раздел конкретизации – указание типа микроконтроллера через подключаемый файл (*.inc) и директиву (.device).

.include "2313def.inc" ;подключ. файла определения систем. переменных

.device AT90S2313 ;выбор набора команд данной микросхемы
  • Раздел констант (директива .equ).

.equ memo=$378
  • Раздел регистров (сверхоперативная память процессора в которой производятся все операции и команды обработки)

;определение условных имен регистров REG

.def data=r16

.def data1=r17
  • Раздел переменных (начинается с директивы .dseg может встречаться в главном и вспомогательных модулях программы)

.dseg

code: .byte 1 ;переменная в один байт

keys: .byte 1 ;переменная состояния кнопок

keys1: .byte 1 ;переменная состояния кнопок

key_up: .byte 1;переменная промежуточного состояния кнопок

leds: .byte 1 ;переменная состояния светодиодов
  • Раздел программы (flash-память). Подразделяется на раздел прерываний, команды организации стека, подключение файла инициализации микроконтроллера и содержательную (рабочую) часть программы.

.cseg

.org 0 ;вектор сброса

rjmp ini

;начало программы

ini:

;инициализация стека

ldi data,low(RAMEND)

out spl,data

; ldi data,high(RAMEND)

; out sph,data

;.include "ini_device.asm" ;начальные установки микроконтроллера

start:

rjmp start

;
  • Раздел вспомогательных модулей

;**** ПОДПРОГРАММЫ И ВСПОМОГАТЕЛЬНЫЕ МОДУЛИ *******

.include “delays.asm”

;*****************************************
  • Команда окончания программы (необязательна)

.exit

Особенность программ на ассемблере является отсутствие локальных переменных. Ассемблер напрямую работает с физической памятью микроконтроллера, поэтому выделение локальных переменных является нецелесообразным. Именно поэтому в отличии от языков высокого уровня вспомогательные модули подключаются в конце программы, а не в начале.

Этап №3. Практическое программирование.

Компиляция и исправление ошибок. Компиляция программы выполняется автоматически в каталог проекта. Для выполнения компиляции необходимо нажать клавишу F7 или соответствующую кнопку иконки панели инструментов.



Рисунок 2.4. Состояние системы во время компиляции.



Рисунок 2.5. Окно компиляции с ошибкой



Рисунок 2.6. Окно компиляции успешного результата.

Если в результате компиляции появились ошибки (рис.2.5.), то для поиска необходимо щелкнуть два раза на строке с ошибкой в окне Build. Далее прочитав диагностику компилятора необходимо исправить ошибку. В нашем случае ошибкой является отсутствие файла delays.asm в каталоге нашего проекта. Следует переписать данный файл с сервера и повторить попытку компиляции. В случае успеха результат компиляции будет выглядеть так, как показано на рис.2.6 – программа покажет распределение памяти микроконтроллера и результат диагностики текста программы.

Разработка модуля управлением светодиодами. Для решения задачи подключения конкретного устройства необходимо решить две задачи – создать вспомогательные модули и написать программы предварительно внимательно познакомившись со схемой подключения светодиодов к микроконтроллеру (рис.2.7).

Для создания нового модуля необходимо открыть новое окно проекта ( File→New File). Затем сохранить его в каталог главного проекта (File→Save As) указав обязательно имя и расширение файла (например ini_device.asm). После этого в окне появится название файла. Подключить вспомогательный модуль к основной программе можно директивой

.unclude “ini_device.asm”

в главном модуле, в разделе подпрограмм и вспомогательных модулей.

Далее в окне вспомогательного модуля ini_device следует набрать программу:

;инициализация внешних контактов и устройств

;светодиоды – на вывод

sbi ddrb,1;LED0

sbi ddrb,0;LED1

sbi ddrd,6;LED2

sbi ddrb,2;LED3

sbi ddrb,3;LED4

sbi ddrb,4;LED5

sbi ddrd,5;LED6

sbi ddrd,2;LED7

;кнопки - на ввод

cbi ddrd,3;BUTT 1

cbi ddrd,4;BUTT 2

;отключаем цифровые контакты последовательного порта

cbi ddrd,0;RxD

cbi portd,0;

cbi ddrd,1;TxD

cbi portd,1

;*****************************************

Данные команды устанавливают контакты микроконтроллера к которым подключены светодиоды в состояние вывода информации – «OUTPUT», а контакты к которым подключены кнопки в состояние ввода информации – «INPUT». Кроме того мы отключаем порты ввода-вывода от контактов которые в дальнейшем будем использовать для связи с СОМ-портом персонального компьютера. Как конкретно программируются порты ввода-вывода указано в главе 1 данной дипломной работы.

Следующий шаг – создание вспомогательного модуля для управления светодиодами. Создадим окно leds, так как это писано выше. Далее в окне необходимо ввести следующий тест программы:

;************************************

;ПОДПРОГРАММА УПРАВЛЕНИЯ СВЕТОДИОДАМИ

;************************************

;********* SET LED'S *****

led_code:

lds data,leds

com data

;---- set led0

bst data,0 ;загрузили бит из регистра в Т

brts led0_1 ;если Т=1, то на метку

cbi portb,1 ;если Т=0, то сбросить PORT

rjmp led1 ;выход

led0_1:

sbi portb,1 ;установить PORT

;---- set led 1

led1:

bst data,1

brts led1_1

cbi portb,0

rjmp led2

led1_1:

sbi portb,0

;---- set led 2

led2:

bst data,2

brts led2_1

cbi portd,6

rjmp led3

led2_1:

sbi portd,6

;---- set led 3

led3:

bst data,3

brts led3_1

cbi portb,2

rjmp led4

led3_1:

sbi portb,2

;---- set led 4

led4:

bst data,4

brts led4_1

cbi portb,3

rjmp led5

led4_1:

sbi portb,3

;---- set led 5

led5:

bst data,5

brts led5_1

cbi portb,4

rjmp led6

led5_1:

sbi portb,4

;---- set led 6

led6:

bst data,6

brts led6_1

cbi portd,5

rjmp led7

led6_1:

sbi portd,5

;---- set led 7

led7:

bst data,7

brts led7_1

cbi portd,2

rjmp led_end

led7_1:

sbi portd,2

;

led_end:

ret

В данной программе решается следующая задача – из переменной leds необходимо выбирать последовательно по одному биту и зажигать или гасить светодиоды номера которых совпадают с порядковым значением данного бита. Если выбранный бит установлен, то светодиод нужно включит, если сброшен, то выключить. Эта задача решается с помощью следующего набора команд:

lds data,leds ;загрузили значение переменной leds в регистр data

com data ;инвертировали биты регистра data

;---- set led0

bst data,0 ;загрузили младший бит из регистра в Т

brts led0_1 ;если Т=1, то на метку led0_1

cbi portb,1 ;если Т=0, то сбросить контакт 1 PORTВ

rjmp led1 ;выход

led0_1:

sbi portb,1 ;установить контакт 1 PORTВ

Далее алгоритм повторяется – проверяются все биты переменной и устанавливаются или сбрасываются соответствующие контакты микроконтроллера.




Рисунок 2.7. Схема подключения исполнительных устройств

(светодиодов и кнопок ) к микроконтроллеру AT90S2313.

Для проверки работы процедуры необходимо в окне вспомогательного модуля leds.asm набрать следующую программу.

;***********************************

;подпрограмма "БЕГУЩИЙ ОГОНЕК"

;***********************************

led_run:

ldi data,0b00000001

sts leds,data

rcall led_code

rcall delay_100

;

ldi data,0b00000010

sts leds,data

rcall led_code

rcall delay_100

;

ldi data,0b00000100

sts leds,data

rcall led_code

rcall delay_100

;

ldi data,0b00001000

sts leds,data

rcall led_code

rcall delay_100

;

ldi data,0b00010000

sts leds,data

rcall led_code

rcall delay_100

;

ldi data,0b00100000

sts leds,data

rcall led_code

rcall delay_100

;

ldi data,0b01000000

sts leds,data

rcall led_code

rcall delay_100

;

ldi data,0b10000000

sts leds,data

rcall led_code

rcall delay_100

;

ret

;******************************

Циклический вызов данной подпрограммы осуществляется в главном модуле:

start:

rcall led_run

rjmp start

Далее программу нужно откомпилировать и получить файл my_prob_01.hex в каталоге главного модуля.

Программирование микроконтроллера. Программирование микроконтроллера осуществляется внутрисхемно через последовательный синхронный интерфейс SPI. В процессе программирования коды команд, записанные в форме шестнадцатеричных чисел записываются с помощью последовательности электрических импульсов в память программ. Микроконтроллер переходит в режим программирования с помощью сигнала RESET, который при программировании сбрасывается. После завершения программирования программатор устанавливает сигнал RESET и микроконтроллер начинает выполнение программы. На рисунке 2.8 показано размещение программатора на панели лабораторного модуля.

 

Рисунок 2.8. Размещение модуля программирования и основных узлов

лабораторной работы на стенде.

Программирование микроконтроллера (прошивку) удобнее осуществлять с помощью программы файлового менеджера FAR. В одном из окон программы нужно перейти в папку главного проекта и с помощью командного файла WriteToChip2313.cmd запустить утилиту AVREAL на запись файла my_prob_01.hex:

D:/Student400/448/WriteToChip2313.cmd my_prob_01.hex

Данная команда должна быть введена в командной строке и запущена на исполнение клавишей ENTER. С особенностями использования утилиты AVREAL и программатора ALTERA BYTEBLASTER можно познакомится в электронном приложении к диплому.


Контрольные вопросы и задания.
  1. Измените программу светового эффекта в соответствии с индивидуальным заданием преподавателя?
  2. Как осуществляется программирование портов светодиодов?
  3. Как осуществляется зажигание и гашение светодиодов. Какова величина управляющего тока?
  4. Как осуществляется вызов подпрограммы в языке ассемблер?
  5. Как осуществляется пересылка информации из оперативной памяти в регистры процессора и обратно?