Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микроконтроллеры AVR

.pdf
Скачиваний:
115
Добавлен:
27.03.2015
Размер:
629.41 Кб
Скачать

Министерство общего и профессионального образования Российской Федерации

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

С.В. КВЕГЛИС

МИКРОКОНТРОЛЛЕРЫ AVR

Методическое пособие к лабораторному практикуму для

студентов II-IV курсов АВТФ специальностей 190500, 190900, 071900

НОВОСИБИРСК

2003

Квеглис С.В. Микроконтроллеры AVR: Методич. пособие. – Новосибирск: Изд-во НГТУ, 2003 – 52 с.

Табл. 5, ил. 8, список лит. 5 назв.

Рецензент: С.П. Зубов, канд. тех. наук

Работа подготовлена на кафедре систем сбора и обработки данных

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

Введение

Тенденции развития современной техники таковы, что микропроцессорные устройства находят все более широкое применение там, где раньше обходились не только без них, но и без электроники вообще. Одновременно, в ранее "занятых" микропроцессорными устройствами областях круг решаемых задач и требования к качеству и скорости их решения растут: там, где в 80-е годы применялись 4-разрядные устройства, сейчас часто используют 16-разрядные. По статистическим данным за 2002г., среди производителей Юго-Восточной Азии (одного из мировых центров производства электроники) 16- и 32разрядные устройства уже более популярны, чем 8-разрядные. Однако, поскольку нет каких-либо глубоко принципиальных отличий в разработке изделий на базе 8-, 16или более высокоразрядных микроконтроллеров, а 8- разрядные все еще дешевле своих собратьев, для целей обучения можно признать наиболее подходящими именно 8-разрядные микроконтроллеры.

Ныне основную часть российского рынка 8-разрядных микроконтроллеров между собой делят:

-современные клоны семейства Intel MCS-51 (выпускаемые как самой корпорацией Intel, так и Phillips, Atmel, Maxim IC, поглотившим Dallas Semiconductor, и другими);

-семейства HC05, HC08, HC11 от Motorola и их клоны;

-семейство PIC от MicroChip;

-семейство AVR от Atmel.

Автор не собирается проводить здесь сравнение этих семейств и как-то обосновывать свой выбор в пользу AVR для курса лабораторных работ. Цель настоящей работы, как и курса в целом, НЕ "изучение" какого-то микроконтроллера. Цель – на примере микроконтроллера определенного типа научить студентов основным приемам и особенностям проектирования изделий с использованием микроконтроллеров и программ для них. Заложенная таким образом база должна позволить в дальнейшем специалисту использовать в своих проектах любой микроконтроллер, самостоятельно выбранный по какимто критериям, либо "заданный" какими-то обстоятельствами.

Данное методическое пособие также не ставит своей целью замену каких-либо справочников, руководств пользователя и т.п. Уже имеется ряд печатных изданий с подробной информацией по AVR на русском языке, многие описания доступны в Интернете – ссылки на некоторые из них приведены в конце этого пособия. Кроме того, автор убежден, что сегодня любой технический специалист (или желающий таковым стать) должен уметь работать с источниками на английском языке. Иначе, ему придется по несколько лет ждать, пока кто-нибудь удосужится перевести и опубликовать информацию по новым устройствам, технологиям, программам и т.д. – что не лучшим образом будет сказываться на его квалификации. Поэтому, пользоваться справочной литературой при выполнении лабораторных работ – НЕОБХОДИМО. (На

3

рабочих местах установлены электронные справочники на русском языке по среде проектирования AVR Studio, системе команд и Ассемблеру микроконтроллеров AVR, описание микроконтроллера At90S2313).

Микроконтроллер, по определению, представляет собой микросхему, в которой интегрированы процессорное ядро и развитая периферия (различная память, таймеры, параллельные порты ввода/вывода, последовательные интерфейсы, АЦП, ЦАП и т.д.). Как заметили авторы [1], "все, что может изобрести инженерная мысль в рамках однопроцессорного подхода, может быть сделано в виде одной БИС", и поэтому, при обсуждении процессорной архитектуры нет разницы между процессором и микропроцессором. В методическом пособии мы будем часто обсуждать черты архитектуры, общие для процессоров, микропроцессоров и процессорных ядер микроконтроллеров. Для краткости, во всех этих случаях мы будем использовать термины "процессор", "архитектура процессора" и т.п., подразумевая не только процессор, но и микропроцессор, процессорное ядро микроконтроллера.

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

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

Лабораторная работа №1. Знакомство со средой проектирования AVR-Studio. Система команд AVR: арифметические команды

Цели работы:

1.Знакомство с основными возможностями среды проектирования AVR-Studio (создание проекта, включение в него файлов; компиляция; запуск программы на исполнение в симуляторе; использование основных отладочных ресурсов – пошагового исполнения, установки точек останова, просмотра и изменения состояния регистров, памяти).

2.Знакомство с арифметическими командами AVR (состав, особенности использования, влияние на флаги регистра состояния процессора, способы повышения разрядности арифметических операций).

Порядок выполнения работы (п.п. 1-3 выполняются во внеаудиторное время):

1.Ознакомьтесь с теоретической частью лабораторной работы.

2.Разработайте блок-схемы программ для заданий 2-6.

3.Подготовьтесь к ответу на контрольные вопросы 6-18.

4.Получите допуск к выполнению практической части лабораторной работы.

5.Выполните задания, подготовьтесь к ответу на контрольные вопросы 1-5.

6.Защитите лабораторную работу.

4

Информация об основных функциях AVR Studio находится в файле справки среды AVR Studio (раздел AVR Studio). Информация о структуре программ на языке Ассемблера AVR, выражениях и директивах ассемблера также находится в файле справки среды AVR Studio (раздел AVR Assembler).

Систему команд At90S2313 можно разделить на следующие основные группы:

-команды пересылок данных;

-арифметические и логические команды и команды манипуляций с битами;

-команды передачи управления;

-специальные команды (NOP, WDR, SLEEP).

Данная лабораторная работа посвящена знакомству с арифметическими командами.

Команды сложения At90S2313: сложение двух регистров (ADD), сложение двух регистров с учетом флага переноса (ADC), сложение слова с константой (ADIW). Эти команды устанавливают флаг переноса C, если при их выполнении произошел перенос из старшего, 7-го (для команды ADIW – 15-го) разряда результата, и сбрасывают, если перенос не произошел. Флаг C позволяет организовать сложение чисел любой разрядности, пользуясь командами ADD и ADC. Следующий пример показывает сложение двух 24-разрядных чисел, хранящихся в регистрах r2:r1:r0 и r5:r4:r3; результат сохраняется в регистрах r2:r1:r0.

add r0,r3 ;сложение младших байтов операндов

adc r1,r4 ;сложение средних байтов операндов, учитывая перенос из 7-го бита adc r2,r5 ;сложение старшие байтов операндов, учитывая перенос из 14-го бита

Приведенный фрагмент корректен для чисел как со знаком, так и без знака. Для представления знаковых чисел, как и в большинстве целочисленных процессоров, в AVR используется дополнительный код. Вообще, для выполнения знаковых и беззнаковых операций сложения и вычитания используются одни и те же команды. Отличие имеется лишь в интерпретации результата. Так, флаг переполнения V устанавливается при выполнении операций сложения в том случае, если при одинаковых знаковых разрядах операндов результат имеет другой знак. Иначе, флаг V сбрасывается. Если рассматривать операнды и результат как знаковые, флаг V будет установлен, если результат больше максимального или меньше минимального для данной разрядной сетки числа со знаком. Например, выполняем команду ADD – сложение 8-разрядных регистров. Для 8-разрядной сетки минимальное число равно –128, максимальное равно +127. При попытке сложить –15 и –120, или, скажем, +54 и +93, очевидно, будет происходить переполнение и устанавливаться флаг V.

Флаг отрицательного результата N будет устанавливаться, если старший, знаковый, разряд результата равен единице (т.е., результат – отрицательный, если рассматривать его как знаковое число).

5

Флаг знака S принимает значение исключающего ИЛИ флагов N и V: N V. То есть, при отсутствии переполнения (V=0) флаг S дублирует флаг отрицательного результата N; при наличии переполнения – содержит инверсию флага N, или, что то же самое – знак 9-разрядного знакового результата операции.

Флаг полупереноса H по своей сути аналогичен флагу C – он устанавливается при наличии переноса из 3-го разряда результата. Этот флаг может быть использован для реализации операций с 4-разрядными числами, а также с числами в BCD-формате. В следующем фрагменте показано одновременное сложение двух пар 4-разрядных чисел. При наличии переноса из результата сложения младших тетрад в результат сложения старших производится коррекция.

add r16,r17 brhc m1

subi r16,0x10

m1:

Флаг Z устанавливается в случае, когда восемь (для ADIW – шестнадцать) младших разрядов результата равны нулю.

Особенностью команды ADIW являются ограничения:

-на значение константы (она должна быть в диапазоне от 0 до 63);

-на используемые регистры (применяются только пары регистров r25:r24, r27:r26, r29:r28 и r31:r30; в команде указывается младший регистр

пары).

Корректное использование команды ADIW:

adiw r24,15 ;к содержимому 16-разрядного регистра r25:r24 прибавляется 15 adiw r30,49 ;к содержимому 16-разрядного регистра r31:r30 прибавляется 49

Некорректное использование команды ADIW:

adiw r24,75 ;значение константы превышает 63 adiw r27,15 ;недопустимый регистр

Команды вычитания At90S2313: вычитание двух регистров без учета заема (SUB), вычитание двух регистров с учетом заема (SBC), вычитание константы из регистра без учета заема (SUBI), вычитание константы из регистра с учетом заема (SBCI), вычитание константы из слова (SBIW).

Эти команды используют флаг C как флаг заема: он устанавливается, если уменьшаемое меньше вычитаемого (т.е., произошел заем из 8-го, следующего за старшим, разряда вычитаемого). Аналогично случаю с операциями сложения, при вычитании флаг C также позволяет наращивать разрядность. Пример показывает вычитание двух 24-разрядных чисел (r5:r4:r3 из r2:r1:r0); результат сохраняется в регистрах r2:r1:r0.

sub r0,r3 ;вычитаем младшие байты операндов

sbc r1,r4 ;вычитаем средние байты операндов, учитывая заем из 8-го бита sbc r2,r5 ;вычитаем старшие байты операндов, учитывая заем из 15-го бита

6

Команды SUBI и SBCI позволяют вычитать константы из регистров. Ограничений на значения констант (в отличии, например, от команд ADIW и SBIW) в этих командах нет (т.е., константы могут принимать значения от 0 до 0xFF). Однако, эти команды применимы только к старшей половине регистрового файла. С помощью этих команд можно реализовать и операцию сложения регистров с константами, поскольку R+K R–(–K). Например, 16разрядное сложение регистровой пары r17:r16 и числа 51 будет выглядеть следующим образом:

subi r16,LOW(-51) ; sbсi r17,HIGH(-51) ;

Флаг переполнения V устанавливается при наличии заема из 7-го, знакового, бита результата. Флаги N, Z и S при вычитании ведут себя также как и при операциях сложения. Флаг H устанавливается при наличии заема из 4 бита уменьшаемого.

Команда 16-разрядного вычитания константы из регистра SBIW имеет те же ограничения на регистры и константы, что и команда сложения ADIW.

Еще две арифметические команды – INC и DEC отвечают, соответственно, за увеличение и уменьшение значений регистров на единицу:

inc r16 ;r16 <- r16+1 dec r0 ;r0 <- r0–1

В отличие от команд сложения и вычитания, команды инкремента и декремента не изменяют состояния флагов C и H, поэтому, например, попытка декрементировать 16-разрядную переменную r17:r16 следующим образом будет некорректна:

dec r16 sbci r17,0

Корректным будет, например, такой вариант:

subi r16,1 sbci r17,0

Остальные флаги при выполнении команд инкремента и декремента ведут себя так же, как и при обычных операциях сложения и вычитания.

Несколько команд позволяют анализировать значения одного или двух регистров, не изменяя эти значения: сравнение двух регистров (CP), сравнение двух регистров с учетом флага заема (CPC), сравнение регистра с константой (CPI), проверка содержимого регистра на равенство нулю (TST).

Команды сравнения изменяют флаги так же, как и операции вычитания, но не изменяют значения регистров. Команда CPI работает только со старшей половиной регистрового файла.

Время выполнения всех арифметических команд составляет один такт синхронизации процессора. Исключением являются команды, работающие со словами (ADIW и SBIW) – они выполняются за два такта.

7

Задания:

1.Создайте в вашем рабочем каталоге новый проект для микроконтроллера At90S2313. Создайте новый ассемблерный файл и включите его в состав проекта. Напишите простейшую программу, подобную показанной в примере 1. Откомпилируйте её и загрузите на выполнение в симуляторе. Пользуясь справочной системой AVR-Studio, на примере данной программы научитесь пользоваться основными функциями отладчика:

-загрузка, запуск и останов программы, сброс микроконтроллера;

-пошаговое выполнение программы;

-задание точек останова;

-просмотр состояния процессора;

-просмотр и изменение состояния регистров, памяти данных и Flashпамяти программ.

2.Напишите программу а) сложения, б) вычитания двух 32-разрядных регистровых переменных.

3.Напишите программу сложения 16-разрядной и 8-разрядной регистровых переменных для случаев, когда обе переменные а) знаковые и б) беззнаковые.

4.Напишите программу сложения 32-разрядной регистровой переменной с константой.

5.Напишите программу, которая находит модуль разности двух 8-разрядных чисел а) без знака, б) со знаком.

6.Напишите программу, которая вычисляет сумму r1:r0 и r3:r2, если r1:r0==r3:r2, разность r1:r0 и r3:r2, если r1:r0 и r3:r2 имеют разные знаки, иначе вычисляет выражение r1:r0+(0xFFFF-r3:r2).

Пример 1:

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

.INCLUDE "..\appnotes\2313def.inc" ;подключение файла со

;спецификацией регистров ввода/вывода

.CSEG

;сегмент кода

 

 

 

rjmp Reset

;вектор прерывания, вызываемого по сбросу микроконтроллера

Reset:

 

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

r17 в единицу

ser r17

 

;установка всех битов

mov r0,r17

 

;копирование содержимого r17 в r0

ldi r16,0x55

;загрузка в

r16 числа

0x55

subi r16,0x11

;r16<-r16

-

0x11

 

add r16,r0

 

;r16<-r16

+

r0

 

rjmp PC

;бесконечный цикл

 

 

Контрольные вопросы и задания:

1.Какими средствами симулятора AVR-Studio можно воспользоваться для просмотра значений регистров-указателей X, Y, Z?

8

2.Необходимо оценить время исполнения некоторого фрагмента программы. Какими средствами симулятора AVR-Studio можно воспользоваться для решения этой задачи?

3.При симуляции программы из примера 2 необходимо заполнить массив значениями, отличными от нуля. Какими средствами симулятора Вы для этого воспользуетесь?

4.Покажите средствами AVR-Studio, что команда очистки регистра clr Rd на самом деле имеет тот же машинный код, что и команда исключающего ИЛИ eor Rd, Rd.

5.Оценка времени исполнения некоторого фрагмента программы показала значение 10 мкс при тактовой частоте микроконтроллера 2 МГц. Какое время займёт её исполнение при тактовой частоте 10 МГц?

6.Для чего в конце программы нужен оператор rjmp PC ?

7.Укажите общие черты и отличия процессора, микропроцессора и микроконтроллера.

8.Особенности основных современных типов ПЗУ (Flash, EPROM, EEPROM, EPROM с УФ стиранием).

9.Гарвардская и фон-неймановская архитектуры компьютеров.

10.Представление целых чисел в ЭВМ: прямой и дополнительный коды. Правила операций сложения и вычитания чисел в прямом и дополнительном кодах.

11.Арифметические флаги процессорного ядра AVR, их назначение.

12.Разница между флагами переноса и переполнения.

13.Наращивание разрядности операций сложения.

14.Наращивание разрядности операций вычитания.

15.Особенности реализации в AVR команд инкремента и декремента. 16.Реализация операции сложения с константой через команду вычитания. 17.Как с помощью 8-разрядных команд сравнения организовать сравнение

переменных большей разрядности? Переменной и константы?

18.Как корректно сложить (вычесть) два операнда разной разрядности, если они знаковые (беззнаковые)?

Лабораторная работа №2. Режимы адресации. Команды пересылок.

Команды переходов

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

Порядок выполнения работы (п.п. 1-3 выполняются во внеаудиторное время):

1.Ознакомьтесь с теоретической частью лабораторной работы.

2.Подготовьтесь к ответу на контрольные вопросы 7-17.

3.Подготовьте блок-схемы программ для заданий 5-7.

4.Выполните задания, подготовьтесь к ответу на контрольные вопросы 1-6.

5.Защитите лабораторную работу.

9

Одна из особенностей процессоров с архитектурой RISC – вычислительные команды работают только с регистрами (для AVR примером таких команд может служить, например, ADD), либо с регистрами и константами, входящими в код команды (например - ADIW). Все остальные режимы адресации в RISCпроцессорах реализуются только для команд пересылок данных. Описание режимов адресации At90S2313 приведено в приложении 2.

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

-загрузка константы в регистр;

-пересылки между регистрами общего назначения;

-пересылки с регистрами ввода/вывода;

-пересылки с памятью данных;

-пересылки с памятью программ;

-операции со стеком.

Все команды пересылок не изменяют значения флагов регистра состояния процессора SREG.

Загрузку константы в регистр выполняет команда LDI. Как и большинство других команд, оперирующих с константами, она применима только к старшей половине регистрового файла.

ldi r16,0x31 ;в r16 заносится значение 0x31

Пересылки между регистрами выполняет команда MOV – с ее помощью данные из одного регистра могут быть помещены в любой регистр.

mov r0,r27 ;содержимое r27 копируется в r0

Пересылки между регистрами общего назначения и регистрами ввода/вывода выполняются с помощью команды чтения из регистра ввода/вывода IN и записи в регистр ввода/вывода OUT.

in r7,PORTB ;загрузить в r7 данные из регистра ввода/вывода PORTB out PORTD,r18 ;вывести в регистр ввода/вывода PORTD содержимое r18

Четыре команды пересылки данных (LDI, MOV, IN и OUT) имеют время исполнения равное одному такту синхронизации процессора. Остальные команды пересылки исполняются либо за два такта, либо за три (LDS, STS,

LPM).

Пересылки между регистрами и памятью данных выполняются с помощью команд LD, ST, LDD, STD, LDS, STS. Команды LD (память → регистр) и ST (регистр → память) используют косвенную адресацию. В качестве регистровуказателей в этих командах используются 16-разрядные регистры X, Y и Z (образованные регистровыми парами r27:r26, r29:r28 и r31:r30, соответственно). Косвенная адресация может быть простой (второй операнд обозначается как X, Y или Z), с пре-декрементом указателя (второй операнд

10