Методическое обеспечение базовой лабораторной работы практикума «Изучение работы и программирование микроконтроллеров avr»
Вид материала | Практикум |
- Граммируемой логики, взяла старт по разработке risc-микроконтроллеров в середине 90-х, 161.19kb.
- Ходимы для реализации в составе «систем на кристалле» блоков управления, спроектированных, 48.74kb.
- Задание для лабораторной работы Ввести в базу данных системы Monitor crm товары, менеджеров, 1563.17kb.
- Методические указания к выполнению лабораторной работы №23 по физике для студентов, 142.34kb.
- Изделий и конструкций, 292.05kb.
- Учебная программа. Методические указания для самостоятельной работы студентов. П711, 236.94kb.
- Методические указания по выполнению лабораторной работы на пэвм для самостоятельной, 1165.71kb.
- Контрольное задание №1 Прогнозирование событий Цель лабораторной работы, 553.08kb.
- , где s – площадь рамки, а магнитный поток. В результате силового воздействия постоянного, 508.66kb.
- Отчет по лабораторной работе №: 14 Изучение свободных электромагнитных колебаний, 137.4kb.
Методическое обеспечение базовой лабораторной работы практикума «Изучение работы и программирование микроконтроллеров AVR»
В рамках первого цикла проводится только фронтальные лабораторные работы – эта особенность методики связана с высокой сложностью изучаемого материала, необходимостью постоянного контроля со стороны преподавателя. Базовым элементом любой цифровой измерительной системы и системы управления является однокристальная микроЭВМ (микроконтроллер), поэтому проводятся следующие работы: «Разработка программного обеспечения работы однокристальных микроЭВМ» (4 ч), «Работа портов ввода-вывода микроконтроллера AT90S2313 (ATTINY2313)» (4 ч), «Компонеты среды программирования Delphi для работы с последовательным портом» (4 ч), «Архитектура и основы программирования микроконтроллера ATMEGA8535» (4 ч). В результате студент умеет составлять программу на языке ассемблер для микроконтроллера AVR, компилировать исходный текст с помощью среды AVR Studio в HEX-файл, осуществлять внутрисхемное программирование микроконтроллера и подключение простых устройств ввода-вывода (кнопок и светодиодов), организовать связь компьютера и микроконтроллера через последовательный интерфейс RS-232.
Курс по цифровым измерения и микроконтроллерам достаточно трудно обеспечит литературой. Поэтому, методическим литературным обеспечением лекционного курса и практикума служат книги по микроконтроллерам выложенные в сети в электронном виде.
Фронтальная лабораторная работа №1 «Разработка программного обеспечения работы однокристальных микроЭВМ» (4 часа)
Цель работы. Изучение технологии программирования микроконтроллеров. Знакомство с программой AVRStudio. Изучение особенностей программирования и структуры программ на языке ассемблер для микроконтроллеров AVR. Выполнение практического задания.
Литература.
- М.С. Голубцов, А.В. Кириченкова Микроконтроллеры AVR : от простого к сложному. Изд. 2-е, испр. и доп.- М.: СОЛН-Пресс, 2004. 304с.- (Серия "Библиотека инженера").
- Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. - М.: Издательский дом "Додэка-ХХI", 2004. - 288 с.: ил. (Серия "Мировая электроника").
Теория.
В этой лабораторной работе мы кратко познакомимся с микроконтроллерами. Микроконтроллеры являются сердцем многих современных устройств и приборов, в том числе и бытовых. Самой главной особенностью микроконтроллеров, с точки зрения конструктора-проектировщика, является то, что с их помощью легче и зачастую гораздо дешевле реализовать различные схемы.
На рисунке изображена структурная схема типичного современного микроконтроллера.
Из рисунка видно, что микроконтроллер может управлять различными устройствами и принимать от них данные при минимуме дополнительных узлов, так как большое число периферийных схем уже имеется непосредственно на кристалле микроконтроллера. Это позволяет уменьшить размеры конструкции и снизить потребление энергии от источника питания.
Для сравнения: при использовании традиционных микропроцессоров приходится все необходимые схемы сопряжения с другими устройствами реализовывать на дополнительных компонентах, что увеличивает массу, размеры и потребление электроэнергии.
Давайте рассмотрим типичные схемы, присутствующие в микроконтроллерах.
- Центральное процессорное устройство (ЦПУ) — сердце микроконтроллера. Оно принимает из памяти программ коды команд, декодирует их и выполняет. ЦПУ состоит из регистров, арифметико-логического устройства (АЛУ) и цепей управления.
- Память программ. Здесь хранятся коды команд, последовательность которых формирует программу для микроконтроллера.
- Оперативная память данных. Здесь хранятся переменные программ. У большинства микроконтроллеров здесь расположен также стек.
- Тактовый генератор. Этот генератор определяет скорость работы микроконтроллера.
- Цепь сброса. Эта цепь служит для правильного запуска микроконтроллера.
- Последовательный порт — очень полезный элемент микроконтроллера. Он позволяет обмениваться данными с внешними устройствами при малом количестве проводов.
- Цифровые линии ввода/вывода. По сравнению с последовательным портом с помощью этих линий возможно управлять одновременно несколькими линиями (или проверять несколько линий).
- Таймер. Используется для отсчета временных интервалов.
- Сторожевой таймер. Это специальный таймер, предназначенный для предотвращения сбоев программы. Он работает следующим образом: после запуска он начинает отсчет заданного временного интервала. Если программа не перезапустит его до истечения этого интервала времени, сторожевой таймер перезапустит микроконтроллер. Таким образом, программа должна давать сторожевому таймеру сигнал — все в порядке. Если она этого не сделала, значит, по какой-либо причине произошел сбой.
В данной лабораторной работе изучается микроконтроллер 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 можно познакомится в электронном приложении к диплому.
Контрольные вопросы и задания.
- Измените программу светового эффекта в соответствии с индивидуальным заданием преподавателя?
- Как осуществляется программирование портов светодиодов?
- Как осуществляется зажигание и гашение светодиодов. Какова величина управляющего тока?
- Как осуществляется вызов подпрограммы в языке ассемблер?
- Как осуществляется пересылка информации из оперативной памяти в регистры процессора и обратно?