![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа №11. Сложение двухбайтных чиселСодержание книги
Поиск на нашем сайте
Цель работы: обучение созданию программ для сложения двухбайтных чисел в различных системах счислений. Сложение чисел применяется при определении каких-либо технологических параметров установки. Проанализировав сумму чисел, вносят соответствующие изменения в управление установкой. В один байт можно записать числа от 0 до 255. Для многих практических задач это недостаточно. Если использовать два байта, то можно записать числа от 0 до 2562 -1=65535. Суммирование чисел можно выполнить, задавая слагаемые в 16-ной или иной системе счисления с помощью алгоритма, известного из курса информатики. Например, требуется сложить десятичные числа 65284 и 65534. Представим наши числа в 16-ной системе счисления, записав каждое из них в два регистра, см. таблицу 11.1. В лабораторной работе эти байты называются старшим и младшим для каждого слагаемого, например h’23’: h’22’. Т а б л и ц а 11.1 – Суммирование чисел в шестнадцатеричном коде
Результат представим в десятичной системе счисления: h’01FF02’® При сложении, байтов, если сумма более 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 – Суммирование двухбайтных дробных чисел
Результат, полученный в шестнадцатеричной системе счисления, представим в десятичной форме: Sum=1*162+15*161+15*160+0*16-12*16-2=
Как видим, результаты в обоих случаях совпали с точностью до третьего знака после запятой. В блок-схеме на рисунке 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 – Варианты заданий для целых чисел
Т а б л и ц а 11.4 – Варианты заданий для дробных чисел
Контрольные вопросы. 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
В таблице А.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
К отдельным битам регистра можно обращаться по имени или по номеру. Инструкция BTFSC STATUS, Z эквивалентна команде Внимание! Символьное имя S обозначает регистр Status. Т а б л и ц а А.3 – Значения регистра Status после команды CLRF STATUS
Приложение Б Описание инструкций МК 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>).
Примечание. Флаги прерываний устанавливаются при возникновении условий прерываний вне зависимости от соответствующих битов разрешения и бита общего разрешения прерываний 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.
Содержание
Св. план 2011 г., поз.
Виталий Михайлович Тарасов
Редактор ________________ Подписано в печать ____________ Формат 60х84 1/16 Тираж _____ экз. Бумага типографская №1 Объем _____ уч. изд. л. Заказ ______ Цена тг.
Копировально-множительное бюро «Алматинский институт энергетики и связи»
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-01-28; просмотров: 964; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.158.233 (0.015 с.) |