- •Алматы 2011
- •1 Лабораторная работа №1. Байтовые и битовые команды. Логика
- •2 Лабораторная работа № 2.Маскирование. Суммирование массива
- •3 Лабораторная работа №3. Подпрограммы
- •4 Лабораторная работа №4. Умножение на дробное число
- •5 Лабораторная работа №5. Регулирование расхода газа
- •6. Лабораторная работа №6. Программирование клавиатуры
- •Фрагменты программы.
- •8 Лабораторная работа №8. Перевод чисел из 2-й в 2_10 систему.
- •9 Лабораторная работа №9. Таймер tmr1
- •10 Лабораторная работа №10. Прерывания
- •11 Лабораторная работа №11. Сложение двухбайтных чисел
- •Конец алгоритма
- •Конец алгоритма
- •Приложение а Регистр Status
- •Приложение б Описание инструкций мк pic
- •Приложение в Модуль таймера tmr1
- •Приложение г Карта памяти мк pic16877
- •Список литературы
- •0 50013, Алматы, Байтурсынова, 1
11 Лабораторная работа №11. Сложение двухбайтных чисел
Цель работы: обучение созданию программ для сложения двухбайтных чисел в различных системах счислений.
Сложение чисел применяется при определении каких-либо технологических параметров установки. Проанализировав сумму чисел, вносят соответствующие изменения в управление установкой.
В один байт можно записать числа от 0 до 255. Для многих практических задач это недостаточно. Если использовать два байта, то можно записать числа от 0 до 2562 -1=65535. Суммирование чисел можно выполнить, задавая слагаемые в 16-ной или иной системе счисления с помощью алгоритма, известного из курса информатики.
Например, требуется сложить десятичные числа 65284 и 65534. Представим наши числа в 16-ной системе счисления, записав каждое из них в два регистра, см. таблицу 11.1. В лабораторной работе эти байты называются старшим и младшим для каждого слагаемого, например h’23’: h’22’.
Т а б л и ц а 11.1 – Суммирование чисел в шестнадцатеричном коде
|
Десятичная система |
Шестнадцатеричная система |
Старшие байты (регистры) |
Младшие байты (регистры) |
1-е слагаемое |
65284 |
h’FF04’ |
S1_S =h’FF’ |
S1_M =h’04’ |
2-е слагаемое |
65534 |
h’FFFE’ |
S2_S =h’FF’ |
S2_M =h’FE’ |
Полученные суммы |
130818 |
SUM_3=h’01’ |
SUM_S=h’FF’ |
SUM_M =h’02’ |
Результат представим в десятичной системе счисления: h’01FF02’1*164+15*163+15*162+0*161+2*160=65536+61440+3840+0+2=130818.
При сложении, байтов, если сумма более h’FF’(то есть более 255) необходимо предусмотреть перенос единицы в нулевой бит более старшего байта (регистра). Очевидно, что сумма может занимать три байта. Момент переполнения регистра фиксируется в битеСрегистраStatus,он становится равным единице. Этот факт можно использовать для программного увеличения более старшего регистра на единицу выполняя, таким образом, арифметический перенос.
С другой стороны можно считать, что в старшем байте представлена целая часть числа, а в младшем байте дробная часть числа. Такое число можно представить как многочлен A=K2*162+ К1*161+K0*160+K-1/16-1+К-2/16-2.
Сложим дробные десятичные слагаемые 255,017 и 255,991. Переведем в шестнадцатеричную систему отдельно целую и дробную части.
Алгоритм перевода целых чисел из 10-ной системы в другую систему.
Начало алгоритма. Заданное число считаем делимым.
Начало цикла. Если делимое более нуля (условие выполнения цикла),
то разделить его на основание системы, найти целые частное и остаток,
иначе (если делимое не больше нуля) выйти из цикла.
Считать частное новым делимым (изменение аргумента условия цикла)
Конец цикла(возврат на начало цикла).
Переписать остатки в обратном порядке на строку результата.
Конец алгоритма
Переводим 254: 16=15 (14)
14:16=0 (14). Итак, получили 25410=FE16
Алгоритм перевода дробной части чисел из десятичной системы в другую систему.
Начало алгоритма. Дробную часть числа считаем умножаемым.
Начало цикла.Если умножаемое более нуля (условие цикла),
то умножаем его на основание системы. Полученную целую часть произведения переносим в результат.
иначе (если дробная часть равна нулю) выйти из цикла.
Считать дробную часть новым умножаемым (изменение условия цикла)
Конец цикла(возврат на начало цикла)