Хартов В.Я. Микроконтроллеры AVR. Практикум для начинающих (2007) (1264222), страница 13
Текст из файла (страница 13)
б, Прогриммироеание арифметическими операций 79 обнуляем частное результат 8-разрядный сдвиг вычитание делителя если остаток < О,переход иначе установка разряда частного в 1 операнда ля вывода переход для загрузки операндов сброс после 1-го входа запись кода операции деление? 01Ч: с1т тев 1с)1 соцпт Ььт,8 Ь4: то1 ор А го1 ор АН делимого 1в1 тев ;сдвиг частного вцЬ ор АН,ор В Ьгсв гесоч 161 Сешр,Ох01 ог гев, тешр гбшр 15 гесоч: ас)с( ор АН,ор В ; и восстановление остатка Ь5с "бес соцпт Ььт Ьгпе ь4 шоч впон1, гев ;выводимые значения — частное шоч впон2,ор АН ; и остаток Ь5:тес ;*** Обмен тетрадами *** тев'с ВИАР: вЬ1с Р1НР,ЯИ ВИАР ;проверка кнопки гзшр чц1С ) ВИАР(ЯИ4) виар оретапс) ;обмен тетрадами сош орегапс( инвертирование д опт РОНТВ,оретапс) ; на светодиоды сош орегапб ;инвертирование гса11 РЕЬАУ ;задержка наьт: вЬьв Р1ХР,ЯИ ЯХАР тЗшр наьт чц1г: пор тес ;*** Подпрограмма ввода байта от кнопки с уменьшением счетчика нажатий после каждой записи тевс ХН: вбфс Р1НР,ЯИ ХН ;проверка кнопки ГЗШР и Чц11 ) ИН(ЯИ5) тса11 РЕЬАУ ;задержка ср1 вешаТот,1 Ьтпе нЗ с1т вешагог шоч сор,оретапс( срь сор,4 Ьтеч н с)1ч 1сь сапог,з ;если нет, счетчик записи = 3 гЗшр с1еаг и с)1ч: 101 соцпт,4 ;иначе счетчик записи = 4 тЗшр с1еаг 80 3.
Арифметическая обработка данных 3.б. Програииирование арифметических операций 81 чз: ср1 сочно,З Ьхое ч2 ;переходы по значению счетчика пот ор Ан,орехаос!;запись первого операнда х)пр с1еах ч2с орь основ,2 Ьхое ч1 пот ор А,орехаод !запись первого операнда хз'пр сТеах ч1с пот ор В,орехаос! ;запись второго операнда с1еах: с!ео оооос с1х ореханс! ;очистка вех хепр ;гашение онх роетв,хепр ; светодиодов ча1Х5: вЬьв Р1НР, ЯН НН хЗпр чахх5 ч Чоьгс оор хех ;*** Задержка *** РЕЬАтс 1си х19, 10 1см х20, 255 1с!1 х21, 255 ддсс!ес х21 Ьхпе с!с! с!ес х20 Ьхое дс! с!ео х19 Ьхое с!о хех Сложение/вычитание двоичных чисел Задание 3.
Выполнить примеры, задавая слагаемые А и В числами без знака, затем со знаком. В последнем случае ввод отрицательных чисел выполнить в дополнительном коде, Последовательность ввода: код операции, слагаемое А, слагаемое В. Нажатие кнопки 8%6 показывает результат операции, кнопки ЯЪ'7 — признаки результата операции, формируемые в регистре БНЕО.
Для отображения признаков результата используют флаги(табл. 3.2). Таблица 3.2. Байт признаков результата № разряда 7 6 5 4 3 2 1 0 Флаг Н 8 Ч М Х С Примечание. С вЂ” перенос прн сложении (заем прн вычитании), Х вЂ” признак нулевого результата, М вЂ” знак результата при операциях с числами со знаком, Ч вЂ” переполнение разрядной сетки, 8 = !!сгЧ— знак результата вне зависимости от переполнения, Н вЂ” межтетралный перенос(заем). Таблица 3.3. Результаты Заполните табл. 3.3 операндов и наблюдаемых результатов в двоичном коде и признаков для десятичных чисел, удовлетворяющих заданным условиям.
Объясните результаты машинной арифметики. Задание 4. Выполнить операцию вычитания чисел при заданных условиях (см. табл. 3.3), выполняя ввод отрицательных чисел в дополнительном коде и соблюдая такую последовательность ввода: код операции вычитания, уменьшаемое А, вычитаемое В. Умножение и деление целых чисел Задание 5. Выполнить ряд примеров умножения 8-разрядных двоичных чисел. Нажатие кнопки ЯЧЧ6 показывает младший байт произведения, 8%7 — старший байт.
Изменить модуль умножения, включив в него формирование нулевого результата, если один из сомножителей равен О. Задание б. Выполнить деление чисел с восстановлением остатка при условии, что делитель больше О и его значение не вызовет переполнения, Последовательность ввода: — код операции деления, — старший байт делимого с нулевым значением в 7-м разряде, — младший байт, — делитель с нулевым значением в 7-м разряде. Нажатие кнопки 8%6 показывает частное, 8%7 — остаток. Выполнить ряд примеров на деление двоичных чисел.
Задание 7. Изменить программу деления, включив в нее проверку делителя на О и на переполнение. Для обоих случаев прекратить деление, индицируя аномальный случай включением-выключением всех светодиодов. Отладить программу с помощью симулятора, предварительно закомментировав ту ее часть, которая осуществляет проверку кнопок, либо скопировав модуль деления в тестовую программу 3.1 и отключив в ней остальные подпрограм- 83 3 7 онерании над чисяаии с ыавающеи "ючкои 3, Арифметическая обработка данных 82 мы. Проверить работу обновленной подпрограммы деления в ЯТК500. Задание 8.
Изменить программу деления, расширив ее для вычисления дополнительных восьми двоичных разрядов частного при делении остатка. Проверить работу программы с помощью симулятора. 3.7. ОПЕРАЦИИ НАД ЧИСЛАМИ С ПЛАВАЮЩЕЙ ТОЧКОЙ Для выполнения арифметических операций над числами с плавающей точкой в микроконтроллерах необходимо разрабатывать довольно сложные подпрограммы. Исходные числа в формате с плавающей точкой представлены знаком„мантиссой и порядком. Мантисса является правильной дробью, разряды которой представляют значащие разряды числа, порядок показывает фактическое положение точки в записи мантиссы. Для представления чисел с плавающей точкой разработан и введен стандарт !ЕЕЕ-754, включающий базовый одинарный, базовый двойной, расширенный одинарный и расширенный двойной форматы, отличающиеся количеством разрядов и способами представления мантиссы и порядка.
На рис. 3.8 приведена структура полей базового 32-разрядного одинарного формата. Формат содержит знаковый разряд 8, 8-разрядное поле для смещенного порядка Е и 23-разрядное поле для мантиссы Р. 7 О 1 23 31 О Рнс. 3.8. Базовый одинарный формат В этом формате при изображении порядка используется смещение, равное 127, скрытый бит целой части мантиссы Гш содержащий 1. Минимальный (Е = О) и максимальный (Е = 255) порядки зарезервированы для представления специальных чисел.
Диапазон е 38 представления чисел в этом формате составляет + 1О, а точность 6 — 7 десятичных разрядов. Приведем несколько примеров кодирования чисел в этом формате: 1024=1,0к2'~ О!000!00 10000000 00000000 00000000 Ох44800000 -бб эх = — 1.00001011к2 11000010 1000010! 10000000 00000000 ОхС2858000 3!1б = 1,1к2 з 00111! 10 01000000 00000000 00000000 Ох3Е400000 В рассмотренных далее алгоритмах для 8-разрядных микроконтроллеров принимается представление истинного нуля нулевым набором !знак, порядок, мантисса). Специальные числовые значения из стандарта (на изображения бесконечности, неопределенности) учитывать не будем.
Во всех приводимых программах арифметических операций ля микроконтроллеров А ч'К принято размещение исходных операндов и результатов во второй половине регистров общего назна(й ...К ). П рвый операнд, символически обозначаемый М А, размещается в четырех регистрах А: рА (порядок), шАН, шА шАЬ (старший, средний и младший байты мантиссы).
Второй операнд, символически обозначаемый В, размещается в регистрах В: В ( ок) шВН, шВМ, 1пВ1. (мантисса). Результат помещается , шАН шАМ, шА1.. перед выходом из процедуры в регистры рА, шА Сложение Процедура сложения чисел с плавающей точкой одного знака включает следующие действия; ° определяется разность порядков слагаемых Ар = (рА — рВ). При неравенстве порядков, если разность порядков больше О, сдвигается мантисса числа В вправо до тех пор, пока порядок меньшего числа В не станет равным большему; если разность порядков меньше О, сдвигается мантисса числа А вправо; ° после выравнивания порядков слагаемых при Ар = 0 производится сложение мантисс.
В качестве порядка суммы принимается рА или рВ; ° проверяется мантисса суммы на возможность нарушения нормализации. ри . П сложении чисел с одинаковыми знаками возможно нарушение нормализации только влево на один разряд. Чтобы получить нормализованную мантиссу, необходимо сдвинуть ее вправо. Порядок увеличивается на единицу, что может привести к переполнению. На рис. 3.9 приведена схема алгоритма сложения чисел А и В с плавающей точкой и одинаковыми знаками. Каждое слагаемое дставлено однобайтовым порядком и трехбайтовой мантиссой в станд артном формате: знак числа, 8-разрядный смещенный порядок, 23-разрядная мантисса со скрытой единицеи (всего р ряда).
Число А перед началом операции размещено в регистрах А птАН, шАМ, шАЬ, число  — в регистрах рВ, рВН, рВМ, рВ!.. Результат операции сохраняется на месте первого опер нд а аА. 85 3. Арифметическая обработка данньак 3.7. Операции над числами с плавающей точкой Рис. 3.9. Схема алгоритма сложения с плавающей точкой Процедура сложения с плавающей точкой АсИг начинается с проверки знаков слагаемых.
Если знаки операндов не совпадают, знак второго операнда изменяется на противоположный и выполняется переход к процедуре вычитания чисел Яиог'. Если исходные операнды имеют один знак, каждый из них проходит проверку на равенство О. Если один из операндов равен О, сложение не проводится, а результат принимается равным другому операнду. При этом в случае равенства О первого операнда регистры А и В обмениваются операндами.
На этом операция заканчивается. Преобразование результата в стандартный формат не проводится. Если оба операнда ненулевые, в однобитовом флаге Т регистра состояния микроконтроллера ЯВЕЙ сохраняется общий знак операндов и выполняется их восстановление из базового формата. Поскольку для этого используется одна и та же процедура гес из библиотеки вспомогательных процедур, настроенная на работу с регистрами А, перед вторым восстановлением проводится обмен операндами. Далее вычитают порядки. При получении отрицательной разности выполняется обмен операндами и вычитание повторяется.