Справочник по микроконтроллеру ATMEGA16 (1058371), страница 2
Текст из файла (страница 2)
Регистр SREG
SREG - регистр статуса, размещен в пространстве I/O по адресу $3F ($5F) и его биты определяются как:
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| I | T | H | S | V | N | Z | C |
Бит 7 - I: Global Interrupt Enable - Разрешение глобального прерывания.
Бит разрешения глобального прерывания для разрешения прерывания должен быть установлен в состояние 1. Управление разрешением конкретного прерывания выполняется регистрами маски прерывания GIMSK и TIMSK. Если бит глобального прерывания очищен (в состоянии 0), то ни одно из разрешений конкретных прерываний, установленных в регистрах GIMSK и TIMSK, не действует. Бит I аппаратно очищается после прерывания и устанавливается для последующего разрешения глобального прерывания командой RETI.
Бит 6 - T: Бит Copy Storage - Бит сохранения копии.
Команды копирования бита BLD (Бит LoaD) и BST (Бит STore) используют бит T как бит источник и бит назначения при операциях с битами. Командой BST бит регистра регистрового файла копируется в бит T, командой BLD бит T копируется в регистр регистрового файла.
Бит 5 - H: Half Carry Flag - Флаг полупереноса
Флаг полупереноса указывает на полуперенос в ряде арифметических операций. Более подробная информация приведена в описании системы команд.
Бит 4 - S: Sign Бит, S = N V - Бит знака
Бит S всегда находится в состоянии, определяемом логическим исключающим ИЛИ (exclusive OR) между флагом отрицательного значения N и дополнением до двух флага переполнения V. Более подробная информация приведена в описании системы команд.
Бит 3 - V: Two’s Complement Overflow Flag - Дополнение до двух флага переполнения
Дополнение до двух флага V поддерживает арифметику дополнения до двух. Более подробная информация приведена в описании системы команд.
Бит 2 - N: Negative Flag - Флаг отрицательного значения
Флаг отрицательного значения N указывает на отрицательный результат ряда арифметических и логических операций. Более подробная информация приведена в описании системы команд.
Бит 1 - Z: Zero Flag - Флаг нулевого значения
Флаг нулевого значения Z указывает на нулевой результат ряда арифметических и логических операций. Более подробная информация приведена в описании системы команд.
Бит 0 - C: Carry Flag - Флаг переноса
Флаг переноса C указывает на перенос в арифметических и логических операциях. Более подробная информация приведена в описании системы команд.
Система команд
| Арифметические операции | ||||
| Мнемоника | Описание | Операция | Изменяемые флаги | Время исполнения (циклов) |
| ADC Rn,Rk | Сложение c переносом | Rn <- Rn + Rk + C | Z, C, N, V, S, H | 1 |
| ADD Rn,Rk | Сложение без переноса | Rn <- Rn + Rk | Z, C, N, V, S, H | 1 |
| ADIW Rn,K | Сложение с константой | (Rn+1):Rn <- (Rn+1):Rn + K | Z, C, N, V, S | 2 |
| SUB Rn,Rk | Вычитание без заема | Rn <- Rn - Rk | Z, C, N, V, S, H | 1 |
| SUBI Rn,K | Вычитание константы без заема | Rn <- Rn - K | Z, C, N, V, S, H | 1 |
| SBCI Rn,K | Вычитание константы с заемом | Rn <- Rn - K - C | Z, C, N, V, S, H | 1 |
| SBC Rn,Rk | Вычитание c заемом | Rn <- Rn - Rk - C | Z, C, N, V, S, H | 1 |
| SBIW Rn,K | Вычитание константы | Rn+1):Rn <- (Rn+1):Rn - K | Z, C, N, V, S | 2 |
| COM Rn | Дополнение до 1 | Rn <- 0FFh - Rn | Z, C, N, V, S | 1 |
| NEG Rn | Дополнение до 2 | Rn <- 0 - Rn | Z, C, N, V, S, H | 1 |
| INC Rn | Увеличение на 1 | Rn <- Rn + 1 | Z, N, V, S | 1 |
| DEC Rn | Уменьшение на 1 | Rn <- Rn - 1 | Z, N, V, S | 1 |
| CP Rn,Rk | Сравнение регистров | Rn - Rk | Z, C, N, V, S, H | 1 |
| CPI Rn,K | Сравнение регистра с константой | Rn - K | Z, C, N, V, S, H | 1 |
| CPC Rn,Rk | Сравнение регистров с заемом | Rn - Rk - C | Z, C, N, V, S, H | 1 |
| Логические операции | ||||
| Мнемоника | Описание | Операция | Изменяемые флаги | Время исполнения (циклов) |
| AND Rn,Rk | Логическое "И" | Rn <- Rn & Rk | Z, N, V, S | 1 |
| ANDI Rn,K | Логическое "И" с константой | Rn <- Rn & K | Z, N, V, S | 1 |
| OR Rn,Rk | Логическое "ИЛИ" | Rn <- Rn | Rk | Z, N, V, S | 1 |
| ORI Rn,K | Логическое "ИЛИ" с константой | Rn <- Rn | K | Z, N, V, S | 1 |
| EOR Rn,Rk | "Исключающее ИЛИ" | Rn <- Rn ^ Rk | Z, N, V, S | 1 |
| CBR Rn,K | Очистка битов | Rn <- Rn & (0FFh-K) | Z, N, V, S | 1 |
| SBR Rn,K | Установка битов | Rn <- Rn | K | Z, N, V, S | 1 |
| CLR Rn | Очистка регистра | Rn <- Rn ^ Rn | Z, N, V, S | 1 |
| SER Rn | Установка регистра | Rn <- 0FFh | - | 1 |
| TST Rn | Проверка на 0 и минус | Rn <- Rn & Rn | Z, N, V, S | 1 |
| Операции перехода | ||||
| Мнемоника | Описание | Операция | Изменяемые флаги | Время исполнения (циклов) |
| JMP K | Абсолютный переход | PC <- K | - | 3 |
| CALL K | Абсолютный вызов | PC <- K | - | 4 (5) |
| RJMP K | Относительный переход | PC <- PC + K + 1 | - | 2 |
| RCALL K | Относительный вызов | PC <- PC + K + 1 | - | 2 |
| IJMP | Косвенный переход | PC(15:0) <- Z, PC(21:16) <- 0 | - | 2 |
| ICALL | Косвенный вызов | PC(15:0) <- Z, PC(21:16) <- 0 | - | 2 |
| EIJMP | Косвенный переход | PC(15:0) <- Z, PC(21:16) <- EIND | - | 2 |
| EICALL | Косвенный вызов | PC(15:0) <- Z, PC(21:16) <- EIND | - | 2 |
| RET | Выход из процедуры | PC <- STACK | - | 4 (5) |
| RETI | Выход из процедуры прерывания | PC <- STACK | I | 4 (5) |
| CPSE Rn,Rk | Сравнить и пропустить, если равно | if (Rn = Rk) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
| SBRC Rn,K | Пропустить, если Rn(K) = 0 | if (Rn(K) = 0) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
| SBRS Rn,K | Пропустить, если Rn(K) = 1 | if (Rn(K) = 1) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
| SBIC IR,K | Пропустить, если IR(K) = 0 | if (IR(K) = 0) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
| SBIS IR,K | Пропустить, если IR(K) = 1 | if (IR(K) = 1) PC <- PC + 2 or 3 | - | 1 / 2 / 3 |
| BRBS b,K | Перейти, если SREG(b) = 1 | if (SREG(b) = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRBC b,K | Перейти, если SREG(b) = 0 | if (SREG(b) = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BREQ K | Перейти, если Z = 1 | if (Z = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRNE K | Перейти, если Z = 0 | if (Z = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRCC K | Перейти, если C = 0 | if (C = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRCS K | Перейти, если C = 1 | if (C = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRHC K | Перейти, если H = 0 | if (H = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRHS K | Перейти, если H = 1 | if (H = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRSH K | Перейти, если больше или равно | if (C = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRLO K | Перейти, если меньше | if (C = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRPL K | Перейти, если больше или равно 0 | if (N = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRMI K | Перейти, если меньше 0 | if (N = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRGE K | Перейти, если больше или равно (со знаком) | if (N + V = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRLT K | Перейти, если меньше (со знаком) | if (N + V = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRTC K | Перейти, если T = 0 | if (T = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRTS K | Перейти, если T = 1 | if (T = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRVC K | Перейти, если V = 0 | if (V = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRVS K | Перейти, если V = 1 | if (V = 1) PC <- PC + K + 1 | - | 1 / 2 |
| BRIE K | Перейти, если I = 0 | if (I = 0) PC <- PC + K + 1 | - | 1 / 2 |
| BRID K | Перейти, если I = 1 | if (I = 1) PC <- PC + K + 1 | - | 1 / 2 |















