Некоммерческое акционерное общество

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра инженерной кибернетики

 

 

 

ЦИФРОВАЯ ТЕХНИКА  И  МИКРОКОНТРОЛЛЕРЫ

Методические указания

к выполнению лабораторных работ
для студентов всех форм обучения
специальности 5В071800 - Электроэнергетика

 

 

 

Алматы 2012

СОСТАВИТЕЛИ: А. А. Копесбаева, В. М. Тарасов. Цифровая техника и микроконтроллеры. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальности 5В071800 - Электроэнергетика - Алматы: АУЭС, 2012. – 54 с. 

 

Представлены методические указания к выполнению лабораторных работ по дисциплине «Цифровая техника и микроконтроллеры». В них основное внимание уделено вопросу практического использования цифровой техники в производстве. Практические примеры базируются на реальных задачах автоматизации технологических процессов. Во время лабораторных работ студенты осваивают применение микроконтроллеров и технологию разработки для них программ на примере микроконтроллера PIC16F877.

 

Иллюстраций – 28, таблиц – 24, библиографий – 9 названий.

 

Рецензент: канд. техн. наук, доцент Джумагалиев И.А. ст. преп. Арыстанов Н.Н.

 

Печатается по плану издания некоммерческого акционерного общества «Алматинский университет энергетики и связи» на 2012 год.

 

© НАО «Алматинский университет энергетики и связи», 2012 г.

 

Введение

 

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

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

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

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

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

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

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

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

 

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

 

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

 

1.1 Краткие теоретические сведения

 

Информация в микроконтроллере (МК) хранится в регистрах (file), состоящих из 8 разрядов (бит). Они делятся на регистры общего назначения (РОН), которые может использовать программист для хранения переменных, и регистры специального назначения (РСН), выполняющие определенные функции управления работой микроконтроллера.

У микроконтроллеров имеются выводы для подключения внешних устройств. Информация с этих выводов сохраняется в специализированной области памяти. Выводы объединены в функциональные группы-регистры РСН: PORTA, PORTB, PORTC, PORTD. В результате выполнения программы на выводы порта либо будет подаваться напряжение, либо нет. Содержание регистра порта, а также нумерация разрядов порта показана на рисунке 1.1. Наличие напряжения будем обозначать цифрой 1, отсутствие - цифрой 0, хотя часто обозначают и наоборот.

      

  

Рисунок 1.1- Схема регистра

 

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

в микроконтроллер. С их помощью можно подключить, например, вентилятор, конвейер, насос подачи реагента и т.д. Если на соответствующем выводе порта будет напряжение (обозначаемое цифрой 1), то устройство будет включено. Представленные на рисунке 1.1 набор нулей и единиц формально считают числом в двоичной системе счисления. Положение цифры в числе называют разрядом. Это же число в 16-й системе будет A3h, в десятичной системе 163.

В микроконтроллере данные и промежуточные результаты представлены в двоичной системе счисления. Все регистры памяти в микроконтроллере нумеруются также в двоичной системе. Номер регистра называют его адресом. Программисту неудобно работать с двоичными числами, поэтому их часто представляют в более компактной шестнадцатеричной системе счисления. Системы счислений, применяющиеся в цифровой технике, представлены в приложении А. Там же приведен алгоритм перевода чисел из двоичной системы в шестнадцатеричную и наоборот [2].

В десятичной системе прибавление к цифре 9 единицы  дает в результате число 10, то есть 9+1=10. Аналогичный результат и в шестнадцатеричной системе F+1=10 или 2F+1=30. То есть в младший разряд записываем цифру 0, в старший добавляем 1. В двоичной системе 1+1=10.

Все регистры микроконтроллера объединены в 4 группы, называемыми банками (list), показанными в приложении Б. Банки имеют нумерацию в двоичной системе: 00 – банк ‘0’, 01 – банк ‘1’, 10 – банк ‘2’, 11 – банк ‘3’.

Программист для хранения данных может использовать регистры общего назначения (РОН). К регистру можно обратиться по адресу или по имени [2].

 

 

1.2 Задания

 

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

 

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

Вариант

1

2

3

4

5

6

Число А

00110101

01101101

00111001

01100101

01001001

01110100

Число В

00110001

01101001

00101001

00100101

01000001

00111101

 

Вариант

7

8

9

10

11

12

Число А

00110001

01101001

00101001

00100101

01000001

01110111

Число В

00110101

01101101

00111001

01100101

01001001

00110111

 

Вариант

13

14

15

16

17

18

Число А

00110101

00111001

01101001

00110101

01010001

01011101

Число В

00110001

01101101

00111001

01100101

01001001

00110010

 

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

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

Вариант

1

2

3

4

5

6

Регистр А

00000010

00001001

00001010

10000010

10000101

10011111

Регистр В

00101000

00110101

00111000

01010101

01100001

11101110

 

Вариант

7

8

9

10

11

12

Регистр А

10010010

10010011

10011000

00011110

00011110

10011001

Регистр В

10100010

10100010

10110101

11100101

11101110

00011111

 

Вариант

13

14

15

16

17

18

Регистр А

10010010

10010011

10011000

00011110

00011110

10001110

Регистр В

10100010

10100010

10110101

11100101

11101110

01111111

 

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

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

Вариант

1

2

3

4

5

6

Банк

0

1

1

1

1

2

Имя

PCL

FSR

INTCON

STATUS

TRISB

INTCON

 

Вариант

7

8

9

10

11

12

Банк

1

0

1

0

1

1

Имя

PCL

TMR1

INTCON

STATUS

TRISD

TRISB

 

Вариант

13

14

15

16

17

18

Банк

1

0

1

0

1

1

Имя

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?

2 Изучение среды MPLAB. Управление оборудованием

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

 

2.1 Краткие теоретические сведения и задания для внеаудиторной подготовки

 

Если в регистре TRISC записаны все нули (регистр очищен), то PORTC работает только на вывод информации из ЦПУ. В этом случае подаваемый на внутренние клеммы PORTC сигнал ‘1’ с ЦПУ, поступит на выходные клеммы и присоединенное оборудование включится (имитирующие его светодиоды начнут светиться).

В любой регистр нельзя непосредственно записать какое - либо число (константу). Сначала константу по инструкции MOVLW записывают в регистр-аккумулятор W, затем по инструкции MOVWF пересылают ее в требуемый регистр.

При включении или сбросе МК выполнение программы начинается с адреса h’00’ памяти программ.

При выборе реального подключаемого оборудования необходимо помнить, что выходное напряжение МК от 3.0 V до 5.5 V постоянного тока.

Задания для внеаудиторной подготовки

-     познакомьтесь с описанием УМК-7 и  MPLAB по приложению В;

-     познакомьтесь  по приложению Г с битами RP1 и RP0 (5 и 6 разряды) регистра status;

-     познакомьтесь по приложению Д с инструкциями, примененными в приведенной ниже программе: CLRF, BSF, BCF, MOVLW, MOVWF, GOTO;

-     определите в каких банках находятся регистры PORTC и TRISC по приложению Б;

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

 

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

 

Задача. Создать программу для ручного управления окрасочной камерой. При подаче питания 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

1, 2, 3, 4, 5

6

6, 7, 0, 1, 2

2

2, 3, 4, 5, 6

7

7, 0, 1, 2, 3

3

3, 4, 5, 6, 7

8

0 ,1 ,2 ,3, 4

4

4, 5, 6, 7, 0

9

1, 3, 5, 7, 0

5

5, 6, 7, 0, 1

10

2, 4, 6, 0, 1

 

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

 

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

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

 

Рисунок 2.2- Окно создания проекта

 

Сохраните программу с именем, имеющим для вас смысл, с расширением .asm (в примере tut877.asm)  в выбранной папке. Далее чтобы заставить работать вашу программу, нужно её скомпилировать. То есть перевести текст программы в инструкции микроконтроллера в двоичной форме. Для этого необходимо:

- создать новый проект командами ProjectNew Project;

- ввести имя проекта, такое же, как у программы и нажать кнопку OK.

Выполняемые далее действия  приводятся для проекта с именем tut877.pjt.

 

 
Должно открыться диалоговое окно редактирования проекта Edit Project, показанное на рисунке 2.3.

Обратите внимание на строку Development Mode. Для нас там должна быть строка “MPLAB-ICD Debugger”. Если необходимо изменить этот параметр, нажмите кнопку Change. Откроется диалоговое окно Development Mode, показанное на рисунке 2.4.

Выберите строку MPLAB-ICD Debugger. Далее нажав кнопки Apply и OK вернётесь в окно Edit Project.

Выделите строку tut877 [.hex] в области Project Files и нажмите кнопку Add Node. В диалоговом окне Add Node выберите файл tut877.asm и нажмите кнопку OK, для возврата в окно Edit Project.

Ассемблер MPASM создает файл с расширением .hex, скомпилированный из asm-файла с тем же именем, что и исходный asm-файл. Нажав OK, закройте окно Edit Project. Теперь командами Project - Make Project выполните компиляцию приложения.

 

Рисунок 2.4 – Окно Development Mode

Окно Build Results, см. рисунок 2.5, покажет результат компиляции и отметит ошибки, если они есть. Фраза “Build completed successfully” указывает, что компиляция выполнена успешно. В случае неудачи щелкните 2 раза в окне Build Results на строку, в которой описана ошибка, и вы вернетесь в текст программы на строку, содержащую ошибку (error).

 

Рисунок 2.5 – Результаты сборки проекта

 

Исправьте текст программы. Устраните таким образом все ошибки. Повторно выполните команды Project - Make Project для компиляции и Project - Save Project для сохранения проекта.

Далее перешлите программу в МК, нажав в окне MPLAB-ICD кнопку Program (см. рисунок 2.6). Если это окно отсутствует, закройте и снова откройте созданный вами проект. Если эти действия не помогут, переустановите значения Development Mode командами Options - Development ModeMPLAB ICD Debugger.

Программирование кристалла может занять пару минут, в течение которых в поле Status показывается процесс выполнения. Завершение пересылки в поле Status отображается сообщением “Waiting for user command” - “Ожидание команды пользователя”.

Создайте окно наблюдения командами WindowWatch WindowNew Watch Window. Напечатайте в поле редактирования символы PO и из предложенного программой списка выберите строку PORTC. Нажмите кнопку Properties и выберите двоичный формат вывода чисел. Далее нажмите кнопку Add. В результате будет создано новое окно наблюдения с именем Watch1. Теперь напечатайте в поле редактирования W и из предложенного списка выберите W, нажмите на кнопку Add. Повторите это для регистров TRISC, Status затем закройте окно кнопкой Close. Сохраните окно наблюдения с тем же именем как у программы.

 

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

Остановите выполнение программы командами Run - Reset. Команда Halt просто приостанавливает выполнение программы и после команд DebugRun - 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?

 

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

 

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

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

 

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

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

 

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

 

Инструкция

Таблица истинности

Условное обозначение

 

Интерпретация на электрической схеме

Х1

Х2

Y


IORWF
Функция OR (ИЛИ)

 

0

0

1

1

0

1

0

1

0

1

1

1

 

Х1

                  Y

Х2

              Х1

 

              Х2

 

При замыкании любого контакта в цепи будет ток


ANDWF Функция AND (И)

0

0

1

1

0

1

0

1

0

0

0

1

 

Х1

                  Y

Х2

               X1          X2

 

 

 

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


XORWF Функция XOR  (Исключи-
тельно ИЛИ)

0

0

1

1

0

1

0

1

0

1

1

0

 

 

Х1

                   Y

Х2

Ток в цепи будет только тогда, когда переключатели X1 и X2 будут в разном положении

 

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

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

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

 

3.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

1

81h, 12h, 1h

6

86h, 67h, 6h

2

82h, 23h, 2h

7

87h, 68h, 7h

3

83h, 34h, 3h

8

88h, 69h, 8h

4

84h, 45h, 4h

9

89h, 6Ah, 9h

5

85h, 56h, 5h

10

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’

-

00011001

R1=D’240’

R2=D’130’

R1+R2=240+130

D’114’

-

00011001

R1=D’240’

R2=D’130’

R2-R1=130-240

D’146’

-

00011010

R2=D’130’

R3=D’5’

R2+R3=130+5

D’135’

-

00011000

R2=D’130’

R2=D’130’

R2-R2130-130

D’0’

-

00011111

R1=D’240’

R2=D’0’

R2-R1=0-240

D’16’

-

00011010

R1=b’11110000’

R2=b10000010

R1 AND R2

-

10000000

00011011

R1=b’11110000’

R2=b10000010

R1 OR R2

-

11110010

00011011

R1=b’11110000’

R2=b10000010

R1 XOR R2

-

01110010

00011011

Создайте окно наблюдения для всех применяемых в программе регистров в необходимом формате чисел. Результаты работы всех операций с числами запишите в таблицу 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.

 

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

 

Побитная операция инверсии 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

11110011

-

COMF

00001100

-

11110011

-

BCF (7-й бит)

01110011

-

11110011

-

BSF  (3-й бит)

11111011

-

11110011

H’F3’

SWAPF

00111111

H’3F’

11110011

01111001

00111100

01111000

D’243

D’121

D’60’

D’120’

RRF

RRF

RLF

RLF

01111001

00111100

01111000

11110000

D’121

D’60’

D’120’

D’240’

 

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

 

 

 

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

Вариант

Заданное входное число

Номер очищаемого бита

Номер устанавливаемого бита

Вариант

Заданное входное число

Номер очищаемого бита

Номер устанавливаемого бита

1

h ‘D1

1

0

6

h ‘B6

6

5

2

h ‘E2

2

1

7

h ‘F7

7

6

3

h ‘B3

3

2

8

h ‘C8

0

7

4

h ‘C4

4

3

9

h ‘99

1

0

5

h ‘D5

5

4

10

h ‘АA’

2

1

 

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

         

5 Анализ информации посредством регистра состояния

 

Цель работы: использование флагов регистра Status для анализа информации и применение результата для ветвления алгоритма.  Изучение инструкций условных переходов BTFSC и BTFSS, применение их для ветвления алгоритма.

 

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

 

Инструкции условных переходов 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 помещается уменьшаемое число

 

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

 

Технологический процесс должен выполняться при определенной требуемой температуре 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.3. Создайте окно наблюдения аналогичное рисункам 5.1 и 5.2.

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

Рисунок 5.1 – Нагрев включился

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

 

 

 

 

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

Вариант

T_sredy 1

T_treb

T_sredy 2

Бит подключения системы нагрева

Бит подключения системы охлаждения

1

00001010

11

00001101

3

1

2

00010101

22

00011001

4

2

3

00011110

33

00100011

5

3

4

00101001

44

00101111

6

4

5

00110101

55

00111001

7

5

6

00111110

66

01000101

3

0

7

01001011

77

01001111

4

1

8

01010100

88

01011001

5

2

9

01011111

99

11010000

6

3

10

01100000

110

01101111

7

4

Примечание. Значения T_sredy 1 и T_sredy 2 заданы в двоичной системе, T_treb в десятичной.

 

 

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

 

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

 

6.1 Краткие теоретические сведения

 

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

Правила маскирования с помощью логических операций:

-     логическая операция AND исходного числа и числа-маски очищает разряд в исходном числе, если в соответствующем разряде числа-маски записан 0, и не изменяет его, если в разряде маски записана единица;

-     логическая операция OR исходного числа и числа-маски устанавливает в разряд исходного числа  1, если в таком же разряде маски записана 1, и не изменяет его, если в этом разряде маски записан 0;

-     логическая операция «Исключающее ИЛИ» (XOR) исходного числа и числа-маски инвертирует содержимое бита исходного числа, если в соответствующем разряде числа маски записана 1. И не изменяет его, если в этом разряде записан 0. Часто применяется для определения равенства регистра какому-либо числу записанному в маске.

 

          Т а б л и ц а 6.1 – Результаты маскирования

 

 

Объекты

Операция

OR (установка с 4 по 7 бит)

AND (очистка с 0 по 3 бит)

XOR (инверсия с 4 по 7 бит)

XOR (проверка чисел на равенство)

Число

10101010

10101010

10101010

00001101

Маска

11110000

11110000

11110000

00001101

Результат

11111010

10100000

01011010

00000000

 

 

 

 

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

 

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

Фрагмент 6.1. Установка четырех бит с помощью функции OR.

MOVLW  B’10101010’; загрузить константу h’АА’ в регистр W.

MOVWF   PORTC; переслать константу в PORTC.

MOVLW  B’11110000’; установить маску.

IORWF  PORTC F; подаем энергию в PORTC с 4 по 7 разряды.

Фрагмент 6.2. Сброс четырех бит с помощью функции AND.

MOVLW   B’10101010’; загрузить константу h’АА’ в регистр W.

MOVWF   PORTC; переслать константу в PORTC.

MOVLW   B’11110000’; установить маску в регистре W.

ANDWF  PORTC,  F; выключаем энергию в PORTC с 0 по 3 разряды.

Фрагмент 6.3.  Процедура инвертирования бит.

MOVLW  b’10101010’; загрузить h’АА’ в регистр W.

MOVWF  R1; загрузить h’АА’ из W в R1 .

MOVLW  b’11110000’; маска для инверсии с 4 по 7 бит.

XORWF   R1,  W; применяем логическую функцию.

MOVWF  PORTC; проверяем светодиодами результат в порте С.

Фрагмент 6.4. Определение равенства чисел и его применение.

Пусть к битам регистра PORTD, настроенного на ввод информации в ЦПУ, подключены: конечный выключатель ограждения окрасочной камеры (бит 3), датчик наличия заготовок (бит 2),  датчик наличия заданной температуры в камере (бит 0). В этом случае предварительная звуковая сигнализация S1, присоединенная к нулевому биту PORTC, должна включиться при значении «1» в этих битах информации, что определяется фрагментом программы описанным ниже.

Clrf  PORTC

Movlw  b’11011101’; информация пересланная в PORTD.

Movwf  R1; регистр хранящий информацию из PORTD.

Movlw  b’00001101’; жирным выделены интересующие нас биты 0, 2, 3.

Movwf  Maska; число для  маски, примененной в операции XOR.

Movlw  b’00001101’; маска для операции AND.

Andwf  R1, W; все биты кроме 0, 2, 3 обнуляем.

Xorwf  Maska, w; проверяем записаны ли в этих битах единицы.

Movlw  b’10000001’; предполагаем что да, тогда надо включить сирену.

Btfss  STATUS, Z; равно ли преобразованное число из PORTD маске?

Movlw  b’10000000’; если Z=0 (число равно маске) не включать сирену.

Movwf  PORTC

Подготовьте программу, выполняющую маскирование на основе приведенных фрагментов для варианта из таблицы 6.2. Запишите результаты в таблицу 6.1.

Не забудьте создать окно наблюдения за значениями всех регистров.

 

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

Вариант

Маска для AND и OR

Число из PORTD

Биты проверяемые на наличие 1

Вариант

Число из PORTD

Число из PORTD

Биты проверяемые на наличие 1

1

11000001

10110011

1, 2, 3

6

11100110

00111001

6, 7, 0

2

00110010

10011111

2, 3, 4

7

01101100

11011100

7, 0, 1

3

01110011

10101001

3, 4, 5

8

01001111

10001110

0, 2, 3

4

01010100

01110111

4, 5, 6

9

00110001

00111001

1, 3, 4

5

10100101

01101101

5, 6, 7

10

10010111

01110101

2, 5, 6

 

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

 

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

2.        Как очистить нечетные разряды числа?

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

4.        Какой логической функцией определяют равенство чисел?

5.        Как очистить с 0 по 3 разряды?

6.        Как установить с 4 по 7 разряды?

7.         Зачем применяют логическую функцию Исключающее ИЛИ?

8.        Укажите значение бита Z регистра STATUS после логической операции AND, если маска равна 00h?

9.        Как инвертировать все нечетные биты в числе?

10.   Проверка равенства определенных бит числа заданному значению?

11.   Как оставить информацию только в битах 0-3 заданного числа?

12.   Таблицы истинности для AND, OR, XOR.

13.   Какое оборудование подключено к проверяемым битам?

 

7 Суммирование массива информации

 

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

 

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

 

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

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

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

 

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

 

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

 

 

 

          Т а б л и ц а  7.1– Сумма массива и среднее массива

Вариант

Индекс регистра

Адрес регистра массива, указываемый в FSR

Число в регистре массива

Сумма в регистре W

Форма h

Форма D

Форма В

 

-

-

-

00

00000000

11

1

40h

D ‘11’

11

00001011

11

2

41h

D ‘13’

24

00011000

11

3

42h

D ‘15’

39

00100111

11

4

43h

D ‘17’

56

00111000

 

 

56 делим на 2

28

00011100

 

 

28 делим на 2 получаем среднее

14

00001110

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

Вариант

Значение первого регистра

Адреса регистров массива

Вариант

Значение первого регистра

Адреса регистров массива

1

D’21’

21h – 24h

6

D’26’

26h – 29

2

D’22’

22h – 25h

7

D’27’

27h – 30h

3

D’23’

23h -26h

8

D’28’

28h – 31h

4

D’24’

24h -27h

9

D’29’

29h – 32h

5

D’25’

 25h -28h

10

D’30’

30h – 33h

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

 

Создайте окно наблюдения для всех регистров в необходимом формате чисел и внесите в отчет по лабораторной работе. Для данной программы необходимые регистры показаны на рисунке 7.2. Чтобы быстро получить данные в окне наблюдения запустите составленную программу в автоматическом режиме и затем нажмите кнопку F5.

Рисунок 7.2 – Окно наблюдения

 

 

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

 

1.      Биты Status меняющие свои значения при операциях вычислений?

2.      Поясните команду условного перехода BTFSS STATUSZ.

3.      Поясните команду XORWF  IND_EL_MAS, W.

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

5.      Какие способы адресации вы знаете?

6.      Как контролируется в цикле выход за пределы массива?

7.      Назначение регистра FSR.

8.      Назначение регистра INDF.

9.      Как находится среднее четырех регистров?

10. Как выполняется деление на четыре?

11. Зачем очищается регистр IND_EL_MAS перед циклом сложения?

12. Какое участие принимает бит C регистра Status в операции сдвига?

 

8 Автоматизация окрасочной камеры. Организация подпрограмм

 

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

 

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

 

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

Рассмотрим сначала работу внутреннего цикла подпрограммы Timer. Сначала счетчику внутреннего цикла Sch_in задаем какое-то значение N. Затем значение счетчика Sch_in уменьшается на 1 и проверяется: не стало ли оно нулевым. Если значение счетчика не равно нулю, то выполняется инструкция перехода GOTO  M_in, повторяющая цикл. Если счетчик обнулился, программа выходит из цикла. Длительность задержки времени  определяется начальной величиной счетчика Sch_in и временем выполнения инструкций подпрограммы в МК. Поскольку микропроцессор работает с высокой частотой, то часто приходится создавать внешний цикл со счетчиком Sch_out для увеличения времени задержки. Его работа аналогична. Сначала задаем значение Sch_out=W. На каждый цикл уменьшения Sch_out на единицу, внутренний цикл сработает  N раз. Время задержки будет определяться произведением Sch_out×Sch_in и частой работы генератора МК.

Подпрограммы пишут после инструкции GOTO$ основной программы. Подпрограмма всегда начинается с имени, которое должно быть написано без пробела. Заканчивается подпрограмма инструкцией возврата в основную программу RETURN. Подпрограмма из основной программы вызывается по имени инструкцией CALL ИМЯ, например CALL Timer. Значение аккумулятора W является аргументом для подпрограммы Timer, определяющим длительность её работы. После завершения ее работы управление передается в главную программу на следующую инструкцию после инструкции CALL  Timer.

 

8.2 Задание на проектирование.

 

Создать программу для автоматизации окрасочной камеры, описанной в лабораторной работе 2, выполняющую следующую работу:

- при подаче питания включить световую сигнализацию на пульт оператора L2 и звуковую предупреждающую сигнализацию S1 на 2 секунды;

- включить двигатель краскораспылителя D1 на 3 секунды, а также двигатель вентилятора D2 и лампочку L1;

- выключить краскораспылитель D1, вентилятор D2 и лампочка L1 должны работать еще 2 секунды;

- выключить D2 и L1 на 1 секунду для замены заготовки в камере;

- повторить процесс окрашивания новой заготовки, начиная с включения предупреждающей звуковой сигнализации S1.

Временная диаграмма работы камеры показана на рисунке 8.2.

 

Рисунок 8.2 – Временная диаграмма работы окрасочной камеры

 

Программа 8.1.

include<p16F877.inc>

Sch_in       EQU  H'22'; счетчик внутреннего цикла задержки.

Sch_out    EQU  H'24' ; счетчик внешнего цикла задержки.

Sch3         EQU  H'23' ; счетчик третьего цикла задержки.

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

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

          MOVLW   B'10000000'

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

Sled_det          BSF  PORTC, 0; включаем звуковую сигнализацию S1.

MOVLW d’40’; аргумент W задает время таймера. При отладке d’2’.

CALL Timer

MOVLW   B'10001110'

MOVWF   PORTC; выключаем S1, включаем D1, D2 и L1.

MOVLW d’60’; задаем время окраски.

CALL Timer

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

MOVLW d’40’; задаем время работы D2 и L1.

CALL Timer

            MOVLW   B'10000000'

MOVWF   PORTC; окраска закончена, но сигнализация L2 работает.

MOVLW d’20’; задаем время для замены заготовки.

CALL Timer

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

GOTO $; разделитель основной программы и подпрограмм.

Timer; подпрограмма Timer. Применено два вложенных цикла.

MOVWF  Sch3; значение W является аргументом для таймера.

M3    MOVLW   D'150'

MOVWF  Sch_out; устанавливаем значение внешнего счетчика.

M_out; метка внешнего счетчика.

MOVLW   D’255';

MOVWF   Sch_in; устанавливаем значение внутреннего счетчика.

M_in; метка внутреннего счетчика.

DECF   Sch_in, F; уменьшаем значение счетчика Sch_in на 1.

BTFSS   STATUS, Z; если счетчик Sch_in обнулился, пропускаем GOTO.

GOTO   M_in; срабатывает только при Z=0.

DECF   Sch_out, F; уменьшаем значение счетчика Sch_out  на 1.

BTFSS   STATUS, Z; если счётчик обнулился, пропускаем GOTO.

            GOTO   M_out; инструкция срабатывает только при Z=0.

DECF   Sch3, F; уменьшаем значение счетчика Sch3 на 1,

BTFSS   STATUS, Z; если оно равно нулю (Z=1), пропускаем GOTO.

GOTO   M3; срабатывает только при Z=0.

RETURN; конец подпрограммы Timer.

END; конец текста всей программы.

 

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

 

Разработайте программу, включающую и выключающую оборудование на заданное время, согласно варианту задания из таблицы 8.1.

 

 

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

Вариант

Биты подключения S1, D1, D2
 
L1, L2.

Время работы, сек

Вариант

Биты подключения
S1, D1, D2
 
L1, L2.

Время работы, сек

S1

D1

D2

S1

D1

D2

1

1, 2, 3, 4, 5

5

6

3

6

6, 7, 0, 1, 2

6

6

4

2

2, 3, 4, 5, 6

6

7

4

7

7, 0, 1, 2, 3

7

7

5

3

3, 4, 5, 6, 7

7

6

5

8

0 ,1 ,2 ,3, 4

8

6

6

4

4, 5, 6, 7, 0

8

5

6

9

1, 3, 5, 7, 0

9

5

7

5

5, 6, 7, 0, 1

9

7

7

10

2, 4, 6, 0, 1

10

6

3

 

Отладка программы. Оставьте только первый вызов подпрограммы Timer, установив аргумент W=2. Остальные вызовы выключите, напечатав перед инструкцией Call символ «;». Установите значения для счетчиков Sch_in и Sch_out равные 2. Введите разработанную программу  в микроконтроллер. Создайте окно наблюдения. После отладки программы в пошаговом режиме, установите первоначальные значения аргумента W, счетчиков Sch_in и Sch_out и запустите ее в автоматическом режиме. Рассчитайте W для заданного времени работы оборудования по варианту методом пропорций. Для уточнения времени задержки  можно добавить в циклы дополнительные бесполезные инструкции, например, NOP.

Результаты занесите в таблицу 8.2. Продемонстрируйте работу программы преподавателю.

 

          Т а б л и ц а  8.2– Результаты настройки циклов задержки

 

 

Вариант

 

 

Оборудование

Параметры подпрограммы Timer

Время работы, сек

Значение счетчиков

Sch_in

Sch_out

Sch3

 

S1

 

 

 

 

 

D1, D2, L1

 

 

 

 

 

D2, L1

 

 

 

 

 

Внимание! Обязательно сохраните программу в моих документах, поскольку в следующих лабораторных работах программа будет продолжена.

 

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

 

1.   Почему создан третий цикл в подпрограмме Timer?

2.   Почему  в счетчики циклов записаны указанные значения?

3.   Назначение подпрограмм.

4.   Цикл, вложенный цикл.

5.   Что такое машинный цикл?

6.   Сколько машинных циклов требуется для выполнения команд в подпрограмме Timer?

7.   Почему в Timer выбраны указанные значения Sch_in и Sch_out?  

8.   Как вызывается подпрограмма на выполнение?

9.   Опишите работу инструкции DECF  Sch_outF.

10.   Приведите формулу для расчета времени задержки.

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

12.   Какими операторами начинается и заканчивается  подпрограмма?

13.   Как выполняется отладка подпрограммы Timer?

14.   Что является аргументом для подпрограммы Timer?

 

9 Программирование клавиатуры

 

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

 

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

 

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

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

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

 

Бит RD7 должен быть запрограммирован на вывод, а бит RD3 - на ввод. Когда кнопка нажата, с бита RD7 проходит сигнал через кнопку «1» на клемму RD3.

Роль кнопок клавиатуры в программе и их расположение:

“5” - Кнопка Pusk1 на пульте;

“6” - Кнопка Pusk2 по месту;

Shift”- Кнопка Stop1 на пульте;

“9” - Кнопка Stop2 по месту.

Рисунок 9.1 – Схема подключения

 

9.2 Задание на проектирование

 

Создайте программу автоматизации окрасочной камеры по заданию лабораторной работы №8. Предусмотреть запуск и  останов камеры кнопками по месту и с пульта оператора.

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

Фрагмент 9.1. Программирование клавиатуры.

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

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

          CLRF  TRISC

            MOVLW  b'00001111'

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

            BCF  STATUS,  5

            CLRF  PORTC

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

            MOVLW   B'11110000'

            MOVWF   PORTD; подаем питание на выводы К7-К4 клавиатуры.

            MOVLW   B'10000000'

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

Sled_det          BTFSS  PORTD,  2; проверяем нажатие кнопки Pusk.

            GOTO  Sled_det; если кнопка Pusk не нажата повторяем проверку.

            BSF  PORTC, 0; если нажата, включаем звуковую сигнализацию S1.

            MOVLW d'40'; задаем время работы сигнализации S1.

            CALL Timer

            MOVLW   B'10001110'

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

            MOVLW d'60'; задаем время работы D1.

            CALL Timer

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

            MOVLW d'20'; задаем время работы вентилятора D2 и лампочки L1.

            CALL Timer

MOVLW  B'10000000'

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

MOVLW d’20’; задаем время для замены заготовки.

CALL Timer

            GOTO  Sled_det; на метку Sled_det для нового запуска установки.

GOTO $; разделитель основной программы и подпрограмм.                    

Timer; в подпрограмме показан только внутренний цикл с кнопками Stop.

M_in; метка внутреннего счетчика.

            BTFSC  PORTD,  1; проверяем нажатие кнопки Stop1 или Stop2.

            GOTO Stop; если кнопка Stop нажата, останавливаем  камеру.

            DECF   Sch_in, F; уменьшаем значение счетчика Sch_in на 1.

            BTFSS   STATUS, Z; если счетчик обнулился (Z=1), пропускаем GOTO.

            GOTO   M_in; срабатывает только при Z=0.

            DECF   Sch_out, F; уменьшаем значение счетчика Sch_out на 1.

. . . .

            RETURN

Stop   CLRF  PORTC; окончание работы окрасочной камеры.

            END; конец текста всей программы.

 

9.3 Задание на выполнение

 

Разработайте программу, автоматизации окрасочной камеры, согласно варианту задания из таблицы 9.1. Для уменьшения паразитных наводок необходимо все клеммы клавиатуры соединить с выводами PORTD и на биты RD4…RD7 подать напряжение.

 

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

Вариант

Биты подключения S1, D1, D2
 
L1, L2.

Кнопка Pusk

Кнопка Stop

Вариант

Биты подключения S1, D1, D2
 
L1, L2.

Кнопка Pusk

Кнопка Stop

1

1, 2, 3, 4, 5

1или 2

5 или 6

6

6, 7, 0, 1, 2

6 или 7

9 или 0

2

2, 3, 4, 5, 6

2 или 3

6 или 7

7

7, 0, 1, 2, 3

7 или 8

3 или 4

3

3, 4, 5, 6, 7

3 или 4

7 или 8

8

0 ,1 ,2 ,3, 4

8 или 6

4 или 2

4

4, 5, 6, 7, 0

4 или 2

6 или 8

9

1, 3, 5, 7, 0

9 или 0

2 или 3

5

5, 6, 7, 0, 1

5 или 6

1или 2

10

2, 4, 6, 0, 1

0 или 9

7 или 6

Время работы S1, D1, D2, L1 и L2 и биты их подключения к PORTC принять как в лабораторной работе №8.

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

 

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

 

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

2.        Назначение клавиатуры.

3.        Зачем разряды PORTD настраивают на ввод и на вывод?

4.        Как инициализируется PORTD?

5.        Как проверяется нажатие кнопки клавиатуры?

6.        Почему каждая кнопка клавиатуры не имеет отдельной клеммы?

7.        Что выполняет инструкция BTFSS PORTD,  2?

8.        Что выполняет инструкция BTFSC PORTD,  2?

9.        Как подключить кнопки «1» и «2» параллельно по схеме ИЛИ?

10.   Что записано в файле p16F877.inc?

11.   Назначение сигнализации в программе.

12.   Можно ли кнопку Stop разместить вне подпрограммы Timer.

 

10 Автоматизация упаковки

 

Цель работы: разработка автоматизации упаковочной машины.

 

10.1 Задание на автоматизацию упаковочной машины

 

При подаче напряжения на установку включить лампочку L2 на пульте оператора и предупреждающую звуковую сигнализацию на 3 секунды, затем включить конвейер D1.  По нему движутся изоляторы, фотодатчик фиксирует попадание изолятора в коробку. После попадания двух изоляторов включить лампочку L1. После попадания четырех изоляторов включить на две секунды упаковочный механизм, который заменяет полную коробку на пустую коробку. Количество упакованных коробок должно быть пересчитано. Срабатывание лазерных датчиков будем имитировать кнопками K5 и K6 клавиатуры. Временная диаграмма работы упаковщика показана на рисунке 10.1.

Рисунок 10.1 – Временная диаграмма работы упаковщика

 

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

 

В таблице 10.1 показано назначение битов PORTC и клавиатуры.

 

Т а б л и ц а 10.1 – Назначение битов PORTC и контактов клавиатуры

Регистр PORTC

Кнопки клавиатуры

Действия кнопок

0 разряд - предупреждающая звуковая сигнализация S1

5 или 6

Фотодатчики

1 разряд – двигатель  конвейера D1

 

 

2 разряд – двигатель D2 упаковочного механизма

 

 

3 разряд – световая сигнализация L1

 

 

7 разряд – световая сигнализация работы L2 на пульт

 

 

Блок – схема программы для упаковочной машины приведена на рисунке  10.1.

 

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

 

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

include<p16F877.inc>

Sch_in  EQU  H'22'; счетчик внутреннего цикла задержки.

Sch_out EQU  H'23'; счетчик внешнего цикла задержки.

Sch3    EQU  H'24'; счетчик третьего цикла задержки.

KOL_IZOL   EQU h'25'; регистр для записи количества изоляторов.

KOL_KOROB  EQU  h'28'; регистр для хранения количества коробок.

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

MOVLW  b'00001111'

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

BCF  STATUS, 5

MOVLW  b'11110000'

MOVWF  PORTD; подаем питание на клавиатуру.

CLRF     PORTC; очищаем PORTC от мусора.

CLRF  KOL_KOROB

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

MOVLW   B'10000001'

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

MOVLW  d'60'; время работы предупредительной сирены.

CALL Timer

BCF  PORTC, 0; выключаем сирену S1.

            BSF  PORTC, 1; включаем транспортер D1.

M1    CLRF  KOL_IZOL

Prov_dat 

BTFSS  PORTD,  2; проверяем срабатывание датчиков (кнопки "5",  "6").

GOTO Prov_dat

MOVLW D'10'

Call Timer; убираем дребезг контактов клавиатуры.

INCF KOL_IZOL, F; фиксируем поступление изолятора в коробку.

MOVLW D'2';

XORWF  KOL_IZOL, W; W=KOL_IZOL XOR B'00000010'.

BTFSC  STATUS, Z; проверяем Z = 0?

            BSF  PORTC, 3; только при Z=1, включаем лампочку L1.

MOVLW D'4';

SUBWF  KOL_IZOL, W; W=KOL_IZOL-4.

BTFSS  STATUS, Z; проверяем разность KOL_IZOL-4=0?

GOTO Prov_dat; выполняется только при Z=0.

MOVLW  b'10000110'; при Z=1, заменить коробку и выключить L1.

MOVWF  PORTC; пересылаем информацию в PORTC.

INCF  KOL_KOROB, F; фиксируем заполнение очередной коробки.

MOVLW  d'50'; время смены коробок.

CALL Timer

BCF  PORTC, 2; выключаем механизм замены коробок.

GOTO M1; начинаем заполнение новой коробки.

GOTO$

Timer; Подпрограмма Timer. Приведены только три строки.

MOVWF  Sch3

; RETURN; включить команду при отладке программы в режиме F7.

M3    MOVLW   D'150' . . .

RETURN; конец подпрограммы Timer.

END; конец текста всей программы.

В приведенной программе не используется кнопка Stop, поскольку она здесь не будет срабатывать.

 

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

 

Варианты заданий принять из таблицы 10.2.

 

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

Вариант

Биты подключения оборудования
S1, D1, D2, L1, L2.

Вариант

Биты подключения оборудования
S1, D1, D2, L1, L2.

1

1, 2, 3, 4, 5

6

6, 7, 0, 1, 2

2

2, 3, 4, 5, 6

7

7, 0, 1, 2, 3

3

3, 4, 5, 6, 7

8

0 ,1 ,2 ,3, 4

4

4, 5, 6, 7, 0

9

1, 3, 5, 7, 0

5

5, 6, 7, 0, 1

10

2, 4, 6, 0, 1

 

Рисунок 10.2 – Окно наблюдения

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

На рисунке 10.2 показано окно наблюдения.

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

 

 

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

 

1.     Что является аргументом при вызове подпрограммы Timer.

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

3.     Порядок отладки программы.

4.     Что имитируют кнопки клавиатуры?

5.     Как устраняется дребезг контактов?

6.     Что такое паразитные наводки?

7.     Почему нельзя поместить кнопку Stop подпрограмму Timer?

8.     Как имитируется работа аварийных датчиков?

9.     Как определяется количество изоляторов равное двум?

10.     Как определяется количество изоляторов равное четырем?

11.     Как фиксируется заполнение коробки?

 

11 Программирование обработки аварийной ситуации

 

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

 

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

 

Описание работы МК. При включении питания управление всегда передается на вектор сброса МК по адресу h’00’ электрически программируемого постоянного запоминающего устройства (ЭППЗУ). В случае срабатывания аварийного датчика, поступает импульс на клемму внешних прерываний RB0/INT регистра PORTB, основная программа прерывается и управление передается на вектор прерывания по адресу h’04’ ЭППЗУ. Здесь записывается команда Goto Avariya перехода на подпрограмму «Обработчик прерываний», который выключает оборудование (D1 и D2) и включает аварийный сигнал L3 [4].

Для работы с прерываниями существует регистр специального назначения INTCON, см. приложение Е. В нем необходимо установить «1» в бит INTE для разрешения внешних прерываний  и в бит GIE для глобального разрешения любых прерываний в конкретный момент времени. При срабатывании аварийного датчика формируется флаг INTF, который заставляет микроконтроллер выполнить команду вектора прерываний по адресу h’04’, т.е. вызывается обработчик прерываний. В обработчике прерываний, в первую очередь сбрасываются бит разрешения внешнего прерывания INTE и флаг внешнего прерывания  INTF, иначе непрерывно будет вызываться обработчик прерываний.

 

11.2 Задание на проектирование и выполнение программы

 

Продолжить проект лабораторной работы №10, создать выключение оборудования и обработку аварийной ситуации с помощью прерывания. Импульсы на прерывания имитировать кнопками. При аварии оборудование должно выключиться и на пульте должен загореться сигнал аварии L3.

 

Т а б л и ц а 11.1 – Назначение битов PORTC и контактов клавиатуры

Регистр PORTC

Кнопки клавиатуры

Действия кнопок

0 разряд - предупреждающая звуковая сигнализация S1

1 или 2

Аварийные датчики

(перегрев подшипников,

затор на конвейере)

1 разряд – двигатель  конвейера D1

 

2 разряд – двигатель упаковочного механизма D2

 

3 разряд – световая сигнализация L1

3

Кнопка Stop

4 разряд – сигнал аварийного останова камеры L3

5 или 6

Фотодатчики

7 разряд – световая сигнализация работы L2 на пульт

 

 

 

Фрагменты программы 11.1. В программе выделены курсивом дополнительные строки, и строки, которые отличаются от строк программы «Автоматизация упаковки».

; Описание регистров не приведено.

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

; Вектор сброса.

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

GOTO GLAV; инструкция будет записана по адресу h'00' ЭППЗУ.

; Вектор прерывания.

ORG h'04''; указание адреса для записи следующей инструкции.

GOTO Avariya; инструкция будет записана по адресу h'04' ЭППЗУ.

NOP; инструкция будет записана по адресу h'05' ЭППЗУ.

;                                               Основная программа

GLAV ; метка  главной программы.

NOP; установка  курсора на команду CLRF  STATUS в режиме F7.

NOP

CLRF  STATUS; очищаем регистр Status от мусора.

; настройка микроконтроллера.

BSF  STATUS, 5

BSF INTCON, INTE;  разрешаем регистрацию внешних прерываний.     

BSF INTCON, GIE;  разрешаем работу прерываний.

CLRF  TRISC

MOVLW  b'00001111'

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

BCF  STATUS, 5

Далее идет текст программы из лабораторной работы «Автоматизация упаковки» без изменений, но для отладки обработчика перед меткой M1 необходимо поместить его вызов командой CALL Avariya.

GOTO$

Timer; Подпрограмма Timer. Приведены только 3 строки.

MOVWF  Sch3

; RETURN; эту команду включить при отладке программы в режиме F7.

M3    MOVLW   D'150' . . .

Avariya; Подпрограмма - обработчик прерывания при аварии и останове.

BCF INTCON, INTE; запрещаем внешние прерывания.

BCF  INTCON, INTF; сбрасываем флаг внешнего прерывания.

MOVLW b'10010000';

MOVWF PORTC; двигатели выключаем и включаем сигнал L3.

MOVLW D'20'; определяем время подачи сигнала L3.

CALL Timer;

GOTO Stop; переход на метку выключения оборудования.

RETFIE;  оператор возврата в фоновую программу из обработчика.

Stop;   метка останова упаковщика (микроконтроллер не выключается).

END; конец текста всей программы.

 

Внимание! Клемма клавиатуры K3 должна быть соединена с клеммой внешних прерываний RB0/NT, остальные клеммы с PORTD.

 

Рисунок 11.1 – Окно наблюдения

Отладка программы. При работе в пошаговом режиме ограничьте работу подпрограммы Timer. Включите вызов обработчика как подпрограммы, кнопка клавиатуры К1 или К2 при его вызове должна быть нажата.

На рисунке 11.1 показано окно наблюдения.

Варианты заданий принять из лабораторной работы «Автоматизация упаковки».

 

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

 

1.   Назначение РСН INTCON?

2.   Что такое прерывания?

3.   Как в программе используется флаг прерывания?

4.   Какие задачи решает обработчик прерывания?

5.   Когда срабатывает обработчик прерываний?

6.   Что такое вектор сброса и вектор прерывания?

7.   Что является аргументом при вызове подпрограммы Timer.

8.   Как при наладке программы выполняется переход к обработчику?

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

10.   Порядок отладки программы.

11.   Что имитируют кнопки клавиатуры?

12.   Назначение адресов h’00’ и h’04’ оперативной памяти.

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

14.   Что такое паразитные наводки?

15.   В любой ли ситуации срабатывает прерывание?

 

12 Программирование таймерных функций

 

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

Ознакомьтесь с регистрами специального назначения PIR1, TICON, INTCON, TMR1, TMR1H, TMR1L по приложению Е /4/.

 

12.1 Задание на проектирование

 

Создать программу для автоматической окрасочной камеры, описанной в лабораторной работе №8, выполняющую следующую работу:

- при подаче питания включить световую сигнализацию на пульт оператора L2. Кроме того, включить звуковую предупреждающую сигнализацию S1 на 2 секунды;

- включить двигатель краскораспылителя D1, вентилятора D2 и лампочку L1 на 3 секунды;

- выключить краскораспылитель D1. Вентилятор D2 и лампочка L1 продолжают работать еще 2 секунды;

- выключить D2 и L1 на 1 секунду для замены заготовки в камере;

- выполнить подсчет окрашенных заготовок;

- повторить процесс окрашивания новой заготовки, начиная с включения предупреждающей звуковой сигнализации S1.

Временная диаграмма работы камеры показана на рисунке 8.2.

Изучите блок-схему алгоритма автоматизации работы окрасочной камеры по рисункам 12.2 и 12.3.

Рисунок 12.2 - Блок-схема программы     Рисунок 12.3 - Блок-схема п/п Timer2

 

Ознакомьтесь с фрагментами программы. Они демонстрируют использование тай­мера TRM1 для организации временных задержек. На основе фрагментов создайте программу для заданного варианта.

Фрагменты программы. Курсивом отмечены дополнительные команды по сравнению с лабораторной работой №8.

            Include <p16F877.inc>; подключаем библиотеку символов.

T_reg     EQU h'20'; регистр, определяющий время задержки.

Kol_det  EQU h'21'; регистр, хранящий количество окрашенных деталей.

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

          BSF STATUS, 5

            CLRF TRISC 

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

            BCF STATUS, 5

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

            CLRF TMR1H; очищаем старший регистр-счетчик TMR1.

            CLRF TMR1L; очищаем младший регистр-счетчик TMR1.

            CLRF INTCON; запрещаем прерывания от TMR1.

            MOVLW b'00110000'; тактирование от внутреннего генератора.

            MOVWF T1CON;   устанавливаем предделитель частоты 1:8.

;         Рабочая часть совпадает с программой лабораторной работы 8.

GOTO$

;         Подпрограмма Timer заменяется на подпрограмму Timer2.

Timer2; Подпрограмма задержки времени с встроенным таймером TMR1.

MOVWF  T_reg

; Return; для выключения Timer2 при отладке главной программы.

M_T_reg; следующие 4 команды только для отладки в режиме F7.

            ; MOVLW D'255'; для отладки Timer2.

            ; MOVWF TMR1H; для отладки Timer2.

            ; MOVLW D'254'; для отладки Timer2.

            ; MOVWF TMR1L; для отладки Timer2.

            BCF PIR1, TMR1IF; сброс флага переполнения таймера в каждом цикле.

            BSF T1CON, TMR1ON; пуск таймера TMR1.

;         Следующие три строки это циклы работы таймера TRM1.

M_ TRM1;  метка       

            BTFSS PIR1, TMR1IF; проверка флага перепол­нения таймера

            GOTO  M_ TRM1; если флага нет, то цикл TRM1 продолжается.

            DECFSZ  T_reg, F; уменьшаем число в регистре и проверяем на ноль.

            GOTO M_T_reg; (только при Z=0) время не кончилось, повторяем цикл.

            RETURN

            END

 

12.2 Выполнение работы

 

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

 

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

Вариант

Биты подключения S1, D1, D2
 
L1, L2.

Время работы, сек

Вариант

Биты подключения S1, D1, D2
 
L1, L2.

Время работы, сек

S1

D1

D2

S1

D1

D2

1

1, 2, 3, 4, 5

5

6

3

6

6, 7, 0, 1, 2

6

6

4

2

2, 3, 4, 5, 6

6

7

4

7

7, 0, 1, 2, 3

7

7

5

3

3, 4, 5, 6, 7

7

6

5

8

0 ,1 ,2 ,3, 4

8

6

6

4

4, 5, 6, 7, 0

8

5

6

9

1, 3, 5, 7, 0

9

5

7

5

5, 6, 7, 0, 1

9

7

7

10

2, 4, 6, 0, 1

10

6

3

 

Отладка программы. Оставьте только первый вызов подпрограммы Timer2, установив аргумент W=2. Установите значения для счетчиков приведенные в подпрограмме с пометкой для отладки.

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

Рисунок 12.1 – Окно наблюдения

         

          Настройте заданное время работы таймера.

Результаты занесите в таблицу 12.2.

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

 

Т а б л и ц а  12.2– Результаты настройки циклов задержки

Вариант

Оборудование

Параметры подпрограммы Timer2

Время, сек

Значение счетчиков

T_reg

TMR1H

TMR1L

 

S1

 

 

 

 

 

D1, D2, L1

 

 

 

 

 

D2, L1

 

 

 

 

 

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

 

1.     Назначение таймера TMR1.

2.     Сколько счетчиков у TMR1?

3.     Как устанавливается максимальное время TRM1?

4.     Какое максимальное число можно записать в счетчики TMR1.

5.     Назначение регистра TICON.

6.     Назначение регистра INTCON.

7.     Назначение регистра PIR1.

8.     Назначение регистра PIE1.

9.     Как задается длительность работы Timer2?

10.  Назначение предделителя.

11.  В каком банке находится регистр PIE1?

12.  Когда появляется флаг, сигнализирующий, что TMR1 переполнен?

13.  Как запускается TMR1?

14.  Назначение регистра T_reg.

15.  Какой будет результат сложения чисел 255 и 3 в регистре?


Приложение А

 

Системы счислений

 

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

 

Т а б л и ц а Б.1 - Запись чисел в различных системах счислений

Десятичная система

Двоичная система

Двоично-десятичная система

Шестнадцатеричная система

0

0000

0000

0

1

0001

0001

1

2

0010

0010

2

3

0011

0011

3

4

0100

0100

4

5

0101

0101

5

6

0110

0110

6

7

0111

0111

7

8

1000

1000

8

9

1001

1001

9

10

1010

0001 0000

A

11

1011

0001 0001

B

12

1100

0001 0010

C

13

1101

0001 0011

D

14

1110

0001 0100

E

15

1111

0001 0101

F

16

00010000

0001 0110

10

17

00010001

0001 0111

11

18

00010010

0001 1000

12

19

00010011

0001 1001

13

20

00010100

0010 0000

14

 

Примеры записи чисел в программе:

- D’07’ – десятичное число;

- B’0111’ – двоичное число;

- H’07’или 0х07 или 07h – шестнадцатеричное число.

Алгоритм перевода чисел из двоичной системы в шестнадцатеричную систему: сначала двоичное число разбиваем на четверки чисел справа налево, затем для каждой четверки записываем его эквивалент из приведенной таблицы А1.  П р и м е р.  0101 1011 11012 = 5ВD16.

Обратный перевод чисел очевиден, необходимо только аккуратно писать именно четверки двоичных чисел, дописывая при необходимости нули слева: 116.= 00012, 216 = 00102. П р и м е р.  415С16==0100 0001 0101 11002.

          В двоично-десятичной системе каждый десятичный знак отображается четырьмя двоичными числами.


Приложение Б

 

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


 Приложение В

 



Описание УМК-7 и  MPLAB

На передней панели стенда (рисунок А.1) расположены:

1 - микроконтроллер PIC16F877;

2 - ряд клемм, соединенных с выводами PIC16F877;

3 - ряд клемм, соединенных с выводами внешних устройств;

4 –источник звука;

5 –источник аналогового сигнала;

6 –панель светодиодов;

7 - жидкокристаллический индикатор;

8 - клавиатура.

MPLAB-ICD – оценочный комплект для микроконтроллеров серии PIC16F87X. В нем используется возможность внутрисхемной отладки (ICD), встроенной в кристаллы PIC16F87X и протокол внутрисхемного программирования фирмы Microchip. MPLAB-ICD одновременно является программатором и внутрисхемным отладчиком, поскольку он подключается к отлаживаемому устройству и работает как микроконтроллер PIC16F87X. Комплект MPLAB-ICD предназначен для отладки кода в лабораторных условиях.

MPLAB-ICD поддерживает:

-     пошаговое выполнение кода в реальном масштабе времени;

-     точки останова (break points);

-     внутрисхемную отладку;

-     отладку по исходному коду и символическим именам;

-     RS-232 интерфейс.

          Технические данные микроконтроллера:

-     диапазон выходных рабочих напряжений от 3.0 V до 5.5 V постоянного тока;

-     рабочие частоты от 32 кГц до 20 МГц.

Приложение Г

 

Регистр Status

 

В таблице Г.1 показаны расположение и имена бит регистра Status.

 

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

Номера бит

7

6

5

4

3

2

1

0

Имена бит

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 (нулевой бит номера банка)

Номер банка (десятичная система)

0

0

0

0

1

1

1

0

2

1

1

3

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

 

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

 

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

IRP

RP1

RP0

-TO

-PD

Z

DC

C

0

0

0

1

1

1

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 hxx’ – это указатель для ассемблера, что код, следующий за этим выражением, начинается с адреса hxx’ ЭППЗУ.

 


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.

Синтаксис: [labelBCF  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.

Синтаксис: [labelCLRF f.

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

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

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

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

 

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

Синтаксис: [labelCOMF  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.

Синтаксис: [labelDECFSZ  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.

Синтаксис: [labelIORLW  k.

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

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

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

 

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

Синтаксис: [labelIORWF  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.

Синтаксис: [labelMOVLW  k.

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

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

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

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

 

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

Синтаксис: [labelMOVWF  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.

Синтаксис: [labelSUBLW  k.

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

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

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

 

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

Синтаксис: [labelSUBWF  f, d.

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

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

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

 

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

Синтаксис: [labelSWAPF  f, d.

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

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

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

 

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

Синтаксис: labelXORLW  k.

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

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

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

 

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

Синтаксис: [labelXORWF  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>). Программное обеспечение пользователя должно сбрасывать соответствующие флаги при обработке прерываний от периферийных модулей.

 

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

 

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

2.        Информатика. Базовый курс. Учебное пособие для вузов под ред. Симоновича С.В., - СПб.: Питер, 2003.

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

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

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

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

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

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

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

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

 

Содержание

 

Введение

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

2 Изучение среды MPLAB. Управление оборудованием

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

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

5 Анализ информации посредством регистра состояния

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

7 Суммирование массива информации

8 Автоматизация окрасочной камеры. Организация подпрограмм

9 Программирование клавиатуры

10. Автоматизация упаковки

11 Программирование обработки аварийной ситуации

12. Программирование таймерных функций

Приложение A. Системы счислений

Приложение Б. Карта памяти микроконтроллера PIC16877

Приложение В. Описание УМК-7 и  MPLAB

Приложение Г. Регистр status

Приложение Д. Описание инструкций микроконтроллера PIC

Приложение Е. Модуль таймера TMR1

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

3

3

6

11

15

17

21

23

27

31

34

37

40

44

45

46

47

48

51

52


Св. план 2012 г., поз. 102