Лабораторная работа №5
«Изучение логических операций»
Цель работы: Изучение логических команд и их использования для маскирования данных и организации переходов. Изучение выводов микроконтроллера ATmega128. Изучение энергопотребления и режимов сна микроконтроллера ATmega128.
Теоретическое введение
Команды группы «логические функции» выполняют логические (булевы) операции над байтами, содержащимися в регистрах. В основе построения цифровых схем лежит логический вентиль, а наиболее широко используются три базовые функции вентиля: "И", "ИЛИ", "Исключающее ИЛИ", а также вычисление обратного и дополнительного кодов числа. К этой группе можно отнести также команды очистки/установки регистров и команду перестановки тетрад (половина байта, состоящая из 4 бит, называется тетрада.). Все операции производятся над регистрами общего назначения, результат хранится в одном из РОН. Все логические операции выполняются за один машинный цикл.
Описание выводов
VCC - напряжение питания цифровых элементов
GND - общий
Порт A (PA7..PA0) – 8-разрядный порт двунаправленного ввода-вывода с внутренними подтягивающими к плюсу резисторами (выбираются раздельно для каждого разряда). Выходные буферы порта A имеют симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе, линии порта А будут действовать как источник тока, если внешне действует низкий уровень и включены подтягивающие резисторы. Выводы порта A находятся в третьем (высокоимпедансном) состоянии при выполнении условия сброса, даже если синхронизация не запущена. Порт А также выполняет некоторые специальные функции ATmega128 (см. Лабораторную работу №6).
Порт В (PВ7..PВ0) – 8-разрядный порт двунаправленного ввода-вывода с внутренними подтягивающими к плюсу резисторами (выбираются раздельно для каждого разряда). Выходные буферы порта В имеют симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе, линии по9рта B будут действовать как источник тока, если внешне действует низкий уровень и включены подтягивающие резисторы. Выводы порта B находятся в третьем (высокоимпедансном) состоянии при выполнении условия сброса, даже если синхронизация не запущена. Порт В также выполняет некоторые специальные функции ATmega128 (см. Лабораторную работу №6).
Порт C (PC7..PC0) – 8-разрядный порт двунаправленного ввода-вывода с внутренними подтягивающими к плюсу резисторами (выбираются раздельно для каждого разряда). Выходные буферы порта C имеют симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе, линии порта C будут действовать как источник тока, если внешне действует низкий уровень и включены подтягивающие резисторы. Выводы порта C находятся в третьем (высокоимпедансном) состоянии при выполнении условия сброса, даже если синхронизация не запущена. Порт C также выполняет некоторые специальные функции ATmega128 (см. Лабораторную работу №6).
Порт D (PD7..PD0) – 8-разрядный порт двунаправленного ввода-вывода с внутренними подтягивающими к плюсу резисторами (выбираются раздельно для каждого разряда). Выходные буферы порта D имеют симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе, линии порта D будут действовать как источник тока, если внешне действует низкий уровень и включены подтягивающие резисторы. Выводы порта D находятся в третьем (высокоимпедансном) состоянии при выполнении условия сброса, даже если синхронизация не запущена. Порт D также выполняет некоторые специальные функции ATmega128 (см. Лабораторную работу №6).
Порт E (PE7..PE0) – 8-разрядный порт двунаправленного ввода-вывода с внутренними подтягивающими к плюсу резисторами (выбираются раздельно для каждого разряда). Выходные буферы порта E имеют симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе, линии порта E будут действовать как источник тока, если внешне действует низкий уровень и включены подтягивающие резисторы. Выводы порта E находятся в третьем (высокоимпедансном) состоянии при выполнении условия сброса, даже если синхронизация не запущена. Порт E также выполняет некоторые специальные функции ATmega128 (см. Лабораторную работу №6).
Порт F (PF7..PF0) – Порт F действует как аналоговый ввод аналогово-цифрового преобразователя. Порт F также может использоваться как 8-разрядный порт двунаправленного ввода-вывода, если АЦП не используется. К каждой линии порта может быть подключен встроенный подтягивающий к плюсу резистор (выбирается раздельно для каждого бита). Выходные буферы порта F имеют симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе, линии порта F будут действовать как источник тока, если внешне действует низкий уровень и включены подтягивающие резисторы. Выводы порта F находятся в третьем (высокоимпедансном) состоянии при выполнении условия сброса, даже если синхронизация не запущена. Если активизирован интерфейс JTAG, то подтягивающие резисторы на линиях PF7(TDI), PF5(TMS) и PF4(TCK) будут подключены, даже если выполняется Сброс.
Вывод TDO находится в третьем состоянии, если не введено состояние TAP, при котором сдвигаются выводимые данные.
Порт F также выполняет функции интерфейса JTAG.
Порт G (PG4..PG0) – 5-разрядный порт двунаправленного ввода-вывода с внутренними подтягивающими к плюсу резисторами (выбираются раздельно для каждого разряда). Выходные буферы порта G имеют симметричную выходную характеристику с одинаковыми втекающим и вытекающим токами. При вводе, линии порта G будут действовать как источник тока, если внешне действует низкий уровень и включены подтягивающие резисторы. Выводы порта G находятся в третьем (высокоимпедансном) состоянии при выполнении условия сброса, даже если синхронизация не запущена. Порт G также выполняет некоторые специальные функции ATmega128 (см. Лабораторную работу №6).
RESET - вход сброса. Если на этот вход приложить низкий уровень длительностью больше минимальной необходимой длительности, будет генерирован сброс независимо от работы синхронизации. Минимальная длительность внешнего импульса сброса приведена в таблице 5.1.
AND Rd,Rr (операция "Логического И" над содержимым двух РОН) Rd=Rd • Rr. Над содержимым регистра Rd и содержимым регистра Rr выполняется операция "Логическое И". Результат помещается в регистр Rd.
ANDI Rd,K (операция "Логического И" над содержимым РОН и константой) Rd = Rd • K. Над содержимым регистра Rd и 8-разрядным числом выполняется операция "Логическое И". Результат помещается в регистр Rd. Команда применима только к 16 старшим РОН (R16…R31).
EOR Rd,Rr (операция “Исключающее ИЛИ” над содержимым двух РОН) Rd=RdRr. Над содержимым регистров Rd и Rr выполняется операция “Исключающее ИЛИ”. Результат помещается в регистр Rd.
OR Rd,Rr (операция "ИЛИ" над содержимым двух РОН) Rd=Rd ٧ Rr. Над содержимым регистров Rd и Rr выполняется операция логическое "ИЛИ". Результат помещается в регистр Rd.
ORI Rd,K (операция "ИЛИ" над содержимым РОН и константой) Rd=Rd ٧ K. Над содержимым регистра Rd и 8-разрядным числом выполняется операция логическое "ИЛИ". Результат помещается в регистр Rd. Команда применима только к 16 старшим РОН (R16…R31).
СOМ Rd (перевод в обратный код) Rd = $FF-Rd. Вычисление обратного кода числа, находящегося в регистре Rd. Результат помещается в регистр Rd.
NEG Rd (вычисление дополнительного кода числа) Rd = $00-Rd. Вычисление дополнительного кода числа, находящегося в регистре Rd. Результат помещается в регистр Rd.
CLR Rd (очистка РОН) Rd=RdRd. Сбрасывает все разряды регистра общего назначения путем выполнения операции “Исключающее ИЛИ” регистра с самим собой.
SER Rd (установка РОН) Rd = $FF. Устанавливает все разряды регистра общего назначения в «1». Команда применима только к 16 старшим РОН (R16…R31).
TST Rd (проверка РОН на нулевое или отрицательное значение) Rd• Rd. Q Проверяет содержимое регистра на нулевое или отрицательное значение путем выполнения операции "Логическое И" регистра с самим собой. Содержимое регистра Rd не изменяется.
SWAP Rd (перестановка тетрад РОН) Rd(3-0)<Rd(7-4), Rd(7-4)<Rd(3-0). Команда производит перестановку старшего и младшего полубайта содержимого регистра Rd.
ASR Rd (арифметический сдвиг вправо) Rd(n)<Rd(n+1), n=0..6. Сдвигает содержимое регистра Rd на 1 разряд вправо. Состояние 7-го разряда не изменяется. Значение 0-го разряда помещается в флаг С регистра SREG. Часто используется для деления чисел со знаком на два.
LSL Rd (логический сдвиг влево) Rd(n+1)<Rd(n), Rd(0)<0. Сдвигает все разряды регистра Rd влево. Нулевой разряд сбрасывается в «0», а седьмой разряд загружается в флаг С регистра SREG. Эквивалентна команде ADD Rd,Rd.
LSR Rd (логический сдвиг вправо) Rd(n)<Rd(n+1), Rd(7)<0. Сдвигает все разряды регистра Rd вправо. Седьмой разряд сбрасывается в «0», а нулевой разряд загружается в флаг С регистра SREG.
ROL Rd (сдвиг влево через перенос) Rd(0)<C, Rd(n+1)<Rd(n), C<Rd(7). Сдвигает содержимое регистра Rd влево на один разряд. В нулевой разряд заносится содержимое флага С регистра SREG, а седьмой разряд загружается в флаг С. В комбинации с командой LSL данная команда может использоваться для умножения многобайтных чисел (как знаковых, так и беззнаковых) на два. Эквивалентна команде ADD Rd,Rd. Значение флага V равно "ИСКЛЮЧАЮЩЕМУ ИЛИ" флагов N и С после сдвига.
ROR Rd (сдвиг вправо через перенос) Rd(7)<C, Rd(n)<Rd(n+1), C<Rd(0). Сдвигает содержимое регистра Rd вправо на один разряд. В седьмой разряд заносится содержимое флага С регистра SREG, а нулевой разряд загружается в флаг С. В комбинации с командой ASR данная команда может использоваться для деления многобайтных знаковых чисел на два. А в комбинации с командой LSL – для деления многобайтных беззнаковых чисел на два. Значение флага V равно "ИСКЛЮЧАЮЩЕМУ ИЛИ" флагов N и С после сдвига.
BSET s (установка разряда регистра SREG) SREG.s=1. Устанавливает заданный разряд регистра SREG. Остальные разряды регистра SREG остаются без изменения.
BCLR s (сброс разряда регистра SREG) SREG.s=0. Сбрасывает заданный разряд регистра SREG. Остальные разряды регистра SREG остаются без изменения.
SEC (установка флага переноса) С = 1. Устанавливает в «1» флаг переноса С регистра SREG. Эквивалентна команде BSET 0.
CLC (сброс флага переноса) С = 0. Сбрасывает в «0» флаг переноса С регистра SREG. Эквивалентна команде BCLS 0.
Здесь были приведены некоторые команды установки флагов. Установка остальных флагов регистра SREG происходит аналогично при помощи соответствующих команд, приведенных в списке команд. Также аналогично происходит установка и сброс разрядов регистра ввода/вывода, РОН, загрузка и запись разряда РОН из и флаг Т регистра SREG.