ЗНАЕТЕ ЛИ ВЫ?

Системы счислений. Карта памяти микроконтроллера



Введение

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

Микроконтроллеры широкого назначения выпускаются многочисленными зарубежными фирмами: Motorola, NEC Corporation, Siemens, Microchip и другими.

Применение методов и технических средств обработки информа­ции цифровой вычислительной техникой в релейной защите и авто­матике (РЗА) привело к созданию интегрированных комплексов, выполняющих все функции традиционных устройств РЗА и облада­ющих широкими информационными свойствами и сервисными возможностями, существенно повышающими надежность и эффек­тивность функционирования технических средств автоматического управления электроэнергетическими установками [1].

Для обучения студентов цифровой технике и программированию микроконтроллеров на кафедре имеется учебный микропроцессорный комплект (УМК-7). Помимо обучения языку ассемблер на примере контроллера PIC16F877А, студенты знакомятся с внутренней и внешней структурой современных микроконтроллеров, применяемых в оборудовании.

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

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

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

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

Системы счислений. Карта памяти микроконтроллера

 

Цель работы: приобрести начальные знания в области применения микроконтроллеров и основ цифровой техники.

 

Задания

Задание 1.Сложите числа в двоичной системе. Представьте слагаемые и результаты вычислений в шестнадцатеричной, десятичной и в двоично-десятичной системах счислений.

 

Т а б л и ц а 1.1 – Варианты к заданию 1

Вариант
Число А
Число В

 

Вариант
Число А
Число В

 

Задание 2. Определите имена регистров и банки по двоичному адресу.

Т а б л и ц а 1.2 - Варианты к заданию 2

Вариант
Регистр А
Регистр В
Регистр С

 

Вариант
Регистр А
Регистр В
Регистр С

 

Задание 3. По имени регистра и банку определите его адрес.

Т а б л и ц а 1.3 - Варианты к заданию 3

Вариант
Банк
Имя PCL FSR INTCON STATUS TRISB INTCON

 

Вариант
Банк
Имя PCL TMR1 INTCON STATUS TRISD TRISB

 

Вариант
Банк
Имя PCL PIR1 PIE2 PIR2 PIE1 FSR

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

1. Сколько будет 5F+3?

2. Что такое основание системы счисления?

3. Какие цифры имеются в двоичной системе?

4. Какие цифры имеются в шестнадцатеричной системе?

5. Сколько будет 4F+1?

6. Расскажите о преимуществах микроконтроллеров.

7. Какие фирмы выпускают изделия с микроконтроллерами?

8. Какие функции выполняют микроконтроллеры?

9. Сколько банков в микроконтроллере PIC?

10. Как записываются адреса регистров?

11. Как можно обратиться в программе к регистру?

12. Что такое адрес регистра?

13. Какие адреса у регистров общего назначения?

14. В каких банках находятся регистры PORTC и TRISC?

Исходные данные

 

Задача.Создать программу для ручного управления окрасочной камерой. При подаче питания 220 вольт включается сигнальная лампа на пульте оператора L2 о включении окрасочной камеры. Окрашиваемая деталь поступает в камеру по конвейеру, после чего включается звуковая предупреждающая сигнализация S1. Затем включается двигатель краскораспылителя D1, вентилятора D2, сигнал на пульт оператора о работе камеры L1. После окрашивания двигатель краскораспылителя D1 выключается, после проветривания выключается двигатель вентилятора D2 и лампочка L1. После поступления новой детали процесс окраски повторяется. Указанное оборудование подключается к битам PORTC (см. рисунок 2.1). На УМК-7 технологическое оборудование имитируется светодиодами.

 

Рисунок 2.1 – Схема подключения оборудования

 

Управление технологическим оборудованием выполняется программой 2.1. После точки с запятой в программе напечатаны комментарии, которые пропускаются компилятором.

Программа 2.1:

Include<p16F877.inc>; подключение библиотеки символьных имен РСН.

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

nop; инструкция, для работы отладчика будет записана по адресу h’00’.

nop; инструкция будет записана по адресу h’01’ памяти МК.

nop; инструкция будет записана по адресу h’02’ памяти МК.

org h’05’; дальнейший код будет записан начиная с адреса h’05’.

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

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

BSF STATUS, 5; записав в 5-й разряд ‘1’, выбираем первый банк.

CLRF TRISC; обнуляем TRISC и настраиваем PORTC на вывод.

BCF STATUS, 5; возвращаемся в нулевой банк, в нем находятся нужные регистры.

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

MOVLW B'10000000'; пересылаем в регистр W число В’10000000’.

MOVWF PORTC; включаем сигнализацию L2 на пульт оператора.

Sled_det BSF PORTC, 0; включаем предупреждающую сигнализацию S1.

MOVLW B'10001110'; пересылаем в регистр W число В’10001110’.

MOVWF PORTC; включаем двигатели D1 и D2, сигнализацию L1.

BCF PORTC, 2; выключаем двигатель D1 (D2, L1 и L2 работают).

MOVLW B'10000000'

MOVWF PORTC; выключаем вентилятор D2, сигнализацию L1.

GOTO Sled_det; переход на метку Sled_det для повторения.

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

На основе образца подготовьте программу для своего варианта.

 

Т а б л и ц а 2.1 – Варианты заданий

Вариант Биты подключения S1, D1, D2, L1, L2. Вариант Биты подключения S1, D1, D2, L1, L2.
1, 2, 3, 4, 5 6, 7, 0, 1, 2
2, 3, 4, 5, 6 7, 0, 1, 2, 3
3, 4, 5, 6, 7 0 ,1 ,2 ,3, 4
4, 5, 6, 7, 0 1, 3, 5, 7, 0
5, 6, 7, 0, 1 2, 4, 6, 0, 1

Выполнение проекта на УМК-7

1. Запустите MPLAB. Если появится какой-либо открытый проект, закройте его командами Project – Close Project в основном меню MPLAB.

Откройте новый лист в менюFile\New, не создавая проекта, и напечатайте в окне редактора программу 2.1. При наборе текста программы применяйте регистр букв такой же, как в образце. С первой позиции печатаются метки и символьные имена регистров, с шестой позиции печатаются инструкции.

Программа 2.1:

Include<p16F877A.inc>;

ORG h'00';

NOP;

NOP;

NOP;

ORG h'05';

CLRF STATUS;

BSF STATUS ,5;

CLRF TRISC;

BCF STATUS,5;

MOVLW B'1000000';(число вводим согласно варианту) *

MOVWF PORTC;

Sled_det

BSF PORTC,0; (разряд согласно варианту)

MOVLW B'10001110'; (число вводим согласно варианту)

MOVWF PORTC;

BCF PORTC,2; (разряд согласно варианту)

MOVLW B'10000000'; (число вводим согласно варианту)=*

MOVWF PORTC;

GOTO Sled_det;

end

 

2.Сохраняем файл с помощью File\ Save as (тип файла –Assembly Source Files (*.asm)) в папке (по пути-Мой компьютер\System C:\Program Files\Microchip\Docs\название группы лат.буквами.\номер подгруппы или название лат.буквами).

3.Создаем проект командой Project Wizzard

 

 

В появившемся диалоговом окне нажать кнопку «Далее».

В следующем окне указать тип микроконтроллера PIC16F877A и нажать кнопку «Далее».

 

 

В следующем окне нажать кнопку «Далее», не изменяя НИКАКИХ параметров.

 

 

Заполните поле Project name(ввести имя проекта) и в поле Project Directory указать путь проекта(ранее созданная Вами папка по пути Мой компьютер\System C:\Program Files\Microchip\Docs\название группы лат.буквами.\номер подгруппы или название лат.буквами).

 

 

Нажимаем кнопку «Далее».

В следующем окне с помощью кнопки «Add», добавить с левого окна в правое:

- файл P16F877A.INC Мой компьютер\System C:\Program Files\Microchip\Docs\Test_1\ P16F877A.INC;

- файл с набранной Вами программой 2.1 по пути Мой компьютер\System C:\Program Files\Microchip\Docs\название группы лат.буквами.\номер подгруппы или название лат.буквами\ student name. asm.

Оба файла выделить значком «флажок».

 

Нажимаем кнопку «Далее» и в следующем окне кнопку «Готово».

 

Результат создания проекта выглядит таким образом:

 

 

4.Выполним соответствующие настройки для запуска Вашего проекта:

 

-Configurue->Select Device->PIC16F877A->OK, то есть удостоверяемся в правильности выбранного устройства(микроконтроллера).

 

 

-Configurue->Сonfiguration Bits.В диалоговом окне выставляем параметры согласно рисунку. После ввода всех параметров закрываем данное окно.

 

 

 

-Debugger->Select Tool->MPLAB ICD2

 

-Debugger->Settings-.Communication->COM1->OK

 

 

 

5.Создаем окно наблюдения командойView->Watch

 

 

С помощью кнопки «Add SFR» добавляем регистры и параметры, за которыми будем вести наблюдение при запуске программы (PORTC,WREG,STATUS,TRISC).

 

 

Запуск проекта

 

Project->Make

 

 

-Debugger->Program

 

-Debugger->Run(автоматический запуск проекта)или Step Into(далее нажимать F7-шаговое наблюдение за выполнением проекта).

Запустите на выполнение программу в пошаговом режиме командами Debug – Run – Stepили кнопкойF7. Следите за результатами выполнения инструкций по окну наблюдения. Если пошаговое выполнение программы застряло на какой - либо строке и не продолжается дальше, выполните команду Debug – Clear all points, чтобы убрать точки останова.

Остановите выполнение программы командами Run - Reset. Команда Haltпросто приостанавливает выполнение программы и после команд Debug – Run - Stepвыполнение программы продолжится с места останова.

При необходимости исправьте программу.

Внимание!При любом изменении текста программы необходимо сначала остановить программу командой Reset и повторить описанные выше действия по изменению проекта, начиная с команды Make Project.

Включите в отчет по лабораторной работе программу, схему подключений и ответы на контрольные вопросы.

Рекомендуется скопировать текст программы в Блокнот и разместить в папкеМои документы.

Повторно запустите программу в автоматическом режиме кнопкой F9.

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

 

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

 

1. Нарисуйте схему подключения оборудования к PORTC.

2. Что выполняет инструкция CLRF STATUS?

3. Что выполняет инструкция MOVLW B’00001111’?

4. Что выполняет инструкция MOVWF PORTC?

5. С какой целью выполняется инструкцияBSF STATUS, 5?

6. С какой целью выполняется инструкция BCF STATUS, 5?

7. Что выполняет инструкция GOTO METKA?

8. Какие внешние устройства расположены на панели стенда?

9. Почему при автоматическом выполнении рабочей программы в режиме RUN светятся все светодиоды одновременно?

10. Что такое адрес регистра и содержимое регистра.

11. Назначение символа «;» в тексте программы?

12. В каких банках находятся регистры PORTC и TRISC?

13. Назначение регистра TRISC.

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

15. Какое напряжение питания МК?

16. Какое напряжение в PORTC?

 

Сложение, вычитание. Логика

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

Теоретические сведения

 

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

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

 

Таблица 3.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 будут в разном положении

 

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

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

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

 

Исходные данные и выполнение программы

 

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

Изучите программу 3.1, которая выполняет различные действия с двумя константами и выводит результаты работы в регистр REZ. Программа легче читается, если в инструкциях вместо адреса регистра писать его символьное имя. В лабораторной работе №2 мы уже писали в инструкциях вместо адресов РСН их имена: Portc, Trisc, Status, W. Пользователь также может присваивать символьные имена РОН, например R1 EQU h’21’. Указатель EQU от equal (англ.) – одинаковый, равносильный.

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

Программа 3.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; переходим в первый банк в нём регистр TRISC.

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

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

; Рабочая часть программы. Ввод данных

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

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

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

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

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

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

; Выполнение вычислений

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.

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

MOVWF REZ

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

SUBWF R2, W

MOVWF REZ

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

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

MOVWF REZ

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

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

Данные для варианта возьмите из таблицы 3.1.

 

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

Вариант Числа 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

 

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

Числа на входе Действие Результат в REZ Значение в Status Форма B
Форма B или D Форма B или D Форма D Форма B
R1=D’240’ R2=D’130’ R1-R2=240-130 D’110’ -
R1=D’240’ R2=D’130’ R1+R2=240+130 D’114’ -
R1=D’240’ R2=D’130’ R2-R1=130-240 D’146’ -
R2=D’130’ R3=D’5’ R2+R3=130+5 D’135’ -
R2=D’130’ R2=D’130’ R2-R2130-130 D’0’ -
R1=D’240’ R2=D’0’ R2-R1=0-240 D’16’ -
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 -

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

 

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

 

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. На какие части делится программа?

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

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

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

 

4 Операции преобразования информации

Цель работы: изучение операций преобразования информации с помощью инструкций COMF, SWAPF, RRF, RLF.

 

Теоретические сведения

 

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

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

При сдвиге по инструкциям RRF и RLF во всех случаях бит, сдвигаемый из регистра, записывается в бит CARRY регистра STATUS, а бит, который был в CARRY, записывается в другой конец регистра.

Инструкции сдвига (RRF, RLF) используются при выполнении операций умножения и целочисленного деления на два, при условии, что в бите Carry записан ноль. Они могут также применяться при управлении протяженным оборудованием. Например, при окрашивании, охлаждении или нагреве деталей во время их движения на конвейере [4].

 

4.2 Исходные данные и задание

 

Во фрагменте программы 4.1 показано применение операций инверсии, очистки бита, обмена полубайтами и сдвига вправо. Предполагается, что регистр PORTC настроен на вывод. Начало программы напишите самостоятельно по аналогии с программой 3.1.

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

NACH; метка повтора цикла программы.

MOVLW B'11110011' ; это число D’243’.

MOVWF PORTC; записываем W в PORTC.

COMF PORTC, F; инвертируем PORTC.

MOVWF PORTC; восстанавливаем PORTC из W.

BCF PORTC, 7; очищаем седьмой бит.

MOVWF PORTC; восстанавливаем PORTC из W.

SWAPF PORTC, F; обмен полубайтами регистра PORTC.

MOVWF PORTC; восстанавливаем PORTC из W.

BCF STATUS, 0; запись нуля в бит С регистра status.

RRF PORTC, F; делим на 2. Результат записываем в PORTC.

BCF STATUS, 0

RRF PORTC, F; делим на 2 содержимое PORTC.

BCF STATUS, 0

RLF PORTC, F; умножаем на 2 содержимое PORTC.

BCF STATUS, 0

RLF PORTC, F; умножаем на 2 содержимое PORTC.

GOTO NACH

END

 

Оформите фрагмент 4.1 как программу и введите программу в микроконтроллер. Сравните полученные результаты с данными в таблице 4.1.

Создайте окно наблюдения для всех регистров программы в необходимом формате чисел.

 

Таблица 4.1- Результаты работы инструкций

Числа на входе Инструкция Числа на выходе PORTC
Форма b Форма h или D Форма b Форма h или D
- COMF -
- BCF (7-й бит) -
- BSF (3-й бит) -
H’F3’ SWAPF H’3F’
D’243’ D’121’ D’60’ D’120’ RRF RRF RLF RLF D’121’ D’60’ D’120’ D’240’

 

Запустите подготовленную по заданию таблицы 4.2 программу. Результаты работы всех операций с числами запишите в таблицу 4.1.

 

Т а б л и ц а 4.2 – Варианты заданий

Вариант Заданное входное число Номер очищаемого бита Номер устанавливаемого бита Вариант Заданное входное число Номер очищаемого бита Номер устанавливаемого бита
h ‘D1’ h ‘B6’
h ‘E2’ h ‘F7’
h ‘B3’ h ‘C8’
h ‘C4’ h ‘99’
h ‘D5’ h ‘АA’

 

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

 

1. Расскажите, какую реальную задачу решает ваша программа.

2. Какие адреса используются для РОН?

3. Приведите инструкцию установки бита. Когда она применяется?

4. Приведите инструкцию сброса бита. Когда она применяется?

5. Как происходит сдвиг вправо (влево).

6. Как регистр Statusучаствует ввыполнении операций сдвига?

7. Расскажите о применении операции сдвига.

8. Расскажите об операции «инверсия» и ее применении.

9. Расскажите об операции «обмен полубайтами» и ее применении.

10. Что должно быть записано в бите Carry для правильного выполнения умножения или деления.

11. Как настроить PORTC на выход?

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

13. Почему после деления 243 на 4 и умножения частного на 4 не было получено исходное число?

 

Теоретические сведения

 

Инструкции условных переходов BTFSC и BTFSS проверяют состояние заданного бита в любом регистре и в зависимости от результата, пропускают или не пропускают следующую инструкцию программы. Инструкция BTFSC пропускает следующую инструкцию, если заданный бит сброшен. Инструкция BTFSS пропускает следующую инструкцию, если заданный бит установлен. На основе этого создается передача управления в другое место программы и организация циклов, см. таблицу 5.1 [3,5].

 

Т а б л и ц а 5.1

Использование бита CARRY (C)
BTFSS STATUS, C GOTO METKA MOVWF R2 Если в бите Carry установлена единица, то пропускается следующая инструкция программы GOTO МЕТКА и сразу выполняется инструкция MOVWF R2
Если бит Carry сброшен, то выполняется следующая инструкция программы GOTO METKA
Использование бита ZERO (Z)
BTFSS STATUS, Z MOVF R2, W MOVWF PORTC Если в бите Z установлена единица, то пропускается следующая инструкция программы MOVF R2 и сразу выполняется инструкция MOVWF PORTC
Если битZ сброшен, то выполняется следующая инструкция программы MOVF R2, W и затемMOVWF PORTC

 

В реальных программах вместо указанных инструкций пишутся инструкции, соответствующих разработанному алгоритму.

В ассемблере отсутствуют инструкции сравнения чисел, поэтому, чтобы определить, какое из чисел больше (меньше), применяют такой алгоритм:

а) Выполняют вычитание чисел. При этом в зависимости от результата, устанавливаются флаги Cи Z регистра Status,см. таблицу 5.2.

б) Далее применяют инструкции условных переходов.

В таблице 5.2 показаны значения флагов регистра Status при вычитании по команде SUBWF UMENSH, W, т.е. W=UMENSH-W.

 

Т а б л и ц а 5.2 – Регистрация событий в регистре Status

Соотношения значений в W и РОН UMENSH Значения флагов регистра statusпосле выполнения вычитания
Флаг Z Флаг C
UMENSH-W>0 0 -Нулевого результата не было 1 - был перенос из 7 бита W в бит С (при сложении в дополнительном коде)
UMENSH-W<0 0 - Нулевого результата не было 0 - не было переноса из 7 разряда W в бит С (при сложении в дополнительном коде)
UMENSH-W=0 1 - был нулевой результат операции 1- был перенос из 7 разряда W в бит С (при сложении в дополнительном коде)
П р и м е ч а н и е – В регистр UMENSH помещается уменьшаемое число

 

Исходные данные

 

Технологический процесс должен выполняться при определенной требуемой температуре T_treb. Температура окружающей среды T_sredy измеряется аналоговым датчиком. Его показания поступают на АЦП микроконтроллера и преобразуются в двоичный код. Измеренная температура среды сравнивается с требуемой температурой, если она выше включают охлаждение, если ниже включают подогрев. Охлаждающая установка подключается к нулевому биту PORTC, нагревающая установка подключается к первому биту. Работа такой установки аналогична работе кондиционера «Зима-Лето».

Программа 5.1- управление нагревом и охлаждением.

Include<p16f877.inc>

T_sredy EQU h'40'; регистр для записи температуры окружающей среды.

T_treb EQU h'41'; регистр для записи требуемой температуры установки.

UMENSH EQU h'43'; рабочий регистр для хранения данных.

; Инструкции настройки микроконтроллера напишите самостоятельно.

MOVLW D'22'

MOVWF T_treb; требуемая температура.

MOVLW b'00011000'; первое значение T_sredy, данные после АЦП.

M1 MOVWF T_sredy; температура по показаниям датчика.

CLRF PORTC

MOVF T_treb, W; UMENSH= T_treb.

MOVWF UMENSH; чтобы не портить данные в регистре T_treb.

MOVF T_sredy, W; температуру среды записываем в W.

SUBWF UMENSH, F; UMENSH=T_Treb -T_Sredy.

MOVLW b'00000010'; предполагаем, что надо включить подогрев.

BTFSS STATUS, C; C = 1? Разность положительна?

MOVLW b'00000001'; только при С=0 включаем охлаждение.

MOVWF PORTC; пересылаем информацию на установку из W.

MOVLW b'00010100'; второе значение T_sredy.

GOTO M1

END

Запомните, что команда MOVLW не влияет на регистр Status.

 

Порядок выполнения работы

При написании программы используйте блок-схему на рисунке 5.3. Создайте окно наблюдения аналогичное рисункам 5.1 и 5.2.

На рисунках 5.1 и 5.2 показаны окна наблюдения, из которых видно как переключается нагрев и охлаждение при изменении окружающей температуры.

Рисунок 5.1 – Нагрев включился Рисунок 5.2 – Охлаждение включилось

 

 

Т а б л и ц а 5.3 - Варианты заданий

Вариант T_sredy 1 T_treb T_sredy 2 Бит подключения системы нагрева Бит подключения системы охлаждения
Примечание. Значения T_sredy 1 и T_sredy 2 заданы в двоичной системе, T_treb в десятичной.

 

 

Рисунок 5.3 – Блок-схема

 

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

 

1. Что происходит с регистром Status при логических и математических операциях?

2. Расскажите, какую реальную задачу решает ваша программа.

3. Поясните инструкцию условного перехода BTFSC STATUS, Z.

4. Поясните инструкцию условного перехода BTFSS STATUS, Z.

5. Какой операцией можно определить равенство чисел?

6. В каких случаях флаг Z равен единице при вычитании?

7. В каких случаях флаг С равен единице при вычитании?

8. Когда флаги Z и С регистра Status одновременно равны нулю?

9. Как определить более мощную установку из двух потребителей?

10. Расскажите назначение АЦП.

11. Расскажите об аналоговых и цифровых сигналах.

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

13. В каких банках находятся, регистры применяемые в программе?

14. Как переключается нагрев и охлаждение установки.

Маскирование

 

Цель работы: изучение способов маскирования и практическая форма их применения.

 

Теоретические сведения

 

Суммирование применяется для различных целей: подсчета количества поступивших изделий, определение средней температуры за расчетный период времени и других.

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

Изучите способы организации программ с косвенной адресацией на примере приведенных ниже фрагментов. Регистр FSR, являющимся просто указателем, хранит адрес ячейки, к которой происходит обращение через имя формально существующего регистра INDF.

Исходные данные

Задача. В массив записано потребление энергии по месяцам. Требуется определить суммарный расход энергии за указанный период и средний расход энергии в месяц. Блок-схема алгоритма представлена на рисунке 7.1.

 

Рисунок 7.1 – Блок-схема

 

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

 

Include<p16f877.inc>
EL_MAS_0 EQU h'40'; нулевой элемент массива.

EL_MAS_1 EQU h'41'

EL_MAS_2 EQU h'42'

EL_MAS_3 EQU h'43' ; последний элемент массива.

IND_EL_MAS EQU h'50'; индекс прибавляемого элемента массива.

SHAG EQU h'22'; шаг изменения данных.

KOL_EL EQU h'44'; регистр хранения количества элементов массива.

SUM EQU h'51'; регистр хранения суммы.

SREDNEE EQU h'52'; регистр для хранения среднего расхода энергии.

; Стандартные операции настройки МК опущены.

; Заполнение массива

MOVLW D'2'

MOVWF SHAG

MOVLW D'11'

MOVWF EL_MAS_0

ADDWF SHAG, W; W= EL_MAS_0+SHAG

MOVWF EL_MAS_1

ADDWF SHAG, W; W= EL_MAS_1+SHAG

MOVWF EL_MAS_2

ADDWF SHAG, W; W= EL_MAS_2+SHAG

MOVWF EL_MAS_3

CLRF SUM

CLRF IND_EL_MAS

MOVLW D'4'; количество элементов массива.

MOVWF KOL_EL

MOVLW EL_MAS_0; запись в аккумулятор адреса регистра EL_MAS_0.

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

NEXT_ELEM

MOVF SUM, W

ADDWF INDF, W; сложить W и текущий элемент массива.

MOVWF SUM; запоминаем полученную сумму.

; Подготовка к следующему циклу

INCF FSR, F; переход к адресу следующего регистра массива.

INCF IND_EL_MAS, F; фиксируем индекс следующего элемента.

MOVF KOL_EL, W

XORWF IND_EL_MAS, W; проверяем индекс элемента равен 4?

BTFSS STATUS, Z; проверка – все элементы суммировали (Z=1)?

GOTO NEXT_ELEM; только если Z =0, повторяем цикл.

; Подготовка вычисления среднего значения

MOVF SUM, W; если Z=1, все элементы сложили, запоминаем сумму.

MOVWF SREDNEE; копируем SUM в SREDNEE.

END

 

Выполните самостоятельно деление на 4 регистра SREDNEE с помощью его сдвигов вправо для определения среднего значения.

Количество повторений в цикле определяется следующим образом. Сначала записывается количество элементов в регистр Kol_El. Затем при каждом повторе цикла, увеличиваем индекс элемента в регистре и проверяем, получен ли ноль командой XORWF IND_EL_MAS, W, (здесь W= Kol_El). Поскольку регистр с индексом 4 будет лишним, выходим из цикла. Блок-схема программы приведена на рисунке 7.1. В ней предполагается, что в массив занесены данные.

 

7.3 Выполнение задания

 

Используя приведенный фрагмент, подготовьте программу по варианту из таблицы 7.2. Результаты занесите в таблицу 7.1.

 





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

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