Работа №1 микроконтроллер atmega103: методы адресации, команды передачи данных и управления 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа №1 микроконтроллер atmega103: методы адресации, команды передачи данных и управления



 

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

Методы адресации

При создании программы для микроконтроллера на языке Ассемблер разработчик оперирует программно доступными ресурсами микропроцессорной системы. У микроконтроллера ATmega103 эти ресурсы включают: программно доступные регистры микроконтроллера, внутреннюю память данных, внешнюю память данных. Перечисленные ресурсы изображены на рисунке  В2, ВЗ.

Каждая команда языка Ассемблер сообщает процессору выполняемую операцию и методы доступа к операндам. Командная строка Ассемблера включает метку (символический адрес), мнемонику (символическое имя) команды, поле операндов, комментарий. Имя команды однозначно связано с выполняемой ею операцией.

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

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

На рисунках 1.1 -1.12 приведены схемы методов адресации микроконтроллера ATmega 103.

Рисунок  1.1 – Регистровая  адресация (один регистр общего назначения)

 

Рисунок  1.2 – Регистровая адресация (два регистра общего назначения)

Рисунок  1.3 – Регистровая адресация (регистры ввода-вывода)

Рисунок  1.4 – Прямая адресация данных

Рисунок  1.5 – Косвенная адресация данных со смещением

Рисунок  1.6 – Косвенная адресация данных

Рисунок  1.7 – Косвенная адресация данных с преддекрементом

Рисунок  1.8 – Косвенная адресация данных с постинкрементом

Рисунок  1.9 – Адресация константы в памяти программ в командах LRM и ELRM

Рисунок  1.10 – Прямая адресация памяти программ в командах JMR и CALL

Рисунок  1.11 – Косвенная адресация памяти программ в командах IJMP и ICALL

Рисунок  1.12 – Относительная адресация памяти программ в командах RJMP и RCALL

Команды передачи данных приведены в Табл. 1.1. Из таблицы видно, что набор этих команд представляет собой сочетание восьми операций с различными методами адресации.


 

Таблица 1.1 – Команды пересылки данных

Мнемо­ника Операн­ды Описание Операция Флаги Кол-во ЦИКЛОВ
ELPM   Расширенная загрузка из памяти программ в регистр R0 R0← (Z+RAMPZ) Нет 3
MOV Rd,Rr 0≤d≤31 0≤r≤31 Копировать регистр Rd← Rr Нет 1
LDI Rd,K 16≤d≤31 0≤k≤255 Загрузить непосредственное значение Rd ←К Нет 1
LDS Rd,k 0≤d≤31 0≤k≤65535 Загрузить из ОЗУ Rd← (к) Нет 2
LD Rd,X 0≤d≤31 Загрузить косвенно Rd ←(X) Нет 2
LD Rd,X+ 0≤d≤31 Загрузить косвенно с постинкрементом Rd← (X), Х←Х+1 Нет 2
LD RdrX 0≤d≤31 Загрузить косвенно с преддекрементом Х←Х - 1, Rd ←(X) Нет 2
LD Rd,Y 0≤d≤31 Загрузить косвенно Rd ←(Y), Нет 2
LD Rd,Y+ 0≤d≤31 Загрузить косвенно с постинкрементом Rd← (Y), Y← Y+1 Нет 2
LD Rd,-Y 0≤d≤31 Загрузить косвенно с преддекрементом Y Y-1, Rd←(Y) Нет 2
LDD Rd,Y+q 0≤d≤31 0≤q≤63 Загрузить косвенно со смещением Rd ←(Y+q) Нет 2
LD Rd,Z 0≤d≤31 Загрузить косвенно Rd ←(Z) Нет 2
LD Rd,Z+ 0≤d≤31 Загрузить косвенно с постинкрементом Rd ←(Z), Z ←Z+1 Нет 2
LD Rd,-Z 0≤d≤31 Загрузить косвенно с преддекрементом Z←Z-1, Rd ← (Z) Нет 2
LDD Rd,Z+q 0≤d≤31 0≤q≤31 Загрузить косвенно со смещением Rd 4← (Z+q) Нет 2
STS k,Rr 0≤r≤31 0≤k≤65535 Загрузить непосредственно в ОЗУ (k)←Rr Нет 2
ST X,Rr 0<r<31 Записать косвенно (X)← Rr Нет 2
ST X+,Rr 0≤r≤31 Записать косвенно с постинкрементом (X) ←Rr, X←X+ 1 Нет 2
ST -X,Rr 0≤r≤31 Записать косвенно с преддекрементом X←X-1, (X) ←Rr Нет 2
ST Y,Rr 0<r<31 Записать косвенно (Y) ← Rr Нет 2
ST Y+,Rr 0≤r≤31 Записать косвенно с постинкрементом (Y) ←Rr, Y← Y + 1 Нет 2
ST -Y,Rr 0≤r≤31 Записать косвенно с преддекрементом Y← Y - 1, (Y) ←Rr Нет 2
STD Y+q,Rr 0≤r≤31 0≤q≤63 Записать косвенно со смещением (Y+q)← Rr Нет 2
ST Z,Rr 0≤r≤31 Записать косвенно (Z) ←Rr Нет 2
ST Z+,Rr 0≤r≤31 Записать косвенно с постинкрементом (Z)← Rr, Z←Z+ 1 Нет 2
ST -Z,Rr 0≤r≤31 Записать косвенно с преддекрементом Z←Z- 1, (Z) ←Rr Нет 2
STD Z+q,Rr 0≤r≤31 0≤q≤63 Записать косвенно со смещением (Z+q) ←Rr Нет 2
LPM   Загрузить байт из памяти программ R0←(Z) Нет 3
IN Rd,P 0≤d≤31 0≤P≤63 Загрузить данные из порта I/O в регистр Rd← P Нет 1
OUT P,Rr 0≤r≤31 0<P<63 Записать данные из регистра в порт I/O P ←Rr Нет 1
PUSH Rr 0≤r≤31 Сохранить регистр в стеке STACK ←Rr Нет 2
POP Rd 0≤d≤31 Выгрузить регистр из стека Rd← STACK Нет 2

Команды ELPM и LPM выполняют загрузку памяти программ. Команда MOV копирует содержимое одного регистра общего назначения в другой. Команда LDI загружает регистр общего назначения непосредственно константой (только R16 - R32), а команды LD выполняют загрузку регистра из ячейки ОЗУ при косвенной адресации, используя в качестве источника адреса регистры X, Y, Z, а также варианты с постинкрементом и преддекрементом источника. Команда LDD выполняет эту же операцию при помощи косвенной адресации со смещением. Команда LDS загружает в регистр общего назначения содержимое прямо адресуемой ячейки памяти данных.

Команда ST выполняет обратную операцию относительно LD - заносит в косвенно адресуемую ячейку памяти данных содержимое регистра общего назначения, используя также варианты с постинкрементом и преддекрементом адреса. Команда STD выполняет эту же операцию при помощи косвенной адресации со смещением, а команда STS прямо адресует ячейку ОЗУ.

Команда IN заносит содержимое регистра ввода-вывода в регистр общего назначения, а команда OUT выполняет обратную операцию.

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

Обратите внимание, что метод адресации не указывается.

Команды передачи управления (переходов) приведены в Табл. 1.2.

Таблица 1.2 – Команды переходов

Мнемо ника Операн­ды Описание Операция Флаги Кол-во циклов
RJMP k -2K≤k≤2K Перейти относительно PC ←PC + к + 1 Нет 2
IJMP   Перейти косвенно PC ←Z Нет 2
JMP k 0≤k≤4M Перейти PC ←к Нет 3
RCALL К -2K≤k≤2K Вызвать подпрограмму относительно PC ←PC + к + 1 Нет 3
ICALL   Вызвать подпрограмму косвенно PC ←Z Нет 3
CALL К 0≤k≤64K Выполнить длинный вызов подпрограммы PC← к Нет 4
RET   Вернуться из подпрограммы PC ←STACK Нет 4
RETI   Вернуться из прерывания PC ←STACK 1 4
CPSE Rd,Rr 0≤d≤31, 0<r<31 Сравнить и пропустить, если равно if Rd=Rr then PC ←PC + 2 (or 3) Нет 1/2/3
SBRC Rr,b 0≤r≤31 0≤b≤7 Пропустить, если бит в регистре очищен if Rr(b)=0 then PC← PC + 2 (or 3) Нет 1/2/3
SBRS Rr,b 0≤r≤31 0≤b≤7 Пропустить, если бит в регистре установлен if Rr(b)=1 then PC← PC + 2 (or 3) Нет 1/2/3
SBIC P,b 0≤P≤31 0≤b≤7 Пропустить, если бит в регистре I/O очищен if I/OP=0 then PC ←PC + 2 (or 3) Нет 1/2/3
SBIS P,b 0≤r≤31  0≤b≤7 Пропустить, если бит в регистре I/O установлен if l/OP(b)=1 then PC ←PC + 2 (or 3) Нет 1/2/3
BRBS s,k  0≤s≤7 -64≤k≤+63 Перейти, если бит в регистре статуса установлен if SREG(s)=1 then  PC ←PC + к + 1 Нет 1/2
BRBC s,k 0≤s≤7 -64≤k≤+63 Перейти, если бит в регистре статуса очищен if SREG(s)=0 then  PC ←PC + к + 1 Нет 1/2
BREQ k -64≤k≤+63 Перейти, если равно if Rd=Rr(Z=1) then PC ←PC + к + 1 Нет 1/2
BRNE k -64≤k≤+63 Перейти, если не равно if Rd^Rr(Z=0) then  PC← PC + к + 1 Нет 1/2
BRCS k -64≤k≤+63 Перейти, если флаг переноса установлен if C=1 then PC ←PC + к + 1 Нет 1/2
BRCC k -64≤k≤+63 Перейти, если флаг переноса очищен if C=0 then PC ←PC + к + 1 Нет 1/2
BRSH k -64≤k≤+63 Перейти, если равно или больше (без знака) if Rd>Rr (C=0) then PC← PC + к + 1 Нет 1/2
BRLO k -64≤k≤+63 Перейти, если меньше (без знака) if Rd<Rr (C=1) then  PC ←PC + к + 1 Нет 1/2
BRMI k -64≤k≤+63 Перейти, если минус if N=1 then PC← PC + к + 1 Нет 1/2
BRPL k -64≤k≤+63 Перейти, если плюс if N=0 then PC ←PC + к + 1 Нет 1/2
BRGE k -64≤k≤+63 Перейти, если больше или равно (с учетом знака) if Rd>Rr (N©V=0) then PC← PC + к + 1 Нет 1/2
BRLT k -64≤k≤+63 Перейти, если меньше чем (со знаком) if Rd<Rr (N©V=1) then PC ←PC + к + 1 Нет 1/2
BRHS к -64≤к≤+63 Перейти, если флаг полупереноса установлен if Н=1 then PC ←PC + к + 1 Нет 1/2
BRHC к -64≤к≤+63 Перейти, если флаг полупереноса очищен if Н=0 then PC ← PC + к + 1 Нет 1/2
BRTS к -64≤к≤+63 Перейти, если флаг Т установлен if T=1 then PC ←PC + к + 1 Нет 1/2
BRTC к -64≤к≤+63 Перейти, если флаг Т очищен if T=0 then PC←PC + к + 1 Нет 1/2
BRVS к -64≤к≤+63 Перейти, если флаг переполнения установлен if V=1 then PC ←PC + к + 1 Нет 1/2
BRVC к Перейти, если флаг переполнения if V=0 then Нет 1/2
  -64≤к≤+63 очищен PC ←PC + к + 1    
BRIE к -64≤к≤+63 Перейти, если глобальное прерывание разрешено if 1=1 then PC ←PC + к + 1 Нет 1/2
BRID к Перейти, если глобальное if l=0 then Нет 1/2
  -64≤к≤+63 прерывание запрещено PC ←PC + к + 1    

Из табл. 1.1 и табл. 1.2 видно, что команды пересылки данных и команды переходов значения флагов регистра SREG не изменяют.

 

ВЫПОЛНЕНИЕ ОСНОВНОГО ЗАДАНИЯ

 

1. Изучить описание структуры микроконтроллера ATmega103.

2. Изучить реализуемые микроконтроллером способы адресации и команды пересылки данных.

3. Запустить на инструментальном компьютере систему программирования «AVR Studio». На экране монитора появится следующее изображение.

Рисунок 1.13 – Меню файл

 

В верхней строке отображаются команды системы доступные в текущий период времени. Для создания нового файла с текстом на языке ассемблер введите команду File|New text file (или щелкните левой кнопкой мыши по верхней строке ниспадающего меню команды File, или нажмите комбинацию клавиш Ctrl+N). Откроется диалоговое окно, в котором нужно указать полное имя (с расширением) и местонахождение создаваемого файла. Например, следующим образом:

 

Рисунок 1.14 – Окно ввода имени файла

 

После ввода OK будет создан новый файл, в котором пока нет текста.

Все прикладные программы обрабатываются системой AVR Studio как некоторые проекты. Создать новый проект можно командой Project|New, после ввода которой открывается окно определения имени, типа и места хранения файлов проекта:

 

Рисунок 1.15 – Выбор типа проекта

 

Мы в данном практикуме будем работать только с ассемблерными программами, поэтому в качестве типа проекта укажите AVR Assembler. После ввода ОК в окне менеджера проектов будет отображена структура нового проекта.

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

Чтобы присоединить созданный файл к проекту, нужно щелкнуть правой кнопкой мыши по группе Assembler Files, откроется ниспадающее меню, из которого нужно выбрать опцию Add File:

 

Рисунок 1.16 –Добавление файла в проект

 

На экране появится диалоговое окно, в котором нужно указать имя и расположение присоединяемого файла:

 

Рисунок 1.17 – Выбор файла присоединяемого к проекту

 

После этого в окне менеджера проектов в группе ассемблерных файлов появится имя demo01.asm:

Рисунок 1.18 – вид окна после присоединения файла к проекту

 

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

 

.include "m103def.inc"

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

ldi R20, $80         ; загрузка промежуточного регистра R20 адресом начала

                      ; стека = $80

out SPL, R20   ; загрузка младшего байта указателя стека

ldi R20, $00    ;

out SPH, R20  ; загрузка старшего байта указателя стека

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

ldi R20, $57 ; загрузка регистра R20 константой

ldi R30, $65  ; загрузка per. Z значением указателя на память данных

ldi R31, $00  ;

st Z, R20       ; загрузка косвенно адресуемой ячейки ОЗУ $65 из

                     ; регистра R20

lds R19, $65 ; загрузка регистра R19 из ячейки $65

sts $78, R19  ; загрузка ячейки $78 из регистра R19

call Rout

loop:  rjmp loop; зацикливание программы

;*****Процедура копирования текста из памяти программ*************

Rout:

push R30  ; сохранение указателя Z в стеке

push R31         ;

ldi R20, $50    ; загрузка регистра R20 новой константой

ldi R30, $80    ; загрузка per.Z значением указателя на память программ

ldi R31, $00    ; (байт по адресу $80 в 16-разр. слове по адресу $40)

lpm   ; чтение кода из памяти программ в R0

cpse R0, R20  ; сравнение содержимого R0 и R20, если равны, прыжок

                        ; через команду

sts $98, R0          ; если не равны, загрузка ячейки $98 из регистра R0

pop R31    ; извлечение указателя X из стека

pop R30    ;

ret                 ; возврат из процедуры

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

В первой строке программы находится директива INCLUDE, включающая в текущий головной файл текст файла m103def.inc, в котором описаны ресурсы микроконтроллера AТmega103, а также осуществлено присвоение им символических имен. Только после этого символические имена, например регистров микроконтроллера, можно употреблять в тексте программы. Сам файл описания должен находиться в той же директории, что и головной файл проекта. Это особенность именно кросс-ассемблера системы «AVR Studio». Файл описания ресурсов микроконтроллера можно просмотреть и отредактировать с помощью любого редактора текстов. Файлы описания ресурсов микроконтроллеров фирмы Atmel находятся в директории AVR Studio/Appnotes.

После ввода последней строки текста нужно ввести <ENTER> (перейти на новую строку).

После ввода текста можно, используя команду Project | Assemble (клавиша F7), выполнить трансляцию программы. При правильно набранном тексте кросс-ассемблер выдаст сообщение об успешном завершении трансляции.

1. Выполнить настройку системы программирования. Для этого нужно ввести команду Debug | Trace into (F11), после чего слева от текста появится стрелка, положение которой соответствует текущему значению счетчика команд PC, т.е. указывает на следующую выполняемую команду.

Опции команды Debug позволяют выполнить одну команду (пошаговый режим) с заходом в подпрограмму нижнего уровня (Trace into - F11) и без захода(Step Over - F10), выполнить несколько команд подряд (Multi Step), выполнить программу до конца или до точки останова (Go).

При отсутствии схемного эмулятора или целевой платы отладка рабочей программы ведется с использованием встроенного в систему программного симулятора. Предварительно нужно указать тип микроконтроллера и его тактовую частоту. Это делается с помощью команды Options | Simulator Options. Тактовую частоту целесообразно установить равной 4МГц, чтобы она соответствовала установленному на плате лабораторного макета кварцу.

Рисунок 1.19 – трекинг программы

 

Рисунок 1.20 – Выбор параметров симуляции

 

Процесс отладки программы с использованием симулятора заключается в анализе состояния ячеек памяти и регистров микроконтроллера после выполнения команд. Для этого нужно командой View открыть окна отображения состояния процессора (опция Processor), регистров (опция Registers), памяти (опция New memory view). После ввода команды Window | Tile и выполнения четырех команд (F11) экран системы программирования приобретает следующий вид:

Рисунок 1.21 – Расположение окон для иллюстрации работы программы

Обратите внимание, что в одном окне отображаются ячейки и памяти программ, и памяти данных, и EEPROM, и регистры ввода/вывода. При отображении памяти программ можно наблюдать коды команд рабочей программы после трансляции.

2. Выполнить отладку программы с использованием симулятора системы AVR Studio методом пошагового выполнения. Программа пересылает код $57 (шестнадцатеричный код) в регистры и ячейки памяти данных различными командами с различными методами адресации.

Перед началом симуляции нужно в младший (правый) байт 16-разрядной ячейки памяти программ с адресом $40 прямым редактированием занести любой код. После каждого шага наблюдать за изменением состояния процессора микроконтроллера, регистров, ячеек памяти.

Обратите внимание, что для того, чтобы занести значение в регистр пространства ввода/вывода (например, SP), нужно вначале занести его в регистр общего назначения (например, R20), а затем выполнить пересылку. Это особенность архитектуры микроконтроллеров AVR и плата за их быстродействие.

Другой особенностью архитектуры микроконтроллеров AVR является работа команды LPM. Эта особенность связана с тем, что в RISC-архитектуре AVR память данных адресуется байтами, а память программ состоит из 16-разрядных слов. В процедуре Rout команда LPM обращается к байту $80 памяти программ, который является младшим в 16-разрядном слове с адресом $40. Если прямым редактированием туда был занесен код $50, то следующая команда CPSE, выявив равенство содержимого регистров R0 и R20, пропустит команду STS и в ячейке ОЗУ $98 сохранится старое значение. Если прямым редактированием туда был занесен другой код, то следующая команда CPSE загрузит в эту ячейку значение из регистра R0, т.е. этот код. (В версии 3.53 системы «AVR Studio» симулятор отрабатывает эту команду правильно, в версии 3.56 - неверно. Расслоение на байты в окне памяти программ везде отрабатывается неверно.)

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

Вопросы для защиты работы:

1. Структура микропроцессора ATMega 103.

2. Виды адресации памяти.

3. Создание проекта и компиляция в программе AVR Studio.


 



Поделиться:


Последнее изменение этой страницы: 2019-11-02; просмотров: 349; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.93.210 (0.07 с.)