
- •Программирование цифровой техники и микроконтроллеров управления
- •Алматы 2012
- •1 Микроконтроллеры в современном мире
- •1.1 Краткая история развития микроконтроллеров
- •1.2 Задачи и роль микроконтроллеров
- •2 Выполнение арифметических операций в мп
- •2.1 Системы счислений
- •2.2 Двоичная арифметика
- •2.3 Дополнительный код
- •2.4 Знаковый разряд
- •3 Регистры общего и специального назначения
- •3.1 Регистры portc и trisc
- •3.2 Регистр Status
- •3.3 Фиксированная (абсолютная) адресация
- •4 Косвенная адресация. Логика
- •4.1 Косвенная адресация
- •4.2 Логические функции
- •5 Маскирование. Стек
- •5.1 Маскирование
- •5.2 Счетчик команд
- •5.3 Стек
- •6 Конвейер и подпрограмма задержки
- •6.1 Конвейер
- •6.2 Программа задержки
- •6.3 Расчет времени задержки
- •7 Выполнение умножения и деления
- •7.1 Умножение и деление при помощи сдвига
- •7.2 Инструкции условных переходов
- •7.3 Целочисленное умножение
- •7.4 Целочисленное деление
- •7.5 Умножение на дробное число
- •8 Программирование клавиатуры. Дешифратор
- •8.1 Клавиатура
- •8.2 Фрагменты программы
- •8.3 Дешифратор
- •8.4 Компаратор
- •9 Основные элементы цифровой техники
- •9.1 Сумматор
- •9.2 Арифметико-логическое устройство
- •9.3 Бистабильные схемы
- •9.4 Триггеры и регистры
- •10 Структура микроконтроллера. Индикатор
- •10.1 Применение операций сдвига
- •10.2 Цифровой индикатор
- •10.2 Структурная схема мк
- •11 Прерывания и сторожевой таймер
- •11.1 Прерывания
- •11.2 Подсчет посетителей с помощью прерываний
- •11.3 Сторожевой таймер
- •12 Фактор времени и аналоговый мир
- •12.1 Модуль таймера tmr1
- •12.2 Применение таймера tmr1
- •12.3 Аналоговый мир
- •Приложение а Список некоторых сокращений
- •Список литературы
- •Содержание
- •050013, Алматы, Байтурсынова, 126
2.2 Двоичная арифметика
Двоичная арифметика подчиняется тем же правилам, что и привычная для нас арифметика по основанию 10. Простейшей арифметической операцией является операция сложения, представляющая сокращенную форму записи операции нахождения общего количества чего-либо. Двоичное сложение подчиняется всего четырем правилам:
0+0=0; 0+1=1; 1+0=1; 1+1=10 (1 в переносе).
Сначала эти правила применяются к самым младшим значащим битам (Least Significant Bit — LSB). При возникновении переноса он передается в бит, расположенный левее. Процесс вычисления заканчивается старшими значащими битами (Most Significant Bit — MSB). Если из этой позиции происходит перенос, то именно он становится самым старшим битом суммы. Ниже в примерах а) и б) складываются числа 96 и 37:
а) десятичные числа: 96 1-е слагаемое + 37 2-е слагаемое ^^ переносы 133 сумма |
б) двоичные числа: 1100000 1-е слагаемое + 0100101 2-е слагаемое ^^ переносы 10000101 сумма |
В соответствии с методикой вычитания десятичных чисел аналогичные правила вычитания применяются и к двоичным числам, начиная с младших битов и заканчивая старшими. Для каждого бита, в котором из меньшего числа вычитается большее число, из ближайшего старшего бита занимается единица. С учетом заема правила вычитания в двоичной системе имеют вид:
0-0=0; 0-1=1 из старшего бита занимается 1; 1-0=1; 1-1=0. |
|
Ниже в примерах а) и б) находится разность чисел 96 и 37: |
|
а) десятичные числа: 96 уменьшаемое - 37 вычитаемое ^ заем 59 разность |
б) двоичные числа: 1100000 уменьшаемое -0100101 вычитаемое ^^ заем 0111011 разность |
Несмотря на то, что эти знакомые методы прекрасно работают, при реализации их в цифровых схемах возникает ряд проблем:
Что делать, если вычитаемое меньше уменьшаемого?
Как нам различать положительные и отрицательные числа?
Можно ли выполнить вычитание с помощью блока суммирования?
Чтобы понять суть проблем, найдем разность 37-96:
а) десятичные числа 37 уменьшаемое - 96 вычитаемое ^ заем 41 ожидаемая разность -59 |
б) двоичные числа 0100101 уменьшаемое - 1100000 вычитаемое ^ заем 1000101 ожидаемая разность -0111011 |
Результат получился неожиданным. Чтобы понять, что получилось, рассмотрим дополнительный код.
2.3 Дополнительный код
Обычно, если уменьшаемое меньше вычитаемого, мы меняем операнды местами и добавляем знак минуса к результату, т.е. вычисляем выражение разность = вычитаемое - уменьшаемое. Если мы не выполним такой перестановки, как показано в примере, приведенном выше, то результат покажется неверным. На самом деле число 41 является правильным в том смысле, что представляет собой разность между числом 59 (правильный результат) и 100, то есть число 41 представляет собой дополнительный код числа 59 в десятичной системе. Более того, сам факт заема из старшего разряда числа указывает на то, что результат операции отрицателен и представлен в дополнительном коде. Для преобразования числа, представленного в дополнительном коде, в «нормальный» вид достаточно просто инвертировать каждый десятичный разряд и к полученному значению прибавить единицу. Инвертирование десятичного разряда заключается в вычитании его значения из 9.
Далее дополнительный код будем обозначать курсивом.
Таким образом, дополнительный код числа -59 в десятичной системе равен: 59 -> 40+1=41.
Причиной, по которой мы не оставляем отрицательные числа в дополнительном коде, является необычность для нас такого представления. Разумеется, использование дополнительного кода для представления отрицательных значений применимо и к двоичным числам. Причем, простота инвертирования (0—>1, 1—>0) делает этот метод очень привлекательным. Обратимся к приведенному выше примеру:
1000101 -> 0111010 + 1 = -0111011, т.е. -59 в десятичной системе.
И все же отрицательные числа следует оставлять в дополнительном коде. Операция преобразования в дополнительный код является обратимой.