ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.01.2025

Просмотров: 3648

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Оглавление

Введение

1. Структура и функционирование микроконтроллера aTmega128

Указатель стека – sp.

Регистр управления делением частоты кварцевого генератора – xdiv

2. Интегрированная система программирования avr Studio v4.12

2.1. Создание проекта.

2.2. Компиляция проекта.

3.Описание лабораторного стенда лс-2.

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

Введение

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

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

Работа №2 микроконтроллер aTmega128: команды обработки данных

Введение

Задания

Работа №3 цифровые системы на базе микроконтроллерa aTmega128:

Введение

Регистр управления внешними прерываниями – eicra и eicrb

Выполнение основного задания

Задания

Работа №4 цифровые системы на базе микроконтроллера aTmega128: работа с внешними устройствами через параллельные порты ввода вывода – работа с клавиатурой и светодиодным индикатором

Введение

Выполнение основного задания

Задания

Работа №5

16-Разрядные таймеры/счетчики t/c1 и t/c3

Регистры сравнения а таймеров/счетчиков - ocRxA

Выполнение основного задания

Задания

Работа №6 цифровые системы на базе микроконтроллера aTmega128:

Введение

Универсальный синхронный и асинхронный приемопередатчик usart предназначен для организации последовательной связи.

Инициализация usart.

Передача данных - Передатчик usart.

Прием данных - Приемник usart.

Описание регистров usart.

Задания

Работа №7 цифровые системы на базе микроконтроллера aTmega128:

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

Задания

Задания

Приложение 1.

Приложение 2.

Команды передачи данных приведены в Табл.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  K

Нет

1

LDS

Rd,k

0d31

0k65535

Загрузить из ОЗУ

Rd  (k)

Нет

3

LD

Rd,X

0d31

Загрузить косвенно

Rd  (X)

Нет

2

LD

Rd,X+

0d31

Загрузить косвенно с постинкрементом

Rd  (X),

X  X+1

Нет

2

LD

Rd,-X

0d31

Загрузить косвенно с преддекрементом

X  X - 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  (Z+q)

Нет

2

STS

k,Rr

0r31

0k65535

Загрузить непосредственно в ОЗУ

(k)  Rr

Нет

3

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 + k + 1

Нет

2

LJMP

Перейти косвенно

PC  Z

Нет

2

JMP

k

0k4M

Перейти

PC  k

Нет

3

RCALL

K

-2Kk2K

Вызвать подпрограмму относительно

PC  PC + k + 1

Нет

3

ICALL

Вызвать подпрограмму косвенно

PC  Z

Нет

3

CALL

K

0k64K

Выполнить длинный вызов подпрограммы

PC  k

Нет

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(b)=0 then

PC  PC + 2 (or 3)

Нет

1/2/3

SBIS

P,b

0r31

0b7

Пропустить, если бит в регистре I/O установлен

if I/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 + k + 1

Нет

1/2

BRBC

s,k

0s7

-64k+63

Перейти, если бит в регистре статуса очищен

if SREG(s)=0 then

PC  PC + k + 1

Нет

1/2

BREQ

k

-64k+63

Перейти, если равно

if Rd=Rr(Z=1) then

PC  PC + k + 1

Нет

1/2

BRNE

k

-64k+63

Перейти, если не равно

if RdRr(Z=0) then

PC  PC + k + 1

Нет

1/2

BRCS

k

-64k+63

Перейти, если флаг переноса установлен

if С=1 then

PC  PC + k + 1

Нет

1/2

BRCC

k

-64k+63

Перейти, если флаг переноса очищен

if С=0 then

PC  PC + k + 1

Нет

1/2

BRSH

k

-64k+63

Перейти, если равно или больше (без знака)

if RdRr (C=0) then

PC  PC + k + 1

Нет

1/2

BRLO

k

-64k+63

Перейти, если меньше (без знака)

if Rd<Rr (C=1) then

PC  PC + k + 1

Нет

1/2

BRMI

k

-64k+63

Перейти, если минус

if N=1 then

PC  PC + k + 1

Нет

1/2

BRPL

k

-64k+63

Перейти, если плюс

if N=0 then

PC  PC + k + 1

Нет

1/2

BRGE

k

-64k+63

Перейти, если больше или равно (с учетом знака)

if RdRr (NV=0) then

PC  PC + k + 1

Нет

1/2

BRLT

k

-64k+63

Перейти, если меньше чем (со знаком)

if Rd<Rr (NV=1) then

PC  PC + k + 1

Нет

1/2

BRHS

k

-64k+63

Перейти, если флаг полупереноса установлен

if H=1 then

PC  PC + k + 1

Нет

1/2

BRHC

k

-64k+63

Перейти, если флаг полупереноса очищен

if H=0 then

PC  PC + k + 1

Нет

1/2

BRTS

k

-64k+63

Перейти, если флаг T установлен

if T=1 then

PC  PC + k + 1

Нет

1/2

BRTC

k

-64k+63

Перейти, если флаг T очищен

if T=0 then

PC  PC + k + 1

Нет

1/2

BRVS

k

-64k+63

Перейти, если флаг переполнения установлен

if V=1 then

PC  PC + k + 1

Нет

1/2

BRVC

k

-64k+63

Перейти, если флаг переполнения очищен

if V=0 then

PC  PC + k + 1

Нет

1/2

BRIE

k

-64k+63

Перейти, если глобальное прерывание разрешено

if I=1 then

PC  PC + k + 1

Нет

1/2

BRID

k

-64k+63

Перейти, если глобальное прерывание запрещено

if I=0 then

PC  PC + k + 1

Нет

1/2



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

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

1. Изучить описание структуры микроконтроллера ATmega128 и интегрированной системы его программирования на языке Ассемблер AVRStudio.

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

3. Запустить на персональном компьютере интегрированную систему программирования AVRStudio. Командой ProjectNew Project создать новый проект Lesson1. С использованием редактора текста создать демонстрационную программу:

.device ATmega128

.include "m128def.inc"

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

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

; байтом адреса начала стека

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

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

; байтом адреса начала стека

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

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

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

ldi R30, $00 ; загрузка регистровой пары Z (R30,R31) адресом $0100

ldi R31, $01 ; по которому расположена первая ячейка внутреннего ОЗУ

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

; значением из регистра R20 ($57)

lds R19, $0100 ; загрузка регистра R19 из ячейки ОЗУ с адресом $0100

sts $0101, R19 ; загрузка ячейки с адресом $0101 из регистра R19

call Rout ; вызов подпрограммы Rout

loop:

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

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

Rout:

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

push R31 ;

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

ldi R30, $80 ; загрузка регистровой пары Z удвоенным адресом ячейки

ldi R31, $00 ; памяти программ

lpm ; загрузка регистра R0 значением ячейки памяти программ

; с адресом $0040

cpse R0, R20 ; пропустить следующую команду если значения регистров

; R0 и R20 равно

sts $0102, R0 ; загрузка ячейки ОЗУ с адресом $0102 из регистра R0


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

pop R30 ;

ret ; возврат из подпрограммы

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

4. Выполнить команду Project/Buildдля компиляции проекта.

5. С помощью команды Debug/StartDebugging запустить симулятор. Командой View/Memory открыть окно с ячейками памяти программ. Прямым редактированием занести любой код в ячейку $40 памяти программ.

6. Выполнить программу по шагам, выполняя команду Debug/StepIntro(F11). После выполнения текущей команды курсор в окне редактора текста указывает на следующую команду.

7. Проверить правильность пересылки данных.

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

Работа №2 микроконтроллер aTmega128: команды обработки данных

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