Некоммерческое акционерное общество
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
Кафедра инженерной кибернетики
ЦИФРОВАЯ ТЕХНИКА И МИКРОКОНТРОЛЛЕРЫ
Методические указания
к выполнению
лабораторных работ
для студентов всех форм обучения
специальности 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) в выбранной папке. Далее чтобы заставить работать вашу программу, нужно её скомпилировать. То есть перевести текст программы в инструкции микроконтроллера в двоичной форме. Для этого необходимо:
- создать новый проект командами Project – New 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 Mode – MPLAB ICD Debugger.
Программирование кристалла может занять пару минут, в течение которых в поле Status показывается процесс выполнения. Завершение пересылки в поле Status отображается сообщением “Waiting for user command” - “Ожидание команды пользователя”.
Создайте окно наблюдения командами Window – Watch Window – New Watch Window. Напечатайте в поле редактирования символы “PO” и из предложенного программой списка выберите строку PORTC. Нажмите кнопку Properties и выберите двоичный формат вывода чисел. Далее нажмите кнопку Add. В результате будет создано новое окно наблюдения с именем Watch1. Теперь напечатайте в поле редактирования ‘W’ и из предложенного списка выберите W, нажмите на кнопку Add. Повторите это для регистров TRISC, Status затем закройте окно кнопкой Close. Сохраните окно наблюдения с тем же именем как у программы.
Запустите на выполнение программу в пошаговом режиме командами 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?
3 Сложение, вычитание. Логика
Цель работы: изучение инструкций ADDWF, ANDWF, IORWF, XORWF, SUBWF. Выполнение сложения, вычитания, применение логических функций.
3.1 Теоретические сведения
Операции сложения и вычитания применяются, например, для автоматизации учета количества автомашин на объекте, которые могут свободно въезжать и выезжать с территории через ворота.
В таблице 3.1 представлены логические функции, их таблицы истинности, условные обозначения и интерпретация на электрической схеме. Все логические операции выполняются поразрядно.
Таблица 3.1 –Логические функции Y=f(X1,X2)
Инструкция |
Таблица истинности |
Условное обозначение |
Интерпретация на электрической схеме |
||
Х1 |
Х2 |
Y |
|||
|
0 0 1 1 |
0 1 0 1 |
0 1 1 1 |
Х1Y |
Х1
Х2
При замыкании любого контакта в цепи будет ток |
|
0 0 1 1 |
0 1 0 1 |
0 0 0 1 |
Х1Y |
X1 X2
Ток в цепи будет только при замыкании обоих контактов |
|
0 0 1 1 |
0 1 0 1 |
0 1 1 0 |
Х1Y Х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=b’10000010’ |
R1 AND R2 |
- |
10000000 |
00011011 |
R1=b’11110000’ |
R2=b’10000010’ |
R1 OR R2 |
- |
11110010 |
00011011 |
R1=b’11110000’ |
R2=b’10000010’ |
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 STATUS, Z.
4. Поясните инструкцию условного перехода BTFSS STATUS, Z.
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 – 29h |
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 STATUS, Z.
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 |
Время работы, сек |
Вариант |
Биты подключения |
Время работы, сек |
||||
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_out, F.
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 |
Кнопка Pusk |
Кнопка Stop |
Вариант |
Биты подключения
S1,
D1,
D2 |
Кнопка 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 – Варианты заданий
Вариант |
Биты подключения
оборудования |
Вариант |
Биты подключения
оборудования |
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 |
Время работы, сек |
Вариант |
Биты подключения
S1,
D1,
D2 |
Время работы, сек |
||||
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 h’xx’ – это указатель для ассемблера, что код, следующий за этим выражением, начинается с адреса h’xx’ ЭППЗУ.
ADDLW - Сложить k с W.
Синтаксис: [label] ADDLW k.
Операнды: 0£k£255.
Операция: (W) + k à (W).
Изменяемые флаги: С, DC, Z.
ADDWF - Сложение W и f.
Синтаксис: [label] ADDWF f, d.
Операнды: 0£f£127.
Операция: (W) + (f) à (dest).
Изменяемые флаги: C, DC, Z.
ANDLW - Побитное 'И' k и W.
Синтаксис: [label] ANDLW k.
Операнды: 0£k£255.
Операция: (W) .AND. k à (W).
Изменяемые флаги: Z.
ANDWF - Побитное 'И’ W и f.
Синтаксис: [label] ANDWF f, d.
Операнды: 0£f£127.
Операция: (W) .AND. (f) à (dest).
Изменяемые флаги: Z.
BCF - Очистить бит b в регистре f.
Синтаксис: [label] BCF f, b.
Операнды: 0£f£127; 0£b£7.
Операция: 0 à (f<b>).
Изменяемые флаги: Нет.
BSF - Установить бит b в регистре f.
Синтаксис: [label] BSF f, b.
Операнды: 0£f£127; 0£b£7.
Операция: 1àf<b>.
Изменяемые флаги: Нет.
BTFSC - Проверить бит b в регистре f, пропустить следующую инструкцию, если b=0.
Синтаксис: [label] BTFSC f, b.
Операнды: 0£f£127; 0£b£7.
Изменяемые флаги: Нет.
Описание: Если бит b в регистре f равен 0, то следующая инструкция программы пропускается.
BTFSS - Проверить бит b в регистре f, пропустить, если b = 1.
Синтаксис: [label] BTFSS f, b.
Операнды: 0£f£127; 0£b£7.
Изменяемые флаги: Нет.
Описание: Если бит b в регистре f равен ‘1’, то следующая инструкция программы пропускается.
CALL Вызов подпрограммы
Синтаксис: [label] CALL f.
CLRF - Очистить f.
Синтаксис: [label] CLRF f.
Операнды: 0£f£127.
Операция: 00h à (f); 1 àZ.
Изменяемые флаги: Z.
Описание: Очистить содержимое регистра f и установить флаг Z=1.
COMF - Инвертировать f.
Синтаксис: [label] COMF f, d.
Операнды: 0£f£127.
Операция: (-f) à (dest).
Изменяемые флаги: Z.
Описание: Инвертировать все биты в регистре f.
DECF - Вычесть 1 из регистра f.
Синтаксис: [label] DECF f, d.
Операнды: 0£f£127.
Операция: (f) - 1 à (dest).
Изменяемые флаги: Z.
DECFSZ - Вычесть 1 из f и пропустить, если f=0.
Синтаксис: [label] DECFSZ f, d.
Операнды: 0£f£127.
Операция: (f) -1 à (dest).
Изменяемые флаги: Нет.
Описание: Декрементировать содержимое регистра f. Если результат равен '0', то следующая инструкция программы пропускается.
GOTO - Безусловный переход.
Синтаксис: GOTO k.
Операнды: 0£k£2047.
Операция: Переход на метку.
Изменяемые флаги: Нет.
INCF - Прибавить 1 к f.
Синтаксис: label] INCF f, d.
Операнды: 0£f£127.
Операция: (f) + 1 à (dest).
Изменяемые флаги: Z.
IORLW - Побитное 'ИЛИ' k и W.
Синтаксис: [label] IORLW k.
Операнды: 0£k£255.
Операция (W).OR.(k) à (W).
Изменяемые флаги: Z.
IORWF - Побитное 'ИЛИ' W и f.
Синтаксис: [label] IORWF f, d.
Операнды: 0£f£ 127.
Операция: (W).OR.(f) à (dest).
Изменяемые флаги: Z.
MOVF - Переслать f.
Синтаксис: [label] MOVF f, d.
Операнды: 0£f£127.
Операция: (f) à (dest).
Изменяемые флаги: Z.
Описание: Значение d=1 используется для проверки содержимого регистра f на ноль, которое регистрируется флагом Z.
MOVLW - Переслать k в W.
Синтаксис: [label] MOVLW k.
Операнды: 0£k£255.
Операция: kà(W).
Изменяемые флаги: Нет.
Описание: В неиспользуемых битах ассемблер устанавливает '0'.
MOVWF - Переслать W в f.
Синтаксис: [label] MOVWF f.
Операнды: 0£f£127.
Операция: (W) à (f).
Изменяемые флаги: Нет.
NOP - Нет операции.
RETURN - Возврат из подпрограммы.
Синтаксис: [label] RETURN.
Операнды: Нет.
Операция: TOS à PC.
Изменяемые флаги: Нет.
Описание: Возврат из подпрограммы. Вершина стека TOS загружается в счетчик PC.
RLF - Циклический сдвиг регистра f влево через бит C регистра Status.
Синтаксис: [label] RLF f, d.
Операнды: 0£f£127.
Изменяемые флаги: С.
Описание: Выполняется циклический сдвиг влево содержимого регистра f через бит С регистра Status.
RRF - Циклический сдвиг регистра f вправо через бит C регистра status.
Синтаксис: [label] RRF f, d.
Операнды: 0£f£127.
Изменяемые флаги: С.
Описание: Выполняется циклический сдвиг вправо содержимого регистра f через бит С регистра Status.
SLEEP Перейти в режим SLEEP.
Синтаксис: [label] SLEEP.
Операнды: Нет.
Операция: 00h à WDT;
00h à предделитель WDT;
1 à -ТО; 0 à PD.
Изменяемые флаги: -ТО, -PD.
Описание: Сбросить флаг включения питания -PD в '0'. Установить флаг -ТО переполнения WDT в '1'. Очистить таймер WDT и его предделитель. Перевести микроконтроллер в режим SLEEP и выключить тактовый генератор.
SUBLW - Вычесть W из k.
Синтаксис: [label] SUBLW k.
Операнды: 0£k£255.
Операция: k - (W) à (W).
Изменяемые флаги: C, DC, Z.
SUBWF - Вычесть W из f.
Синтаксис: [label] SUBWF f, d.
Операнды: 0£f£127; dÎ [0,1].
Операция: (f) –(W) à (dest).
Изменяемые флаги: C, DC, Z.
SWAPF - Поменять местами полубайты в регистре f.
Синтаксис: [label] SWAPF f, d.
Операнды: 0£f£127.
Операция: (f<3:0>) à (dest<7:4>).
Изменяемые флаги: Нет.
XORLW- Побитное 'исключающее ИЛИ' k и W.
Синтаксис: label] XORLW k.
Операнды: 0£k£255.
Операция: (W).XOR.k à (W).
Изменяемые флаги: Z.
XORWF- Побитное 'исключающее ИЛИ' W и f.
Синтаксис: [label] XORWF f, d.
Операнды: 0£f£127.
Операция: (W).XOR.(f) à (dest).
Изменяемые флаги: Z.
Модуль таймера TMR1
TMR1 - 16-разрядный таймер/счетчик, состоящий из двух 8-разрядных регистров (TMR1H и TMR1L), доступных для чтения и записи. Счет выполняется в спаренных регистрах (TMR1H:TMR1L), инкрементируется их значение от 0000h до FFFFh. При добавлении ещё единицы будет переполнение регистров и в счетчиках будет снова 0000h. При переполнении счетчика устанавливается в '1' бит флага прерывания TMR1IF в регистре PIR1<0>. Само прерывание можно разрешить/запретить установкой/сбросом бита TMR1IE в регистре Р1Е1<0>.
TMR1 может работать в режимах: режим таймера, режим счетчика.
Включается TMR1 установкой бита TMR1ON в ‘1’ (T1CON<0>).
Битом TMR1CS (T1CON<1>) выбирается источник тактовых импульсов.
TMR1 инкрементируется при каждом машинном цикле.
Когда включен генератор тактовых импульсов (T1OSCEN=1), выводы RC1/T1OSI/CCP2 и РС0/T1OSO/TICK1 настроены как входы. Значение битов TRISC<1:0> игнорируется, а чтение данных с этих выводов дает результат '0'.
Управляющие биты TMR1 находятся в регистре T1CON.
Сброс регистров TMR1 (TMR1H, TMR1L). Регистры TMR1H и TMR1L не сбрасываются в 00h при сбросе по включению питания и других видах сброса.
Предделитель TMR1 очищается при записи чисел в регистр TMR1L или TMR1H.
Регистр PIE1 (адрес 8Ch) доступен для чтения и записи, содержит биты разрешения периферийных прерываний. Чтобы разрешить периферийные прерывания необходимо установить в '1' бит PEIE (INTCON<6>).
Регистр INTCON (адрес 0Вh, 8Вh, 10Вh или 18Вh) доступен для чтения и записи, содержит биты разрешений и флаги прерываний: переполнение TMR1; изменения уровня сигнала на выводах PORTB; внешний источник прерываний RB0/INT.
Примечание. Флаги прерываний устанавливаются при возникновении условий прерываний вне зависимости от соответствующих битов разрешения и бита общего разрешения прерываний GIE (INTCON<7>).
Регистр PIR1 доступен для чтения и записи, он содержит флаги прерываний периферийных модулей.
Примечание. Флаги прерываний устанавливаются при возникновении условий прерываний вне зависимости от соответствующих битов разрешения и бита общего разрешения прерываний GIE (INTCON<7>). Программное обеспечение пользователя должно сбрасывать соответствующие флаги при обработке прерываний от периферийных модулей.
Список литературы
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