Лабораторная работа №11. Сложение двухбайтных чисел 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №11. Сложение двухбайтных чисел



 

Цель работы: обучение созданию программ для сложения двухбайтных чисел в различных системах счислений.

Сложение чисел применяется при определении каких-либо технологических параметров установки. Проанализировав сумму чисел, вносят соответствующие изменения в управление установкой.

В один байт можно записать числа от 0 до 255. Для многих практических задач это недостаточно. Если использовать два байта, то можно записать числа от 0 до 2562 -1=65535. Суммирование чисел можно выполнить, задавая слагаемые в 16-ной или иной системе счисления с помощью алгоритма, известного из курса информатики.

Например, требуется сложить десятичные числа 65284 и 65534. Представим наши числа в 16-ной системе счисления, записав каждое из них в два регистра, см. таблицу 11.1. В лабораторной работе эти байты называются старшим и младшим для каждого слагаемого, например h’23’: h’22’.

Т а б л и ц а 11.1 – Суммирование чисел в шестнадцатеричном коде

  Десятичная система Шестнадцатеричная система Старшие байты (регистры) Младшие байты (регистры)
1-е слагаемое   h’FF04’ S1_S =h’FF’ S1_M =h’04’
2-е слагаемое   h’FFFE’ S2_S =h’FF’ S2_M =h’FE’
Полученные суммы   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

Алгоритм перевода дробной части чисел из десятичной системы в другую систему.

Начало алгоритма. Дробную часть числа считаем умножаемым.

Начало цикла. Если умножаемое более нуля (условие цикла),

то умножаем его на основание системы. Полученную целую часть произведения переносим в результат.

иначе (если дробная часть равна нулю) выйти из цикла.

Считать дробную часть новым умножаемым (изменение условия цикла)

Конец цикла (возврат на начало цикла)

Конец алгоритма

Переведем дробную часть первого слагаемого 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’

; Второе слагаемое

MOVLW h’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
           
           
           
           
           

 

Т а б л и ц а 11.4 – Варианты заданий для дробных чисел

Вариант Число S1 Число S2 Вариант Число S1 Число S2
  110,01 110,1   160,06 160,6
  120,02 120,2   170,07 170,7
  130,03 130,3   180,08 180,8
  140,04 140,4   190,09 190,9
  150,05 150,5   200,10 200,20

 

Контрольные вопросы.

1. Что такое основание системы счисления. Какие они могут быть?

2. Как размещается число большее 255 памяти МК?

3. Приведите алгоритм перевода из десятичной системы в шестнадцатеричную систему.

4. Приведите алгоритм перевода из шестнадцатеричной системы в десятичную систему.

5. Как определяется необходимость переноса в старшие байты суммы?

6. Как выполняется программно перенос единицы в старшие байты суммы.

7. Почему при сложении двухбайтных чисел необходимо зарезервировать три регистра для суммы?

8. Какой результат сложения шестнадцатеричных чисел F+1 и FF+1?

9. Где регистрируется переполнение регистра при сложении чисел?

10. Для чего выполняется суммирование чисел?

11. Как можно ли складывать дробные числа?

12. Почему в числе 0,04516 отбросили при округлении цифру 5?

 


Приложение А

Регистр Status

В таблице А.1 показаны расположение и имена битов регистра Status, которые используются для контроля результатов арифметических и логических операций, для выбора банков и других целей.

Т а б л и ц а А.1 – Биты регистра Status

Номера бит                
Имена бит IRP RP1 RP0 -TO -PD Z DC C

В таблице А.1 приняты следующие имена:

а). IRP - бит выбора банка при косвенной адресации (IRP=1 - выбор банка 2 или банка 3, IRP=0 - выбор банка 0 или 1);

б). RP1, RP0 - биты выбора банка при непосредственной адресации (т.е. разряды 5 и 6). Их значения для выбора банков показаны в таблице Г.2;

в). TO - флаг переполнения сторожевого таймера;

г). PD - флаг включения питания;

д). Z -флаг нулевого результата. Записывается “1” при нулевом результате арифметической или логической операции;

е). DC - флаг десятичного переноса или заема. Записывается “1”, если был перенос из младшего полубайта регистра в старший полубайт, актуально при выполнении команд сложения и вычитания в двоично-десятичной системе;

ж). C - флаг переноса или заема. Записывается “1”, если был перенос из старшего бита регистра для команд сложения и вычитания. Вычитание выполняется с помощью сложения уменьшаемого и вычитаемого, которое представлено в дополнительном коде.

Т а б л и ц а А.2 – Выбор номера банка битами RP1 и RP0

RP1(первый бит номера банка) RP0 (нулевой бит номера банка) Номер банка (десятичная система)
     
     
     
     
Примечание. RP1 и RP0 образуют разряды двоичного числа

К отдельным битам регистра можно обращаться по имени или по номеру. Инструкция BTFSC STATUS, Z эквивалентна команде
BTFSC STATUS, 2.

Внимание! Символьное имя S обозначает регистр Status.

Т а б л и ц а А.3 – Значения регистра Status после команды CLRF STATUS

IRP RP1 RP0 -TO -PD Z DC C
            1 или 0 1 или 0

Приложение Б

Описание инструкций МК PIC

Константа в инструкциях представлена символом k. В описании инструкций указаны флаги, которые могут измениться при ее выполнении. Параметр d (dest) в инструкциях определяет, в какой регистр записывается результат. Если d=0 или отсутствует, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f ( от слова file). В программах для параметра d вместо ‘0’ можно писать ‘w’, вместо ‘1’ можно писать ‘f’.

Вместо адреса регистра в программе более удобно писать его символьное имя. Например, регистр по адресу h’21’ имеет имя R1, тогда инструкция, описанная как ADDWF f, d, в программе может быть записана двумя способами: ADDWF h’21’, W или ADDWF R1, W.

Директива ORG h’00’ – это указатель для ассемблера, что код, следующий за этим выражением, начинается с нулевого адреса ЭППЗУ.

 


ADDLW - Сложить k с W

Синтаксис: [label] ADDLW k

Операнды: 0£k£255

Операция: (W) + k à (W)

Изменяемые флаги: С, DC, Z

 

ADDWF -Сложение W и f

Синтаксис: [label] ADDWF f, d

Операнды: 0£f£127

Операция: (W) + (f) à (dest)

Изменяемые флаги: C, DC, Z

ANDLW - Побитное ' И ' k и W

Синтаксис: [label] ANDLW k

Операнды: 0£k£255

Операция: (W).AND. k à (W)

Изменяемые флаги: Z

 

ANDWF -Побитное 'И’ W и f

Синтаксис: [label] ANDWF f, d

Операнды: 0£f£127

Операция: (W).AND. (f) à (dest)

Изменяемые флаги: Z

 

BCF -Очистить бит b в регистре f

Синтаксис: [label] BCF f, b

Операнды: 0£f£127; 0£b£7

Операция: 0 à (f<b>)

Изменяемые флаги: Нет

BSF -Установить бит b в регистре f

Синтаксис: [label] BSF f, b

Операнды: 0£f£127; 0£b£7

Операция: 1àf<b>

Изменяемые флаги: Нет

BTFSC -Проверить бит b в регистре f, пропустить следующую инструкцию, если b=0

Синтаксис: [label] BTFSC f, b

Операнды: 0£f£127; 0£b£7

Изменяемые флаги: Нет

Описание: Если бит b в регистре f равен 0, то следующая инструкция программы пропускается.

 

BTFSS - Проверить бит b в регистре f, пропустить, если b = 1

Синтаксис: [label] BTFSS f, b

Операнды: 0£f£127; 0£b£7

Изменяемые флаги: Нет

Описание: Если бит b в регистре f равен ‘1’, то следующая инструкция программы пропускается.

 

CALL Вызов подпрограммы

Синтаксис: [label] CALL f

CLRF - Очистить f

Синтаксис: [label] CLRF f

Операнды: 0£f£127

Операция: 00h à (f); 1 àZ

Изменяемые флаги: Z

Описание: Очистить содержимое регистра f и установить флаг Z=1.

 

COMF - Инвертировать f

Синтаксис: [label] COMF f, d

Операнды: 0£f£127

Операция: (-f) à (dest)

Изменяемые флаги: Z

Описание: Инвертировать все биты в регистре f.

 

DECF - Вычесть 1 из регистра f

Синтаксис: [label] DECF f, d

Операнды: 0£f£127

Операция: (f) - 1 à (dest)

Изменяемые флаги: Z

DECFSZ - Вычесть 1 из f и пропустить, если f=0

Синтаксис: [label] DECFSZ f, d

Операнды: 0£f£127

Операция: (f) -1 à (dest)

Изменяемые флаги: Нет

Описание: Декрементировать содержимое регистра f. Если результат равен '0', то следующая инструкция программы пропускается.

GOTO -Безусловный переход

Синтаксис: GOTO k

Операнды: 0£k£2047

Операция: Переход на метку

Изменяемые флаги: Нет

INCF -Прибавить 1 к f

Синтаксис: label] INCF f, d

Операнды: 0£f£127

Операция: (f) + 1 à (dest)

Изменяемые флаги: Z

IORLW -Побитное 'ИЛИ' K и W

Синтаксис: [label] IORLW k

Операнды: 0£k£255

Операция (W).OR.(k) à (W)

Изменяемые флаги: Z

 

IORWF - Побитное 'ИЛИ' W и f

Синтаксис: [label] IORWF f, d

Операнды: 0£f£127

Операция: (W).OR.(f) à (dest)

Изменяемые флаги: Z

 

MOVF - Переслать f

Синтаксис: [label] MOVF f, d

Операнды: 0£f£127

Операция: (f) à (dest)

Изменяемые флаги: Z

Описание: Значение d=1 используется для проверки содержимого регистра f на ноль, которое регистрируется флагом Z.

MOVLW - Переслать K в W

Синтаксис: [label] MOVLW k

Операнды: 0£k£255

Операция: kà(W)

Изменяемые флаги: Нет

Описание: В неиспользуемых битах ассемблер устанавливает '0'.

MOVWF -Переслать W в f

Синтаксис: [label] MOVWF f

Операнды: 0£f£127

Операция: (W) à (f)

Изменяемые флаги: Нет

NOP -Нет операции

 

RETURN Возврат из подпрограммы

Синтаксис: [label] RETURN

Операнды: Нет

Операция: TOS à PC

Изменяемые флаги: Нет

Описание: Возврат из подпрограммы. Вершина стека TOS загружается в счетчик инструкций PC.

RLF -Циклический сдвиг регистра f влево через бит C регистра STATUS

Синтаксис: [label] RLF f, d

Операнды: 0£f£127

Изменяемые флаги: С

Описание: Выполняется циклический сдвиг влево содержимого регистра f через бит С регистра status.

 
 

RRF - Циклический сдвиг регистра f вправо через бит C регистра status

Синтаксис: [label] RRF f, d

Операнды: 0£f£127

Изменяемые флаги: С

Описание: Выполняется циклический сдвиг вправо содержимого регистра f через бит С регистра status.

 

 
 

SLEEP Перейти в режим SLEEP

Синтаксис: [label] SLEEP

Операнды: Нет

Операция: 00h à WDT;

00h à предделитель WDT;

1 à -ТО; 0 à PD

Изменяемые флаги: -ТО, -PD

Описание: Сбросить флаг включения питания -PD в '0'. Установить флаг -ТО переполнения WDT в '1'. Очистить таймер WDT и его предделитель. Перевести микроконтроллер в режим SLEEP и выключить тактовый генератор.

SUBLW -Вычесть W из K

Синтаксис: [label] SUBLW k

Операнды: 0£k£255

Операция: k - (W) à (W)

Изменяемые флаги: C, DC, Z

SUBWF -Вычесть W из f

Синтаксис: [label] SUBWF f, d

Операнды: 0£f£127; dÎ [0,1]

Операция: (f) –(W) à (dest)

Изменяемые флаги: C, DC, Z

SWAPF -Поменять местами полубайты в регистре f

Синтаксис: [label] SWAPF f, d

Операнды: 0£f£127

Операция: (f<3:0>) à (dest<7:4>)

Изменяемые флаги: Нет

XORLW- Побитное 'исключающее ИЛИ ' K и W

Синтаксис: label] XORLW k

Операнды: 0£k£255

Операция: (W).XOR.k à (W)

Изменяемые флаги: Z

XORWF - Побитное 'исключающее ИЛИ ' W и f

Синтаксис: [label] XORWF f, d

Операнды: 0£f£127

Операция: (W).XOR.(f) à (dest)

Изменяемые флаги: Z


Приложение В

Модуль таймера TMR1

TMR1 - 16-разрядный таймер/счетчик, состоящий из двух 8-разрядных регистров (TMR1H и TMR1L), доступных для чтения и записи. Счет выполняется в спаренных регистрах (TMR1H и TMR1L). Инкрементируя их значение от 0000h до FFFFh. Если добавить единицу регистр переполняется и далее считает с 0000h. При переполнении счетчика устанавливается в '1' флаг прерывания TMR1IF в регистре PIR1<0>. Само прерывание можно разрешить/запретить установкой/сбросом бита TMR1IE в регистре Р1Е1<0>.

TMR1 может работать в режимах: режим таймера, режим счетчика.

Включается TMR1 установкой бита TMR1ON в ‘1’ (T1CON<0>).

Битом TMR1CS (T1CON<1>) выбирается источник тактовых импульсов. Счетчики TMR1 инкрементируются при каждом машинном цикле.

Когда включен генератор тактовых импульсов (T1OSCEN=1), выводы RC1/T1OSI/CCP2 и РС0/T1OSO/TICK1 настроены как входы. Значение битов TRISC<1:0> игнорируется, а чтение данных с этих выводов дает результат '0'.

Управляющие биты TMR1 находятся в регистре T1CON.

Сброс регистров TMR1 (TMR1H, TMR1L). Регистры TMR1H и TMR1L не сбрасываются в 00h при сбросе по включению питания и других видах сброса.

Предделитель TMR1 очищается при записи в TMR1L или TMR1H.

Регистр PIE1 (адрес 8Ch) доступен для чтения и записи, содержит биты разрешения периферийных прерываний. Чтобы разрешить периферийные прерывания необходимо установить в '1' бит PEIE(INTCON<6>).

Регистр INTCON (адреса 0Вh, 8Вh, 10Вh или 18Вh) доступен для чтения и записи. Он содержит биты разрешений и флаги прерываний: переполнение TMR1; изменения уровня сигнала на выводах PORTB; внешний источник прерываний RB0/INT.

Примечание. Флаги прерываний устанавливаются при возникновении условий прерываний вне зависимости от соответствующих битов разрешения и бита общего разрешения прерываний GIE (INTCON<7>).

Регистр PIR1 доступен для чтения и записи, содержит флаги прерываний периферийных модулей.

Примечание. Флаги прерываний устанавливаются при возникновении условий прерываний вне зависимости от соответствующих битов разрешения и бита общего разрешения прерываний GIE (INTCON<7>). Программное обеспечение пользователя должно сбрасывать соответствующие флаги при обработке прерываний от периферийных модулей.


Приложение Г

Карта памяти МК PIC16877

 
 

Список литературы

1. Сайт в Internet www.microchip.ru.

2. Погребинский М.П. Микропроцессорные системы управления электротехническими установками. –М.: МЭИ, 2003

3. Кохц Дитер. Измерение, управление с помощью PIC-контроллеров. Киев. Наукова думка. 2007.

4. Заец Н.И. Радиолюбительские конструкции на PIC. –М.: Солон, 2003.

5. Яценков В.С. Микроконтроллеры Microchip. Практическое руководство. – 2 –е изд. исп. и допол. – М.: Горячая линия – Телеком, 2005.

6. Катцен С. PIC микроконтроллеры. Все, что необходимо вам знать. –М.: Додека, 2008.

7. Фрунзе А.В., Фрунзе М.А. Микроконтроллеры? Это же просто. М.: ООО ИД СКИМЕН, 2003.

8. Дьяков А.Ф., Овчаренко Н.И. Микропроцессорная релейная защита и автоматика электроэнергетических систем. М.: - Издательство МЭИ, 2000.

9. А.А. Копесбаева. Микропроцессорные комплексы в системах управления. Учебное пособие. АИЭС, 2010. -124 с.

10. В. М. Тарасов. Элементы и устройства автоматики. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальности 5В070200 - Автоматизация и управление. - Алматы: АУЭС, 2011.

 

Содержание

Введение 1. Лабораторная работа №1. Байтовые и битовые команды. Логика 2 Лабораторная работа № 2. Маскирование. Суммирование массива 3 Лабораторная работа №3. Подпрограммы 4 Лабораторная работа №4. Умножение на дробное число 5 Лабораторная работа №5. Регулирование расхода газа 6 Лабораторная работа №6. Программирование клавиатуры 7. Лабораторная работа №7. Автоматизация упаковки 8 Лабораторная работа №8. Перевод чисел из 2-й в 2_10 систему. 9 Лабораторная работа №9. Таймер TMR1 10 Лабораторная работа №10. Прерывания 11 Лабораторная работа №11. Сложение двухбайтных чисел Приложение А. Регистр Status Приложение Б. Описание инструкций микроконтроллера PIC Приложение В. Модуль таймера TMR1 Приложение Г. Карта памяти МК PIC16877 Список литературы  

Св. план 2011 г., поз.

 

Виталий Михайлович Тарасов

 

       
   
Программирование цифровой техники
 
 
Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальности 5В070200 «Автоматизация и управление» - Алматы: АУЭС, 2011. – 50с.  

 


Редактор ________________

Подписано в печать ____________ Формат 60х84 1/16

Тираж _____ экз. Бумага типографская №1

Объем _____ уч. изд. л. Заказ ______ Цена тг.

 

 

Копировально-множительное бюро
Некоммерческого акционерного общества

«Алматинский институт энергетики и связи»

 
050013, Алматы, Байтурсынова, 1



Поделиться:


Последнее изменение этой страницы: 2017-01-28; просмотров: 915; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.115.195 (0.169 с.)