Режимы адресации МК ATtiny2313.
Существует 8 различных способов адресации для памяти данных:
1) Прямая с одним регистром (inc R0, dec R0);
2) Прямая с двумя регистрами (mov R1,R2);
3) Прямая адресация I/O (in R0, addr i/o);
4) Прямая адресация (lds R0,0x60);
5) Косвенная со смещением;
6) Косвенная;
7) Косвенная с преддекрементом;
8) Косвенная с постприращением.
В регистровом файле регистры с R26 до R31 являются регистрами косвенной адресации (косвенные указатели адреса). Прямая адресация может адресовать полностью все пространство памяти. Косвенная адресация со смещением может адресовать 63 адреса используя регистры Y или Z. Когда используется режим косвенной адресации с предекрементом или постинкрементом то регистры X, Y или Z декрементируются или инкрементируются.
Регистр флагов МК ATtiny2313: назначение флагов, использование в программном коде.
SREG это регистр состояния ядра (Status Register). В этом регистре находится 8 независимых битов — флагов, которые могут быть либо 1 либо 0, в зависимости от выполненных в прошлом операций.
I - флаг разрешения прерываний. Когда установлен в 1 — прерывания разрешены.
T- пользовательский флаг. Можно использовать по своему назначению.
Кроме того, есть две команды которые позволяют в этот бит записать любой бит любого из 32 регистров общего назначения R0-R31. Это команды BLD Rn,bit и BST Rn,bit.
H - флаг полупереноса, если произошел заем бита из старшей половины байта в младшую. То есть когда из числа 0001 0111 пытаются вычести 0000 1000, то происходит заем бита из более старшего разряда, так как младшая тетрада уменьшаемого меньше младшей тетрады вычитаемого.
|
|
S - флаг знака. 1 — значит минус. При вычислении чисел со знаком он возникает если после арифметической операции возник отрицательный результат. Флаг S = V XOR N.
V — Флаг переполнения дополнительного кода. Это если мы считаем число в дополнительном коде со знаком и оно вылезло за пределы регистра.
N — флаг отрицательного значения. Если в результате арифметической операции 7 бит результата стал 1, то этот флаг тоже станет 1.
Z — флаг нуля. Если в результате какой либо операции получился ноль, то устанавливается этот флаг.
С — флаг переноса. Если в результате операции произошел выход за границы байта, то выставляется этот флаг.
Флаги, кроме автоматической установки, можно устанавливать и сбрасывать вручную. Для этого есть команды
SE* для установки и CL* для сброса. Вместо звездочки подставляется нужный флаг, например, CLI — запрет прерываний.
Вброс про флаги от Еленычева:
Флаг V в этом МК называется флагом переполнения по той причине, что он и отражает переполнение, но только для чисел со знаком, как общего случая (числа без знака - это частности).
|
|
Вообще, флаги V, N, S имеют смысл только, если вы работаете со знаковой арифметикой. Т.е. программист сам и только сам решает с какими числами ему работать и смотрит только на нужные ему флаги!
Для решения задачи алгоритм следующий: флаг С - есть перенос (1) или нет (0), флаг N - 7-й старший бит результата, в примере N=0, флаг S = N xor V, S = 0 xor 0 = 0. Т.е. результат положительный, что мы и увидели в десятичной системе. А вот флаг V можно ставить по следующему правилу:
1. Если числа разных знаков (старшие биты разные), то V=0 всегда!
2. Если знаки операндов одинаковые, а результат другого знака, то V=1.
3. Если знаки операндов одинаковые и результат такого же знака, то V=0.
Система команд МК ATtiny2313: группы команд, примеры использования.
Система команд микроконтроллеров AVR весьма развита и насчитывает в различных моделях от 90 до 133 различных инструкций. Большинство команд занимает только 1 ячейку памяти (16 бит) и выполняется за 1 такт.
Всё множество команд микроконтроллеров AVR можно разбить на несколько групп:
➢ команды логических операций;
➢ команды арифметических операций и команды сдвига;
➢ команды операции с битами;
➢ команды пересылки данных;
|
|
➢ команды передачи управления;
➢ команды управления системой.
Управление периферийными устройствами осуществляется через адресное пространство данных. Для удобства существуют «сокращённые команды» IN/OUT.
1) Арифметические и логические команды.
1.1) Арифметические команды:
ADD R0, R1
1.2) Околоарифметические команды:
NEG R0
1.3) Логические команды:
END R0, R1
2) Команды условных и безусловных переходов.
RJMP R1 / BRNE R2 / RCALL / RET
3) Команды модуляции из бита. Битовые команды.
SBI / CBI / LSL
4) Команды пересылки данных.
mov R0, R1
lds R0, 0x60
ld R1, x; (указатель на адрес)
sts 0x60, R1
st x,R0
5) Команды управления.
NOP (организует такт задержки)
Дата добавления: 2018-06-01; просмотров: 776; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!