
- •Послідовний периферійний інтерфейс (spi).
- •Аналоговий компаратор.
- •Команди обміну даними. Приклади використання.
- •Способи адресації операндів Atmel avr.
- •Переривання в мікроконтролерах Atmel avr.
- •Команди розгалуження. Приклади використання.
- •Універсальний асинхронний приймач-передавач. Протокол зв’язку rs-232.
- •Основні архітектури 8-бітних мікропроцесорних пристроїв.
- •Інтерфейс шини can.
Аналоговий компаратор.
Самая простая задача микропроцессорной системы – это слежение за уровнем аналогового сигнала на предмет нахождения его в некотором диапазоне значений. Самый простой технологически изготавливаемый блок аналогового ввода это аналоговый компаратор. Принцип работы показан на рис. 5.1
Рисунок 5.1
Аналоговый компаратор имеет два входа – прямой (Вход+) и инверсный (Вход-). Когда напряжение на Входе+ больше чем на Входе-, то на выходе компаратора присутствует низкий уровень, а если наоборот – то высокий. Компаратор так же может обладать гистерезисом – областью в которой его выходное состояние не меняется. Для некоторых применений нужно минимизировать эту область, а для других – расширить. В МПУ аналоговые компараторы обладают минимальным гистерезисом.
Для того, что бы сравнивать сигнал с эталоном служит встроенный источник опорного напряжения (ИОН). Он обладает собственной стабильностью параметров, оговариваемых в описании конкретного МПУ. Для удобства использования встроенных ИОН их часто соединяют с внутренним делителем, который позволяет управлять выходным напряжением источника.
Команди обміну даними. Приклади використання.
Одна из наиболее часто используемых команд - МОV позволяет в защищенном режиме переслать байт или слово из регистра в регистр, из памяти в регистр или из регистра в память. Тип пересылаемых данных (байт или слово) определяется регистром, участвующим в пересылке. Ниже приводятся примеры использования команды:
mov ах,Table {Пересылка слова из памяти в АХ}
mov Table,ah {Пересылка байта из АН в память}
mov ds,ax {Пересылка в сегмент данных}
mov es:[bx],ax {Пересылка слова в память: базовая адресация с заменой сегмента}
mov ch,-17 {Переслать константу в регистр}
mov Table,$FF {Переслать константу в память}
С помощью MOV нельзя пересылать:
из памяти в память, например, вместо
mov Mem1,Mem2
следует использовать
mov ax,Mem2
mov Mem1,ax
константу или переменную в DS, например, нельзя
mov DS,Data_Seg
нужно:
mov ax,Data_Seg
mov ds,ax
один сегментный регистр в другой, например, нельзя
mov es, ds
но можно
mov ax,ds
mov es,ax
в регистр CS; значение этого регистра (сегмента кода) автоматически меняется при выполнении дальних команд CALL и JMP; кроме того, он загружается из стека при выполнении команды RETF (выход из дальней процедуры).
Для временного сохранения регистров и данных, а также для обмена значениями между регистрами широко используются стековые команды PUSH и POP. Каждая из них работает со словом, т.е. в стек нельзя поместить или извлечь из него одиночный байт. При выполнении PUSH вначале уменьшается на 2 содержимое указателя SP, а затем операнд помещается по адресу SS: SP. При извлечении из стека сначала читается память по адресу SS: SP, а затем SP увеличивается на 2. Таким образом, при заполнении указатель вершины стека SP смещается к младшим адресам, а при освобождении -к старшим. При работе со стеком следует помнить о специфике использования стековой памяти («последним пришел - первым ушел»), а также о том, что эта память интенсивно используется при вызове процедур, т.е. состояние стека к моменту выхода из процедуры должно быть строго согласовано с дальнейшей работой программы. Первое условие определяет порядок извлечения данных из стека - он должен быть обратным порядку, в котором эти данные помещались в стек. Второе условие фактически означает, что после выхода из процедуры указатель SP должен содержать то же смещение, что и к моменту входа в нее. Иными словами, процедура не должна «забыть» в стеке лишнее слово или взять из него больше нужного.
Команда загрузки адреса LEA загружает в регистр адрес (смещение) нужного участка памяти. Этого же можно достичь с помощью зарезервированного слова OFFSET, стоящего перед именем переменной. Например:
mov ax, OFFSET X {Загружаем смещение X в АХ}
lea ax,X {To же действие}
Разница состоит в том, что в случае команды LEA разрешается использовать индексную адресацию, что особенно удобно при пересылке массивов данных.
Две другие команды адресной загрузки - LDS и LES загружают первое 16-разрядное слово из источника в регистр-приемник, а затем следующее слово - в регистр DS или ES, т.е. они рассчитаны на загрузку полного адреса операнда (сегмента и смещения).
Адресний простір мікроконтролера Atmel AVR.
Логічні та арифметичні команди. Приклади використання.
Основными арифметическими операциями являются сложение и вычитание двух чисел. Эти команды по большей части очевидны. Сложение и вычитание содержимого двух регистров производиться при помощи команд ADD и SUB. Модификации этих команд, которые учитывают значение флага переноса, позволяют выполнить операции над 8-, 16-, 24- и даже 32-разрядными числами со знаком, хранящимися в регистрах. Поясним функции флагов отрицательного результата N (negative), переполнения V (overflow) и знака S (sign), так как они имеют некоторые особенности и сложны для понимания при первоначальном знакомстве. Флаг отрицательного результата N просто копирует значение бита 7 результата, который показывает, является результат положительным или отрицательным числом. Флаг переполнения V в регистре SREG указывает на переполнение во время сложения или вычитания чисел со знаком. Рассмотрим пример: ADD R1, R2 Флаг V будет установлен в 1, если в регистрах R1 и R2 содержаться положительные числа, а результат их сложения окажется больше 127, или оба числа отрицательны, а результат будет меньше –128. Рассмотрим пример с конкретными значениями: LDI R1, 100 ;100 = 0b01100100 LDI R2, 100 ;Занести 0b01100100 R1 и R2 ADD R1, R2 ;R1 = R1 + R2 = 200 = 0b11001000 Десятичное число 200 в двоичной записи имеет значение бита 7 равное 1, что указывает на получение отрицательного результата. Следовательно, после выполнения операции сложения флаг N будет установлен в 1. Но в данном случае вместе с флагом N будет так же установлен в 1 флаг V, указывая, что произошло переполнение при обработке чисел со знаком. Если содержимое R1 = R2 = - 100, то результатом сложения этих чисел будет 0b00111000 в двоичной системе счисления, что является положительным числом. При этом флаг N будет сброшен в 0,показывая, что результата положителен, однако будет установлен флаг V, означающий, что на самом деле это не так. Использование флага S = N ^ V позволяет рассматривать результат как 9-разрядное число со знаком, где старшим (знаковым) разрядом как раз и является флаг S. Как было отмечено при описании флага V, он устанавливается в 1, когда бит 7 результата имеет неправильное значение, то есть результат не представлен правильным числом со знаком в дополнительном коде. Выполнив операцию «ИСКЛЮЧАЮЩЕЕ ИЛИ» над значением флага V и бита 7 результата, который храниться в бите N, вы получите реальный знак результата. В первом примере (100 + 100) происходит установка в 1 флагов V и N, в результате флаг S будет равняться нулю (1 ^ 1 = 0). Во втором примере (- 100 - 100) флаг N сбрасывается в 0, а флаг V устанавливается в 1, поэтому флаг S будет равняться единице, указывая на то, что результат отрицательный. Флаг S должен использоваться со старшим байтом числа. При операциях с 16-, 24- и 32-разрядными числами значение флага S надо проверять только после завершения последней операции со старшим байтом числа. При операциях с младшими байтами используется флаг переноса С, как обычно при выполнении сложения и вычитания.