Лабораторная работа №1. Байтовые и битовые команды. Логика 


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



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №1. Байтовые и битовые команды. Логика



Требования к отчету.

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

Лабораторная работа должна быть защищена студентом.

Оборудование и программное обеспечение для проведения лабораторных работ: Windows 98 или выше, среда MPLAB, комплект УМК-7.


Лабораторная работа №6. Программирование клавиатуры

 

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

Клавиатура используется в реальных программах для ввода данных, инструкций, для изменения алгоритма вычислений. В лабораторной работе с клавиатуры будем подавать сигнал ’1’ в PORTD, без применения дополнительного источника питания. Сигнал будет обработан микропроцессором и будут внесены изменения в работу программы.

Роль кнопок клавиатуры в программе и их расположение. “5” - Кнопка Pusk1 на пульте; “6” - Кнопка Pusk2 по месту; “Shift”- Кнопка Stop1 на пульте; “9” - Кнопка Stop2 по месту. К биту 1 PORTD подключена кнопка K1, к биту 7 кнопка K7. Кнопки имитируют реальное оборудование.
Рисунок 6.1 – Схема клавиатуры  

Изучите схему пленочной клавиатуры (рисунок 6.1). Такая схема продиктована тем, что все кнопки подключаются к одному регистру.

Рисунок 6.2 – Монтажная схема подключения кнопки «1»

На рисунке 6.2 приведена, в качестве примера, монтажная схема подключения кнопки с цифрой «1» к PORTD. Разряды RD7, RD6, RD5, RD4 предназначены для подачи сигнала «1». Остальные для приема сигнала. В разряде RD0 по заводской схеме всегда записана «1». Одна клемма кнопки «1» подключена к выводу RD7, а вторая клемма кнопки подключена к выводу RD3. Бит RD7 должен быть запрограммирован на вывод, а бит RD3 - на ввод.

Задание на проектирование.Создать программу автоматизации окрасочной камеры по лабораторной работе «Подпрограммы», изменив её. Предусмотреть запуск камеры для окрашивания каждой детали кнопками «Пуск» и останов камеры кнопками «Стоп» по месту и с пульта оператора.

Дребезг контактов клавиатуры убирается включением подпрограммы Timer. Кнопка Stop в данной программе находится в подпрограмме Timer. Выключение оборудования кнопкой здесь возможно, потому что при выполнении программы, МК практически все время находится во внутреннем цикле подпрограммы Timer. При других алгоритмах такой вариант выключения невозможен, необходимо предусмотреть прерывание.

Фрагменты программы.

Добавленные команды по сравнению с лабораторной работой с таймером, выделены курсивом.

; ниже инструкции для настройки PORTD.

CLRF TRISC

MOVLW b'00001111'

MOVWF TRISD; настраиваем PORTD: биты 0-3 на ввод, 4-7 на ввод.

BCF STATUS, 5

CLRF PORTC

Рабочая часть программы.

MOVLW B'11110000'

BSF STATUS, 5

CLRF TRISC

CLRF PIE1; запрещаем периферийные прерывания.

BCF STATUS, 5

CLRF T1CON; установка TMR1 в режим ожидания, тактирование TMR1 от внутреннего генератора, значение предделителя частоты =1:1.

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

Переводим 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

Требования к отчету.

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

Лабораторная работа должна быть защищена студентом.

Оборудование и программное обеспечение для проведения лабораторных работ: Windows 98 или выше, среда MPLAB, комплект УМК-7.


Лабораторная работа №1. Байтовые и битовые команды. Логика

Цель работы: изучение инструкций BSF, BCF, ADDWF, ANDWF, IORWF, XORWF, SUBWF. Выполнение сложения, вычитания, применение логических функций.

Регистры, применяемые в программе, могут находиться в разных банках. Номер банка, с которым работает программа, определяется регистром специального назначения (РСН) Status, см. приложение А. Кроме того этот регистр контролирует результат выполнении операций, фиксируя переполнение и обнуление регистров. На основе этого контроля создается изменение порядка выполнения алгоритма, т.е. его ветвление.

Изучите формат и назначение инструкций BSF, BCF, ADDWF, SUBWF, ANDWF, IORWF, XORWF по приложению Б.

Операции сложения и вычитания выполняются в двоичном коде, причем вычитание выполняется с помощью прибавления к уменьшаемому вычитаемого, представленного в дополнительном коде.

Пример. Выполняем приведенные действия, используя при вычитании числа, сложение в дополнительном коде.

240 11110000 240 11110000

+ 2 ® + 00000100 - 128 ® + 01111111 - инверсия 128

242 11110100 112 101101111 - перенос в бит Carry
+ 1 - дополнительный код

01110000 - результат.

Как видно при вычитании было переполнение регистра, поэтому в регистре Status бит С=1. Был также перенос из 3 разряда единицы в 4-й разряд, т.е. из младшего в старший полубайт, поэтому бит DC=1.

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

Логическая функция ‘ИЛИ’ (‘OR’) может применяться для включения оборудования любой из двух кнопок, расположенными в разных местах.

Логическая функция ‘И’ (‘AND’) применяется в том случае, если оборудование должно включаться, при срабатывании (включении) двух контактов одновременно. Например, освещение в помещении автоматически включается при низкой освещенности и наличия в нем людей.

Логическая функция ‘Исключительно ИЛИ’ (‘XOR’) применяется, например, для управления освещением длинного тоннеля. С любого конца тоннеля можно включить или выключить освещение.

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


Таблица 1.1 –Логические функции Y=f(X1,X2)

Инструкция Таблица истинности Условное обозначение Интерпретация на электрической схеме
Х1 Х2 Y
IORWF Функция OR (ИЛИ)         Х1 Y Х2 Х1   Х2 При замыкании любого контакта в цепи будет ток
ANDWF ФункцияAND (И)         Х1 Y Х2 X1 X2 Ток в цепи будет только при замыкании обоих контактов
XORWF Функция XOR (Исключи- тельно ИЛИ)         Х1 Y Х2 X1 X2   X2 X1 Ток в цепи будет только тогда, когда переключатели X1 и X2 будут в разном положении

Программа 1.

include <p16F877.inc>; в этом файле записаны символьные имена РСН.

R1 EQU h'21'; R1 - символьное имя регистра по адресу h’21’.

R2 EQU h'22'; R2 - символьное имя регистра по адресу h’22’.

R3 EQU h'23'; R3 - имя регистра по адресу h’23’.

REZ EQU h'24'; REZ - имя регистра для записи результатов.

Инструкции для настройки МК.

ORG h'00'; следующая инструкция NOP будет записана по адресу h’00’.

NOP; пишется для настройки отладчика.

NOP

NOP

ORG h'05'; следующая инструкция CLRF запишется по адресу h’05’.

CLRF STATUS; очищаем регистр от мусора, выбираем первый банк.

BSF STATUS, 5; переходим в первый банк.

CLRF TRISC; настроить биты PORTC на выход.

BCF STATUS, 5; возвращаемся в нулевой банк.

Рабочая часть программы.

CLRF REZ; записать в регистр REZ нули.

CLRF R2; очистить регистр R2.

MOVLW D'240'; запись константы в аккумулятор W.

MOVWF R1; запись содержимого W в регистр R1.

SUBWF R2, W; вычитание W=R2-W=R2-R1=0-240.

MOVLW D'130'; запись константы в аккумулятор W.

MOVWF R2; запись содержимого W в регистр R2.

MOVLW D'5'; запись константы в W.

MOVWF R3; запись содержимого W в регистр R3.

MOVWF REZ; загрузить содержимое W в регистр REZ.

MOVF R1, W; запись константы из R1 в регистр W.

SUBWF R2, W; вычитание W=R2-W=R2- R1.

MOVWF REZ; переслать содержимое W в регистр REZ.

MOVF R2, W; запись константы из R2 в регистр W.

ADDWF R1, W; W=R2+W=R1+R2.

MOVWF REZ

MOVF R2, W; копируем содержимое R2 в W.

SUBWF R1, W; вычитание W=R1-W=R1-R2. Результат оставляем в W.

MOVWF REZ; переслать содержимое W в регистр REZ

MOVF R2, W; запись константы в регистр W из R2.

ANDWF R1, W; операция W=R1 AND W(R2), результат в W.

MOVWF REZ

END; конец программы.

Самостоятельно продолжите программу командами для выполнения операций R2-R2, R2+R3, R1 OR R2, R1 XOR R2.

Т а б л и ц а 1.2 – Варианты задания

Вариант Числа R1, R2, R3 Вариант Числа R1, R2, R3
  81h, 12h, 1h   86h, 67h, 6h
  82h, 23h, 2h   87h, 68h, 7h
  83h, 34h, 3h   88h, 69h, 8h
  84h, 45h, 4h   89h, 6Ah, 9h
  85h, 56h, 5h   8Ah, 6Bh, Ah

Т а б л и ц а 1.3 - Пример записи результатов работы команд

Числа на входе Действие Результат в REZ Значение в Status
Форма B или D Форма B или D Форма B Форма D Форма B
R1=D’240’ R2=D’0’ R2-R1 - D’16’  
R1=D’240’ R2=D’130’ R1+R2 - D’114’  
R1=D’240’ R2=D’130’ R1-R2 - D’110’  
R1=D’240’ R2=D’130’ R2-R1 - D’146’  
R2=D’130’ R2=D’130’ R2-R2 - D’0’  
R2=D’130’ R3=D’5’ R2+R3 - D’135’  
R1=b’11110000’ R2=b’10000010’ R1 AND R2   -  
R1=b’11110000’ R2=b’10000010’ R1 OR R2   -  
R1=b’11110000’ R2=b’10000010’ R1 XOR R2   -  

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

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

1. Как определить с каким банком работает программа?

2. Что выполняет инструкция ADDWF R1, F?

3. Что выполнят инструкция SUBWF R2, F?

4. Что выполняет инструкция ANDWF R1, F?

5. Что выполняет инструкция IORWF R1, W?

6. Что выполняет инструкция XORWF R2, W?

7. Приведите инструкции установки и сброса бита.

8. Назначение директивы ORG h’05’.

9. Приведите таблицы истинности логических операций.

10. Преимущества МК по сравнению с релейной аппаратурой.

11. Нарисуйте локальную схему управления с МК.

12. На какие части делится программа?

13. В каком банке находятся регистры R1, R2 и REZ.

14. Какой результат мы увидим при сложении 230+60 в МК?

15. Какой результат мы увидим при вычитании 130-135 в МК?

16. Назначение РСН TRISC и его местонахождение.

 



Поделиться:


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

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