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

326-2014 ДГЦУиМП

.pdf
Скачиваний:
14
Добавлен:
26.03.2016
Размер:
1.36 Mб
Скачать

3. Лабораторные задания и методические указания по их выполнению

3.1. Создайте проект для исследования программы записи чисел в регистры микроконтроллера Attine2313.

.include "tn2313define"

.list

.deftemp=r16; Присвоение названия рабочим регистрам

.def templar 17;

.def temp2=rl8;

.def temp3=rl9;

.def temp4=r20;

ldi temp,ObOO100011; запись чмела 35(двоичная форма) в рабочий регистр temp

ldi tempi,0x23;

запись числа 35(шестнадцатеричная форма)

в рабочий регистр tempi

ldi temp2,35;

запись числа 35(десятичная форма) в рабочий

регистр temp2

 

out PortD,temp;

запись значения из temp в PortD

in temp3,PortD;

копирование значения из PortD, в temp3

out PortB,tempi ;

запись значения из tempi в PortB

in temp4,PortB;

копирование значения из PortB в temp4

3.2.В режиме отладки, отпфыв соответствующие окна и проанализировав состояния регистров микроконтроллера и регистров ввода/вывода, убедитесь в правильности ее работы (см.пункты 2.2-2.4).

3.3.Замените в программе микроконтроллер Attine2313 на ATmegal28. Запустите программу, проанализировав

состояния регистров микроконтроллера и регистров ввода/вывода, убедитесь в правильности ее работы (см.пункты 2.2-2.4).

3.4. Замените в программе регистры rl6,rl7,rl8,rl9,r20 на регистры г23,г24,г25,г26,г27 соответственно и число 35 (десятичная форма) на 134 (десятичная форма). Запустите программу, проанализировав состояния регистров

9

микроконтроллера и регистров ввода/вывода, убедитесь в правильности ее работы (см. пункты 2.2-2А).

4. Оформление отчета

Отчет должен содержать:

1.Тексты программ в соответствии с пунктами 3.1,3.3,3.4 лабораторного задания.

2.Пояснения к исправлению ошибок в тексте программ, выявленных в процессе их отладки.

3.Состояние регистров и портов( см.окна I/O View, Register),подтверждающие правильность

работы программы.

4.Выводы.

Вопросы для самопроверки

1.Какие программные средства включает в себя пакет AVR Studio?

2.Какие действия необходимо сделать ,чтобы создать новый проект?

3.Какие действия необходимо сделать ,чтобы запустить ранее созданный проект?

4.Как выполнить компиляцию исходного кода программы?

5.Что собой представляет отладка программы в AVR Studio?

6.Как выполнить пошаговое выполнение программы?

7.Что такое точки останова и как они устанавливаются в AVR Studio?

8.Как определить состояние процессора?

[1,0.61-89], [2.С. 17-66].

10

Лабораторная работа № 2 Изучение команд работы с регистрами микроконтроллера

ипамятью

1.Общие указания

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

Исследуются программы, позволяющие осуществлять загрузку регистров, пересылку информации из одного регистра в другой, команды записи иди чтения памяти

Используемое оборудование: Компьютер 1ВМ РС.

2. Краткие сведения из теории

Блок регистров общего назначения содержит 32 восьмиразрядных регистра с шестнадцатеричными адресами $00 - $1Б в пространстве памяти данных. К ним можно обращаться и по именам КО - К31, Шесть регистров с именами от К24 до К31 могут образовывать пары для хранения шестнадцатиразрядных слов, причем регистр с четным номером хранит младший байт, а регистр с нечетным номером - старший байт. Этим спаренным регистрам присвоены имена Х(К27Д26), У(К29,Я28), 2(Ю1,Ю0). Они могут использоваться как индексные регистры в командах обращения к памяти данных. Регистр Ъ может также использоваться для чтения из памяти программ отдельных байтов, что позволяет хранить в ней таблицы данных.

Регистры ввода-вывода - это блок из 64-х байтов, ,з котором содержатся как регистры управления процессором, так и регистры интерфейса ввода-вывода. Существует два способа обращения к регистрам ввода-вывода и РОН:

1) прямое обращение к каждой из этих областей данных (используется в основном при выполнении арифметических операций);

11

2) объединение трех областей регистров РОН, регистров ввода-вывода и памяти в общее адресное пространство данных.

В адресное пространство МК, помимо адресов, по которым выполняется обращение к ячейкам ОЗУ данных, включены 32 адреса для обращения к РОН (адреса от $00 до $1F) и 64 адреса для обращения к регистрам ввода-вывода (адреса от $20 до $5F). Первой ячейке SRAM соответствует адрес $60. Адрес для обращения к РОН по команде обращения

кSRAM совпадает с номером регистра, а адрес для обращения

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

Программа на языке AVR представляет собой текстовый файл с расширением “.asm”, который состоит из одного или нескольких сегментов различных типов. Запись программы выполняется построчно. По желанию пользователя, любой строчке он может присвоить метку, своеобразное название строки, которая в дальнейшем будет использоваться в программе для адресации, переходов и др.операций. Запись метки заканчивается символом «:».В качестве пояснений кода программы, пользователь может вставлять комментарии, отделяя их от исходного текста символом «;».

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

Рассмотрим директивы, которые можно использовать при

написании программ, в соответствии с домашними заданиями к лабораторным работам..

•DEVICE - определяет тип целевого микроконтроллера. Директива DEVICE позволяет программисту указать, на каком микроконтроллере будет выполняться программа. Если в тексте программы указана эта директива, транслятор ассемблера будет проверять текст программы на наличие недопустимых операций. Если директива DEVICE отсутствует в тексте программы - разрешены все команды семейства микроконтроллеров AVR, а размеры памяти не проверяются. Синтаксис: .device attmy2313

12

.С8ЕС - сегмент кода. Директива С8ЕС определяет начало сегмента кода (программ). В исходном тексте программы может быть несколько сегментов кода. Транслятор ассемблера в процессе компиляции программы объединяет все сегменты кода в один. Директива .ВУТЕ не может быть использована в сегменте кода. Если в программе нет явного указания названия сегмента, по умолчанию считается, что это сегмент кода. Директива .С8ЕО не имеет никаких параметров. Сегмент кода имеет свой счетчик слов.

О ВСпринудительное позиционирование указателя текущего адреса.

Может быть использована для размещения кода или констант в определенном программистом месте памяти программ. Имеет всего один параметр-новое значение указателя адреса.

ВУТЕ - резервирует место (или несколько мест) размером 1 байт для переменной.

Директива ВУТЕ резервирует один байт в памяти БКАМ для реализации переменной. Для того, чтобы иметь возможность обращаться к этой переменной, перед директивой ВУТЕ должна стоять метка. Директива имеет один параметр - количество байтов для резервирования. Директива может использоваться только для резервирования места в памяти данных.

.БВ - определить байты-константы в памяти программы или ЕЕРКОМ. Директива . БВ резервирует место в памяти программ или ЕЕРКОМ. Для того чтобы иметь возможность обращаться к зарезервированному пространству, перед этой директивой следует ставить метку. Директива БВ может быть расположена только в сегменте кода или ЕЕРКОМ. Параметрами директивы . БВ является список выражений. Список выражений представляет собой одно или несколько выражений, разделенных запятыми. Каждое выражение может быть равно числу от -128 до 255. Если выражение представляет собой отрицательное число, оно будет помещено в память программ или ЕЕРКОМ в дополнительном коде. Если

13

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

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

.DSEG - сегмент данных. Директива DSEG определяет начало сегмента данных. В исходном тексте программы на ассемблере может быть несколько сегментов данных. В процессе трансляции все они будут объединены в один. Обычно сегмент данных содержит только директивы ВУТЕ с метками. Сегмент данных имеет свой счетчик байтов.

. DW - определение слов-констант в памяти программ или EEPROM. Директива DW резервирует место в памяти программ или EEPROM. Для того чтобы иметь возможность обращаться к зарезервированному пространству, перед этой директивой следует ставить метку. Директива DW должна быть расположена в сегменте кода или EEPROM. Параметрами директивы DW является список выражений. Список выражений представляет собой одно или несколько выражений, разделенных запятыми. Каждое выражение может быть равно от -32768 до 65535. Если выражение представляет собой отрицательное число, оно будет помещено в память программ или EEPROM в дополнительном коде.

.MACRO - начало определения макрокоманд. Директива MACRO указывает транслятору ассемблера на начало определения макрокоманды. Параметром директивы MACRO является имя определяемой макрокоманды. В дальнейшем при обнаружении в тексте программы имени

14

макрокоманды транслятор ассемблера будет фактически заменять это имя на содержание макрокоманды. Макрокоманда может иметь до 10 параметров. Эти параметры фиксированные имена: @0 ... @9. При вызове макрокоманды параметры должны быть представлены в виде списка, разделенного запятыми. Определение макрокоманды завершается директивой .ENDMACRO. Нельзя использовать вложенные макрокоманды.

.EQU - присвоить символьному обозначению выражение. Директива JEQU присваивает символьному обозначению значение выражения. В дальнейшем это символьное обозначение может быть использовано в выражениях. Присвоенное значение - константа. В дальнейшем тексте программы это символьное выражение не может быть переопределено или изменено.

.EXIT - конец текста программы. Директива .EXIT указывает на завершение программы. Подобной директивой обязана оканчиваться любая программа.

.ORG - установка значения счетчика расположения. Директива ORG присваивает абсолютное значение счетчику. Параметром директивы является значение, которое должно быть присвоено счетчику. При использовании директивы ORG в сегменте данных будет определено значение, указывающее расположение в оперативной памяти SRAM. При использовании директивы ORG в сегменте кода будет определено значение, указывающее расположение в памяти программ. При использовании директивы ORG в сегменте EEPROM будет определено значение, указывающее расположение в памяти EEPROM. Если перед директивой расположена метка на этой же строке, метка получит значение параметра директивы. Значение по умолчанию для сегмента кода и EEPROM равно 0, а для SRAM - 32 (так как регистры занимают пространство с 0 до 31). Обратите внимание, что ДЛЯ EEPROM и SRAM отсчитываются байты, в то время как в памяти программ - слова.

15

Подробную информацию о других директивах можно найти в используемой литературе. .

Написание программы всегда начинается с директивы

.include, а в качестве подключаемого файла необходимо, например, указать “2313def.inc”, который ставит в соответствие символьным адресам регистра его реальный адрес.

Заканчиваться программа обязана директивой .exit.

3. Домашние задания и методические указания по их выполнению

3.1

Ознакомится

с

языком программирования и

структурой команд загрузки регистров и

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

микроконтроллера Attiny 2313 ..Приложение 1. /1,3//

3.2. Составьте программу загрузки

регистров общего

назначения rO ,rl , г2, гЗ, г4 ,г5 ,г6 ,г7 ,г8

 

соответственно числами 1,2,3,4,5,6,7.8,9

 

Для выполнения задания необходимо использовать

команды

ldi Rd,K- загрузки константы в РОН(только для R16 и

старше)

и команду

mov

Ri,Rd-пересылки содержимого

регистра Rd в Ri.

Для примера составим программу записи чисел 11 и 22 в регистры г16 и г17 и пересылки их в регистры гО и rl.

.include "tn2313def.inc"

.list

ldi г16,11;

запись числа 11 в рабочий регистр

г16.

запись числа 12 в рабочий регистр

 

mov r0,rl6;

пересылка числа 11 в рабочий

регистр гО.

 

mov rl,rl7;

пересылка числа 12. в рабочий

регистр rl

 

16

3.3.

Составьте программу

загрузки регистров общег

назначения гО ,г1, г2, гЗ, г4 ,г5

 

соответственно

числами 1,2,3,4,5.6, используя дерективу .ёе^

назначить регистру символьное имя.

 

Для примера составим программу записи числа 11 в

регистр г16 и пересылки его в регистр

гО.

.include "tn2313def.inc"

 

.list

 

 

.def кот=тО;

присвоение имен

.defkoml=rl6

регистрам гО и г16

ldi kom l,ll;

запись числа 11 в рабочий регистр

koml.

 

 

mov kom,koml ;

пересылка числа 11 в рабочий

регистр kom.

 

 

3.4. Составьте программу загрузки пар регистров обще назначения г0-г1 , г2гЗ, г4-г5 ,г6-г7 соответственно числами 1-1, 2-2,3-3,4-4,.используя команду тоу\у- пересылка между парами регистров.

Для примера составим программу записи чисел 7 и 8 соответственно в пару регистров г4 - г5.

.include "tn2313def.inc"

 

.list

 

ldi rl 8,7 ;

запись числа 7 в рабочий регистр

г18

 

ldi г19,8;

запись числа 8 в рабочий регистр

г19

 

movw r4,rl8;

пересылка чисед 7-8 в рабочие

регистры г4-г5

 

3.5. Составьте программу перехода числа ВВ из регистр г16 последовательно в регистры гО, rl, Rr2, гЗ, г4, г5.

17

Для выполнения задания воспользуйтесь примерами, приведенными в пунктах 3.2-3.4.

3.6. Составить программу загрузки из памяти данных регистров г0-г8 соответственно числами 1,2,3,4,5,6.7,8,9, предварительно записав их в ОЗУ данных микроконтроллера, начиная с адреса 000061.

Для выполнения задания используйте команды STS к,Rdнепосредственная запись в память данных и LDS Rd,k- непосредственная загрузка из памяти данных. Например, программа записи в ячейку памяти с адресом 000060 числа 17

будет иметь вид

 

.include "tn2313def.inc"

 

.list

 

ldi rl 8,17;

запись числа 17 в рабочий регистр .

г18

 

sts $000060,г18;

запись в память содержимого

регистра г18

 

Программа загрузки регистра г19 содержимым ячейки памяти с адресом 000060 будет иметь вид

.include "tn2313def.inc"

 

.list

 

ldi rl 8,17;

запись числа 17 в рабочий регистр

г18

 

sts $000060,г18;

запись в память содержимого

регистра г18

 

Ids г19,$000060;

загрузка г19 из ячейки памяти с

адресом 000060 3.7. Составить программу загрузки из памяти данных

регистров г5-г8 соответственно числами 11,22,33,44, предварительно записав их в ОЗУданных микроконтроллера, начиная с адреса 000061,используя команды косвенная запись ST Z,Rr в память данных и косвенное чтение LD Rd,Z памяти данных.

18

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