- •4. Архитектура мк aTmega16
- •Пространство ввода/вывода avr-мк
- •Регистр статуса
- •Указатель стека
- •Регистр управления/статуса приемопередатчика scon
- •Прерывания и их обработка
- •10. Внешние прерывания
- •12.Таймеры/счетчики мк aTmega16
- •Таймер/счетчик 0
- •Регистр управления таймером/счетчиком 0
- •Регистр совпадения таймера/счетчика 0
- •Регистр масок прерываний от таймеров/ счетчиков
- •Регистр флагов прерываний от т аймеров/счетчиков
- •Общий регистр управления прерываниями
- •Регистр флагов внешних прерыван ий
- •14.Таймер/счетчик 2
- •Регистр статуса асинхронного режима
- •Дополнение: Таймер-счетчик тс/2 с расширенными возможностями Таймер счетчик т/с2 микроконтроллера 8052
- •Регистр управление таймера/счетчика 2 t2com
- •Режимы работы таймера/счетчика 2
- •Регистр режима таймера/счетчика 2 т2моd
- •Дополнительный регистр приоритетов прерываний iрн
- •16.Особенности подключения датчиков с механическими контактами к мк
- •2. Классификация.
- •18. Аналоговый компаратор avr-мк
- •20. Двоично-десятичные коды
- •1. Форматы представления десятичных чисел
- •2. Преобразование целых 16-битных чисел в двоично-десятичные числа
- •3. Преобразование двоичной дроби в двоично-десятичную дробь
20. Двоично-десятичные коды
Преобразование двоичных чисел в двоично-десятичные
Арифметико-логическое устройство AVR-микроконтроллеров (как и других микропроцессоров) выполняет элементарные арифметические и логические операции над числами, представленными в двоичном коде. В двоичном коде считываются результаты преобразования АЦП, в двоичном коде (в формате целых чисел или чисел с плавающей точкой) удобно выполнять обработку результатов измерения. Однако, когда окончательный результат отображается на индикаторе, он должен быть преобразован в десятичный формат, удобный для восприятия человеком.
В данном разделе рассматриваются программы преобразования двоичных чисел в двоично-десятичные.
1. Форматы представления десятичных чисел
В настоящее время распространены два формата представления десятичных чисел в микропроцессорах - упакованный двоично-десятичный код (BCD-Binary-Coded Decimal) и неупакованный десятичный код [1].
Упакованный BCD-код - это такое представление десятичного числа, когда каждая десятичная цифра представляется 4-х битным двоичным позиционным кодом 8-4-2-1. При этом байт содержит две десятичные цифры. Младшая десятичная цифра занимает правую тетраду (биты 3 : 0), старшая - левую тетраду (биты 7 : 4). Многоразрядные BCD-числа занимают несколько смежных байт. Если число является знаковым, то для представления знака в BCD-формате отводится старшая тетрада старшего байта. Для кодирования знака можно использовать шесть двоичных кодовых комбинаций, которые не используются для представления десятичных цифр. Это коды 1010-1111 (A-F в шестнадцатеричном представлении). Обычно для кодирования знака плюс применяют код 1100 (С), а для знака минус - 1101 (D).
Неупакованный
десятичный код является подмножеством
международной таблицы кодирования
символов ASCII (Таблица 1). Видно, что для
хранения неупакованных десятичных
чисел требуется в два раза больше памяти,
так как каждая цифра представляется
8-битным кодом. Таблица
1: ASCII-коды десятичных цифр
2. Преобразование целых 16-битных чисел в двоично-десятичные числа
На сайте www.atmel.com предлагается программа "bin2bcd16" для преобразования целых 16-битных двоичных чисел в двоично-десятичные упакованные числа. В данной статье рассматривается программа "bin16bcd5" (см. Приложение, Программа 1), написанная Терешкиным А. В. согласно алгоритму, изложенному в [1], и выполняющая ту же задачу. Последняя программа по быстродействию, длине кода и количеству используемых регистров оказалась более эффективной, чем первая.
Алгоритм программы "bin16bcd5" заключается в следующем. Предположим, что имеется целое беззнаковое 16-битное число (диапазон от 0 до 65535). Очевидно, что необходимо найти 5 десятичных цифр. Способ преобразования заключается в том, чтобы, вычитая из исходного числа число 10000, сначала определить десятичную цифру десятков тысяч. Затем находится цифра тысяч последовательным вычитанием числа 1000 и т. д. Вычитание каждый раз производится до получения отрицательной разности с подсчетом числа вычитаний. При переходе к определению каждого следующего десятичного разряда в регистрах исходного числа восстанавливается последняя положительная разность. После того, как будет найдена десятичная цифра десятков, в регистрах исходного числа останется десятичная цифра единиц.
Программа "bin16ASCII5" (см. Приложение, Программа 2) преобразует целое двоичное 16-битное число в десятичное неупакованное число. При этом используется тот же алгоритм.
