
- •Оглавление
- •Послідовний периферійний інтерфейс (spi).
- •Аналоговий компаратор.
- •Команди обміну даними. Приклади використання.
- •Адресний простір мікроконтролера Atmel avr.
- •Логічні та арифметичні команди. Приклади використання.
- •Способи адресації операндів Atmel avr.
- •Переривання в мікроконтролерах Atmel avr.
- •Команди розгалуження. Приклади використання.
- •Універсальний асинхронний приймач-передавач. Протокол зв’язку rs-232.
- •Основні архітектури 8-бітних мікропроцесорних пристроїв.
- •Будова ядра мікроконтролера Atmel avr.
- •Функції. Угода про виклики функцій.
- •Типи даних та їх розміщення в пам’яті мікроконтролера.
- •Організація циклів на мові Сі. Приклади використання.
- •Універсальний асинхронний приймач-передавач. Протокол зв’язку rs-422.
- •Інтерфейс шини can.
- •Компіляція та оптимізація програм.
- •Цифро-аналогові перетворювачі.
- •Організація обробки переривань на мові Сі.
- •Послідовний інтерфейс зв’язку i2c
- •Аналогово-цифрові перетворювачі.
Адресний простір мікроконтролера 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 надо проверять только после завершения последней операции со старшим байтом числа. При операциях с младшими байтами используется флаг переноса С, как обычно при выполнении сложения и вычитания.