- •Алматы 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
Конец алгоритма
Переведем дробную часть первого слагаемого 0,017 в шестнадцатеричную систему с точностью до трех шестнадцатеричных цифр, а затем округлим. Целые части чисел выделены жирным шрифтом.
0,017*16=0,272; 0,272*16=4,352; 0,352*16=5,63. Таким образом, 0,01710=0,0416. Третью цифру 5, поскольку она меньше 8 отбрасываем.
Дробная часть второго слагаемого 0,991*16=15,856; 0,856*16=13,696; 0,696*16=11,136. Таким образом, 0,99110=FDB16, округляя до двух цифр, получим FE.
В результате работы программы были получены значения, представленные в таблице 11.2.
Т а б л и ц а 11.2 – Суммирование двухбайтных дробных чисел
|
Десятичная система |
Шестнадцатеричная система |
Старшие байты. Целая часть числа |
Младшие байты. Дробная часть числа |
1-е слагаемое |
255,017 |
h’FF,04’ |
S1_S =h’FF’ |
S1_M =h’04’ |
2-е слагаемое |
255,991 |
h’FF,FE’ |
S2_S =h’FF’ |
S2_M =h’FE’ |
Полученные суммы |
511,008 |
SUM_3=h’01’ |
SUM_S=h’FF’ |
SUM_M =h’02’ |
Результат, полученный в шестнадцатеричной системе счисления, представим в десятичной форме: Sum=1*162+15*161+15*160+0*16-12*16-2= =256+240+15+0+0,0078125=511,0078125.
Результат десятичного сложения 255,017+255,991=511,008.
Как видим, результаты в обоих случаях совпали с точностью до третьего знака после запятой.
В блок-схеме на рисунке 11.1 предполагается, что слагаемые заданы.
Фрагменты программы сложения двухбайтных чисел (до 65535).
Применяемые символьные имена регистров показаны на рисунке 11.1 и в таблице 11.1.
CLRF SUM_M; очищаем регистры для суммы
CLRF SUM_S
CLRF SUM_3
;Первое слагаемое
MOVLW h’04’
MOVWF S1_M; младший байт S1_M= h’04’
MOVLW h’FF’
MOVWF S1_S; старший байт S1_S= h’FF’
; Второе слагаемое
MOVLWh’FE’
MOVWF S2_M; младший байт S2_M=h’FE’
MOVLW h'FF'
MOVWF S2_S; старший байт S2_S= h'FF'
; Сложение младших байтов
MOVF S1_M, W
ADDWF S2_M, W
MOVWF SUM_M
BTFSC STATUS, C; Если был перенос, т. е. сумма более 255,
INCF SUM_S, F; только при С=1, увеличиваем байт.
; Сложение старших байтов
MOVF SUM_S, W
ADDWF S1_S, W
BTFSC STATUS, C; был перенос?
INCF SUM_3, F; только при С=1 увеличиваем третий байт суммы.
ADDWF S2_S, W
MOVWF SUM_S
BTFSC STATUS, C; был перенос?
INCF SUM_3, W; только при C=1, увеличиваем третий байт суммы
GOTO$
END
Задание. Выполните сложение двухбайтных чисел, используя шестнадцатеричную систему счисления по заданиям таблиц 11.3 и 11.4. Результаты занесите в таблицы 11.1 и 11.2.
Т а б л и ц а 11.3 – Варианты заданий для целых чисел
Вариант |
Число S1 |
Число S2 |
Вариант |
Число S1 |
Число S2 |
1 |
60001 |
10001 |
6 |
65406 |
60006 |
2 |
30002 |
20002 |
7 |
60007 |
10007 |
3 |
40003 |
30003 |
8 |
30008 |
20008 |
4 |
65504 |
40004 |
9 |
40009 |
30009 |
5 |
64505 |
50005 |
10 |
50010 |
40010 |
Т а б л и ц а 11.4 – Варианты заданий для дробных чисел
Вариант |
Число S1 |
Число S2 |
Вариант |
Число S1 |
Число S2 |
1 |
110,01 |
110,1 |
6 |
160,06 |
160,6 |
2 |
120,02 |
120,2 |
7 |
170,07 |
170,7 |
3 |
130,03 |
130,3 |
8 |
180,08 |
180,8 |
4 |
140,04 |
140,4 |
9 |
190,09 |
190,9 |
5 |
150,05 |
150,5 |
10 |
200,10 |
200,20 |
Контрольные вопросы.
Что такое основание системы счисления. Какие они могут быть?
Как размещается число большее 255 памяти МК?
Приведите алгоритм перевода из десятичной системы в шестнадцатеричную систему.
Приведите алгоритм перевода из шестнадцатеричной системы в десятичную систему.
Как определяется необходимость переноса в старшие байты суммы?
Как выполняется программно перенос единицы в старшие байты суммы.
Почему при сложении двухбайтных чисел необходимо зарезервировать три регистра для суммы?
Какой результат сложения шестнадцатеричных чисел F+1 иFF+1?
Где регистрируется переполнение регистра при сложении чисел?
Для чего выполняется суммирование чисел?
Как можно ли складывать дробные числа?
Почему в числе 0,04516отбросили при округлении цифру 5?