Изучение команд работы с регистрами и памятью микроконтроллеров AVR




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

 

1.Используемые команды:

mov Rd,Rr перенос данных между РОН

ldi Rd,K загрузка константы в РОН

ld Rd,A чтение значения в РОН из памяти данных(SRAM) по адресу, содержащемуся в A

ld Rd,A+ чтение значения в РОН из памяти данных(SRAM) по адресу, содержащемуся в A, с постинкрементом адреса

ld Rd,-A чтение значения в РОН из памяти данных(SRAM) по адресу, содержащемуся в A, с преддекрементом адреса

st A,Rr запись значения в память данных(SRAM) из РОН по адресу, содержащемуся в А

st A+,Rr запись значения в память данных(SRAM) из РОН по адресу, содержащемуся в А, с постинкрементом адреса

st –A,Rr запись значения в память данных(SRAM) из РОН по адресу, содержащемуся в А, с преддекрементом адреса

lrm – загрузка данных из памяти программ в регистр R0 по байтовому адресу, находящемуся в двухбайтовом регистре Z(R30:R31)

in Rr,P загрузка значения РВВ в РОН

out P,Rr вывод значения РОН в РВВ

pop Rd извлечение значения верхушки стека в РОН

Лабораторное задание

На основе пункта 2.3 в лабораторной работе №1, в соответствии с вариантом произвести последовательность действий с помощью AVRstudio:

1)Записать константу K в регистр Rd1

2)Переслать константу K из регистра Rd1 в регистр Rd2

3)Вывести константу K на порт pt1

4)Записать константу K в ячейку памяти данных R с использованием адресации через X,Y или Z

5)Считать из памяти и вывести на порт pt2.

Вариант Адресация Rd1 Rd2 R K Pt1 Pt2
  X R16 R24   0xFF A C
  Y R17 R23   0xEE B C
  Z R18 R22   0xDD C B
  X R19 R21   0xCC D A
  Y R20 R20   0xBB A B
  Z R21 R19   0xAA B C
  X R22 R18   0x99 C D
  Y R23 R17   0x88 D C
  Z R24 R16   0x77 A D
  X R16 R19   0x66 B A
  Y R17 R20 006A 0x55 C B
  Z R18 R21 006B 0x44 D C
  X R19 R22 006C 0x33 A B
  Y R16 R19 006D 0x22 D A
  X R17 R22 006E 0x11 A C

Обозначения:

Регистр общего назначения(РОН), обозначается Rd (приёмник) или Rr (источник) где d и r номер регистра.

Регистр ввода-вывода(РВВ), обозначается P.

Константа обозначается K.

A – имеется в виду то, что можно использовать любой из двухбайтовых регистров X,Y или Z

 

X,Y,Z Парные(2-байтовые) регистры используемые для адресации в адресном пространстве микроконтроллера, причём старшим байтом допустим X-регистра, является регистр R31,т.е. если в регистре R31 находится число 0xFF, а в регистре R30 число 0x00, то адрес будет выглядеть как 0xFF00

X-пара регистров R27:R26.

Y-пара регистров R29:R28.

Z-пара регистров R31:R30.

 

 

 

Для того чтобы посмотреть содержимое памяти микроконтроллера, необходимо в верхнем меню нажать на вкладку View и выбрать Memory, послечего в появившемся окне выбрать тип необходимой нам памяти(Program, Eeprom, I/O, Data, или Register)

Где Data и есть память SRAM, и находиться она по адресам от 0x0060 до 0x045F

 

Лабораторная работа №3

Изучение Арифметических и логических команд микроконтроллеров AVR

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

Краткий обзор

Используемые команды:

add Rd,Rr сложение двух РОН без учёта переноса

adc Rd,Rr сложение двух РОН с учётом переноса

adiw Rd,k сложение регистровой пары с константой

sub Rd,Rr вычитание двух РОН без учёта переноса

sbc Rd,Rr вычитание двух РОН с учётом переноса

sbiw Rd,k вычитание константы из регистровой пары

subi Rd,k вычитание константы из регистра

sbci Rd,k вычитание константы из регистра с учётом переноса

inc Rd увеличение содержимого регистра на единицу

dec Rd уменьшение содержимого регистра на единицу

clr Rd очистка регистра (операция «исключающее или» регистра с самим собой)

ser Rd установка регистра

and Rd,Rr логическое «и»

andi Rd,k логическое «и» с константой

or Rd,Rr логическое «или»

ori Rd,k логическое «или» с константой

eor Rd,Rr логическое исключающее «или»

com Rd побитная инверсия

neg Rd дополнительный код(инверсия знака)

 

Запустим AVRstudio в режиме эмуляции и попробуем использовать несколько команд из списка, при этом наблюдая за состоянием регистров

 

Программа:

.include "m16def.inc";подключение библиотеки

.list;включение листинга

.def temp0=r16;определение рабочих регистров

.def temp1=r17

.def temp2=r18

.def temp3=r19

.def temp4=r20

.def temp5=r21

.def temp6=r22

;--------------------------------------------

metka:

ldi temp0,0x00;записываем ноль в регистр temp0

ldi temp0,0xFF;записываем 0xff в регистр temp0

ldi temp1,0x00;записываем ноль в регистр temp1

ldi temp1,0xAA;записываем 0xAA в регистр temp1

ldi temp2,0x00;записываем ноль в регистр temp2

ldi temp2,0xCC;записываем 0xCC в регистр temp2

ldi temp3,0x00;записываем ноль в регистр temp3

mov temp3,temp2;пересылка данных из temp2 d temp3

add temp1,temp2;складываем temp1 и temp2 без учёта переноса

sbc temp0,temp1; вычитаем temp1 из temp0 с учётом переноса

subi temp4,0x11;вычитание константы из регистра temp4

inc temp5; увеличение содержимого регистра на единицу

inc temp5; увеличение содержимого регистра на единицу

inc temp5; увеличение содержимого регистра на единицу

dec temp5; уменьшение содержимого регистра на единицу

dec temp5; уменьшение содержимого регистра на единицу

dec temp5; уменьшение содержимого регистра на единицу

clr temp5;очистка регистра (операция "исключающее или" регистра с самим собой)

or temp0,temp1; логическое "или"

com temp6; побитная инверсия

neg temp6; дополнительный код(инверсия знака)

rjmp metka;переход к метке

 

Данный проект находится в папке с лабораторной\003lab\003.aps

 

Лабораторное задание

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

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

3)В соответствии с вариантом сложить содержимое Rd1 и Rd2, вычесть из результата константу K и проверить состояние бита отрицательности, после чего записать результат в ячейку памяти R.

 

Вариант R K Rd1 Rd2
    0xFF 0x01 0x10
    0xEE 0x02 0x20
    0xDD 0x03 0x30
    0xCC 0x04 0x40
    0xBB 0x05 0x50
    0xAA 0x06 0x60
    0x99 0x07 0x70
    0x88 0x08 0x80
    0x77 0x09 0x90
    0x66 0x0A 0xA0
  006A 0x55 0x0B 0xB0
  006B 0x44 0x0C 0xC0
  006C 0x33 0x0D 0xD0
  006D 0x22 0x0E 0xE0
  006E 0x11 0x0F 0xF0

 

Лабораторная работа №4



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: