Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_AVR_2013_1-2.doc
Скачиваний:
19
Добавлен:
15.04.2015
Размер:
252.93 Кб
Скачать

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

Кафедра ЭВМ

А.В.Кистрин Схемотехника эвм

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

Рязань 2013

Программируемый тактовый генератор

Энергонезависимое

ПЗУ команд, FLASH 16 Кбайт

Статическое ОЗУ данных 1 Кбайт

Энергонезависимое ОЗУ данных EEPROM 1 Кбайт

Программируемый сброс и запуск микроконтроллера

Процессорное ядро AVR, с блоком из 32 рабочих регистров усовершенствованная RISC-архитектура

АЦП, аналоговый мультиплексор

Система прерываний, 20 векторов

Аналоговый компаратор

Система защиты программы и данных

Параллельные интерфейсы (порты)

А, В, С, D.

Последовательные интерфейсы SPI, UART, TWI

Таймеры 0, 1, 2

Сторожевой таймер


Работа 1. Знакомство с системой avr Studio

С

Рис. 1.1. Режим ввода программы

истемаAVR Studioпредназначена для проектирования и отладки программ микроконтроллеровAVR, использующих 8-разрядныйRISС- процессор с блоком регистров общего назначения (РОН), в котором обработка данных и пересылки выполняются с использованием РОН.

Новый проект в AVR Studio необходимо создать для начала работы .

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

Запустите программу AVRStudio. Укажите из меню: Project/New Project. В открывшемся окне укажите имя проекта (начинающееся с буквы), папку для размещения проекта, тип проекта - «AtmelAVRAssembler». Нажмите кнопкуNext. В следующем окне выберите платформу отладкиDebugPlatform– «AVRSimulator», укажите устройствоDevice– «ATmega16». Нажмите кнопкуFinish.

В

Окно созданного рабочего файла следует использовать впоследствии для ввода и исследования других программ. Создавать много новых проектов нежелательно. Для сохранения отлаженных программ их необходимо копировать в буфер обмена (Ctrl-C) и добавлять в другой файл (Ctrl-V), с именем, например, «Summa_prog.txt». Сохраненную программу можно вновь вставить в рабочий файл. После сохранения отлаженной программы можно вводить новую программу, используя начало и фрагменты предыдущей программы.

результате будет создан проект с выбранным именем и открыто окно рабочего файла для ввода текста программы на ассемблере (с расширением .asm). Выбранное имя будет присвоено всем файлам данного проекта. Файл с другим именем (заимствованный у соседей) компилятор обрабатывать не будет.

Задание 1.1. Методы адресации микроконтроллеров AVR.Введите программу 1.1. В режиме ввода программы посредством меню «View/Toolbars» целесообразно открыть окна и панели инструментов (как показано на Рис. 1.1), содержащие необходимую в данном режиме информацию.

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

Ассемблер AVRне чувствителен к регистру, на практике чаще используют нижний регистр.

Признак начала комментария- точка с запятой (;).В комментариях допускается русский шрифт. Символ начала комментария позволяет при отладке временно исключить из компиляции строку программы («закомментировать»). В программе 1.1. номера строк записаны как комментарий.

Директивы ассемблераначинаются с точки, определяют условия компиляции. Директива « .include"m16def.inc" », в строке 1, подключает к программе файл конфигурации, содержащий имена внутренних регистров микроконтроллера и соответствующие им адреса для конкретной моделиATmega16, что позволяет использовать в программе символические имена указателей, регистров и портов. Путь для просмотра файла: ...\Program Files\ Atmel \ AVR Tools \ AvrAssembler \ Appnotes \m16def.inc.

Директива « .def» назначает имена регистрам для повышения наглядности программы. Регистрr16 обычно используют для временного хранения в командах пересылки с непосредственной адресацией. Его можно назвать «tmp», или, что быстрее набирать - «ttt» (строка 2). Регистрыr17 -r20, названные «aa,ab,ac, ad» (строки 3 – 6) будут использоваться в качестве универсальных аккумуляторов, для обработки данных командами с регистровой и с непосредственной адресацией. Для работы со стеком необходима инициализация указателя стека. В указатель стека (регистрыsph:spl), записываются два байта, определяющие максимальный адрес ОЗУ. В строках 7 - 10 используются функций ассемблера «low» и «high», результаты которых – константы, равные соответственно младшему, или старшему байту выражения. Строки 1 - 10 программы 1.1. будут использоваться впоследствии как начало других программ. Различные методы адресации показаны на примере команд пересылки.

После ввода программы необходимо запустить компиляцию (Меню: Build/Build, или F7).

Отладка программы запускается из меню Debug/StartDebugging, или кнопкой с изображением треугольника. НажимаяF11 можно выполнить программу по шагам.

В режиме отладки используется другая настройка панелей инструментов и окон. Целесообразно открыть окна: Watch, I/O View, Memory, Processor.(Рис. 1.2).

В окне «Watch» удобно отображать значения всех переменных программы, указывая символические имена, или обозначения регистров. Для ввода имени необходимо установить указатель мыши на свободную клетку в столбце «Name», выполнить двойной щелчок, ввести имя, или обозначение регистра, нажать «Enter». Вид всех окон настраивается через контекстное меню, открываемое правой кнопкой мыши, можно выбрать размер шрифта, систему счисления для отображаемых данных. Для анализа выполнения логических операций, выполняемых поразрядно, удобна 16-ричная система, а для арифметических операций – десятичная.

Окно I/O View отображает содержимое всех регистров периферийных устройств и портов в режиме отладки, например, содержимое указателя стека (SPH:SPL), регистра состояния процессора (SREG), регистры портов А,B,C,D, регистры таймеров. На рис. 1.2. в окне показано содержимое порта А.

Для работы с окном «Memory»необходимо указать тип отображаемой памяти, отключить отображение символов кнопкой «abc», установить количество колонок таблицы – 16 в окошке «Cols». На рис. 1.2 открыты два окна памяти данных, указан тип памяти «Data», верхнее окно отображает содержимое младших адресов, а нижнее – старших, где расположен стек.

В

Рис. 1.2. Режим отладки программы

окне «Processor» отображаются временные параметры выполнения программы, регистр признаков результата «Sreg», указатели стека, косвенных адресов, программный счетчик. Закладка «Project» позволяет в этом же окне получить доступ ко всем файлам проекта, в частности, к файлу конфигурации.

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

1. Непосредственная адресация. Команды с непосредственной адресацией используют для загрузки в регистры исходных данных задачи при инициализации процесса вычислений. Мнемоники команд содержат букву «i» от слова «Immediate» - непосредственно, данные содержатся в команде. Непосредственная адресация используется только с регистрами отr16 доr31. Именно в этом сегменте указаны аккумуляторы «aa-ad», которые впоследствии будут использоваться как наиболее универсальные РОН. В командах пересылки с непосредственной адресацией (строки 7, 9, 11 - 15) после мнемоники «ldi» указывают регистр, куда переслать данные, затем - через запятую - однобайтовую константу. Систему счисления указывают префиксом: 0х, или $ - 16-ричная; 0b- двоичная; префикса нет - десятичная.

2. Регистровая адресация.Операнды размещены в любом из РОН -r0 –r31 (весь сегмент РОН). В команде пересылки с регистровой адресацией (строки 16, 17) после мнемоники «mov» на первом месте указан регистр, куда переслать результат (получатель), а на втором – регистр, откуда переслать (источник). С регистрами r1 - r15 не работает непосредственная адресация.

Все внутренние регистры микроконтроллера имеют адреса в ОЗУ данных, подобно ячейкам памяти. Регистр можно указать в программе тремя способами: его номером, (например, r16), именем пользователя (например, «ttt»), или как ячейку памяти (адрес 0х0010).

3. Адресация портов ввода – вывода, или регистров периферийных устройств – прямая, в командах указывают имя (например,porta), или адрес порта (0x1b- для порта А). Вывод данных в порт из регистра выполняет команда «out», а ввод в регистр из порта – команда «in» (строки 18, 19). Во всех командах на первом месте указан получатель, а на втором – источник данных.

Порты с адресами 0 – 1f16допускают использование команд с битовой адресацией (SBR-SetBitinRegister,CBR-ClearBitinRegister).

; Программа .1.1.

; Команды пересылки

.include "m16def.inc";1

.def ttt = r16 ;2

.def aa = r17 ;3

.def ab = r18 ;4

.def ac = r19 ;5

.def ad = r20 ;6

ldi ttt, high(ramend);7

out sph, ttt ;8

ldi ttt, low(ramend) ;9

out spl, ttt ;10

ldi ttt, 10 ;11

ldi aa, 0x10 ;12

ldi ab, 0x20 ;13

ldi ac, 0x30 ;14

ldi ad, 0x40 ;15

mov r2, aa ;16

mov r3, ab ;17

out porta, ac ;18

in r4, porta ;19

sts 0x0060, ttt ;20

lds r5, 0x0060 ;21

sts 0x0005, ttt ;22

ldi xh, 0 ;23

ldi xl, 0x70 ;24

st x+, aa ;25

st x+, ab ;26

ld ad, -x ;27

push aa ;28

push ab ;29

push ac ;30

pop r10 ;31

pop r11 ;32

pop r12 ;33

m: inc r10 ;34

rjmp m ;35

4. При прямой (абсолютной) адресациикоманда содержит 2-байтовый адрес операнда (0x0000 – 0xffffв 16-ричной системе счисления), который позволяет адресовать до 64 Кбайт памяти. Это адресное пространство ОЗУ данных, содержащее адреса ячеек памяти и всех регистров.

Адреса 0x0000 – 0x001fпозволяют обращаться к РОН; адреса 0x0020 – 0x005fсоответствуют портам и регистрам внешних устройств, а с адреса 0x0060 начинается ОЗУ данных. Максимальный адрес физической памяти «Ramеnd», указан в файле конфигурации, для моделиATmegaон равен 0x045f.

Команды с прямой адресацией (строки 20 – 21), выполняют запись в память по адресу 006016 содержимого регистра ttt, затем загрузку регистраr5 содержимым указанной ячейки памяти.

В строке 22 показана запись в регистр r5 содержимого регистра ttt. Регистр r5 адресуется как ячейка памяти с адресом 000516.

5. Косвенная адресацияиспользуется в командах пересылки данных между РОН и любой ячейкой адресного пространства, чаще всего - ОЗУ. Команда содержит указатель адреса операнда (X,Y, илиZ). Вначале выполняется инициализация указателя (строки 23, 24), а зтем – пересылка. Команды с косвенной автоинкрементной и автодекрементной адресацией (строки 25 - 27) предназначены для работы с массивами данных.

Косвенная регистровая адресация используется также в командах записи содержимого регистра в стек (push- втолкнуть) и загрузки регистра из стека (рор - вытолкнуть), регистром косвенного адреса является указатель стека, состоящий из двух регистров «sph:spl», в который обычно записывают максимальный адрес физической памяти «Ramеnd». Указатель показывает на последнюю занятую ячейку, при записи его содержимое уменьшается (предекремент), а при чтении – увеличивается (постинкремент). Обмен данными между портом и памятью возможен посредством промежуточного хранения в регистре.

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

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

Задание 1.2. Вычисление среднего значения двухбайтных чисел(программа 1.2). Команды арифметических и логических операций с регистровой, или непосредственной адресацией выполняют обработку данных, формируют признаки результата в регистре состояния процессораSREG.

Регистр состояния процессора, содержащий признаки результата, имеет 16-ричный номер $3F, имя SREG (назначено в файле "m16def.inc"), и может быть указан как ячейка памяти с адресом 0х005F.

$3F SREG - StatusRegister

Регистр состояния процессора

I

T

H

S

V

N

Z

С

7

6

5

4

3

2

1

0

I- разрешение (командойsei) или запрещение (cli) всех прерываний.T- бит пользователя.H- половинный перенос из младшей тетрады в старшую.S- Правильный знак результата и при переполнении разрядной сетки:S=NxorV.V– переполнение для знакового результата.N- старший бит результата, признак отрицательного числа.Z-признак нуля.C– перенос.

Команды арифметических операций с регистровой адресацией позволяют выполнить суммирование и вычитание, для работы с многобайтными числами необходимы команды с учетом переноса. ADD, ADC (Add with Carry), SUB, SBC (Subtract with Carry).

Непосредственная адресация имеется только для вычитания, SUBI (Subtract Immediate). SBCI (Subtract Immediate with Carry). Для сложения нужно вычесть отрицательное число.

Разрядность операндов - 1 байт. При суммировании М-разрядных чисел сумма может иметь М+1 разряд, дополнительный разряд записывается как признак переполнения «С=1». Переполнение при вычитании устанавливает признаки С=1 и N=1. Произведение М -разрядных чисел имеет 2М разрядов.

В программах, содержащих арифметические операции для упрощения анализа результатов при отладке, целесообразно использовать десятичную систему счисления. Контроль принадлежности числа к диапазону в программах на языках высокого уровня выполняет компилятор, а на ассемблере – пользователь.

Если числа считаются положительными, то диапазон их значений будет от 0 до 1111 11112=FF16= 25510. Максимальное положительное число 255 плюс 1, даст результат ноль и переполнение (С = 1).

Если те же данные считать числом со знаком, вдополнительном 8-разряднм коде, то максимальному числу соответствует код: 0111 11112 = 7F16, = 12710, а минимальному числу, равному -12810 - код: 1000 00002 = 8016 = 12810. Отрицательному числу (-1) соответствует десятичное число в дополнительном коде 255. Прибавление единицы к максимальному положительному числу 127 даст в результате минимальное число -128 и признак переполнения V.

Учитывая, что прямой и дополнительный коды в сумме дают 2n, модуль М отрицательного 8-разрядного числа, записанного в дополнительном коде (ДК), можно найти в десятичной системе по формуле: М=256 – ДК, аналогично: ДК=256-М. Например, дополнительный код числа -5 в десятичной системе равен 251, а дополнительному коду 240 соответствует число -16.

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

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

Задание 1.3. Умножение положительных чисел. Команда умножения «mul» перемножает однобайтные положительные сомножители, размещенные в регистрах, указанных в команде. Двухбайтное произведение всегда формируется в регистрахR1:R0. Запись через двоеточие означает, что отдельные байты объединяются в двухбайтное число, в которомR1 содержит старший байт результата, аR0 - младший.

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

Задание 1.4. Измените программу задания 1.3 для проверки работы команд умножения знаковых чисел muls. Проверьте корректность работы программы при максимальных значениях сомножителей.

Команда умножения знаковых чисел «muls» перемножает 7-разрядные модули чисел, представленные в прямом коде. Знак произведения определяет операцияEORнад знаковыми битами сомножителей. Команда «mulsu» выполняет умножение знакового (Signed) числа на беззнаковое (Unsigned) число. В команде после мнемоники «mulsu» на первом месте записывается знаковое, а на втором – беззнаковое число. При отладке программы целесообразно записать аккумуляторы и регистрыR0,R1 в окноWatch.

Задание 1.5. Измените программу задания 1.3 для проверки работы команд умножения знакового числа на беззнаковое mulsu. Проверьте корректность работы программы при максимальных значениях сомножителей.

Задание 1.6. Используя Help программы AVR Studio, составьте описание наиболее употребительных директив ассемблера.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]