Некоммерческое акционерное общество
АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ
Кафедра инженерной кибернетики
ЦИФРОВАЯ ТЕХНИКА И МИКРОКОНТРОЛЛЕРЫ
Методические указания
к выполнению лабораторных работ
для студентов всех форм обучения
специальности 050718 - Электроэнергетика
Алматы 2009
СОСТАВИТЕЛИ: А. А. Копесбаева, В. М. Тарасов. Цифровая техника и микроконтроллеры. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальности 050718 - Электроэнергетика - Алматы: АИЭС, 2009. – 40с.
Представлены методические указания к выполнению лабораторных работ по дисциплине «Цифровая техника и микроконтроллеры». Во время лабораторных работ студенты осваивают применение микроконтроллеров и технологию разработки для них программ на примере PIC16F877.
Современное состояние и развитие технологии в электротехнике требует от специалистов знания микропроцессоров и микроконтроллеров. В настоящее время в составе выпускаемых изделий многих фирм в дальнем и ближнем зарубежье содержатся микроконтроллеры, и область их применения постоянно увеличивается.
Микроконтроллеры широкого назначения выпускаются многочисленными зарубежными фирмами: Motorola, Nec Corporation, Siemens, Microchip и другими.
Для электроэнергетики разработаны специальные комплексы. Применение методов и технических средств обработки информации цифровой вычислительной техникой в релейной защите и автоматике (РЗА) привело к созданию интегрированных комплексов, выполняющих все функции традиционных устройств РЗА и обладающих широкими информационными свойствами и сервисными возможностями, существенно повышающими надежность и эффективность функционирования технических средств автоматического управления электроэнергетическими установками.
Перспективные цифровые микропроцессорные комплексы РЗА созданы в НПФ "Радиус" (г. Москва), НТЦ "Механотроника" (г. С.-Петербург) в виде различных модификаций многофункциональных микропроцессорных устройств РЗА распределительных электрических сетей, типов "Сириус", БРМЗ, БМ АЧР и др.
Совместным предприятием "АББ Реле-Чебоксары" изготавливаются и поставляются на действующие энергетические объекты наиболее перспективные современные микропроцессорные устройства и системы РЗА, управления и сигнализации (РЗАУС), микропроцессорные РЗ серий SPA-100, SPA-300, комплексные устройства РЗА серии SPAC-800, устройства РЗ линий электропередачи, трансформаторов, шин, генераторов и других объектов на базе терминалов RE-500.
Разрабатываются и изготавливаются и другие типы микропроцессорных устройств, позволяющих осуществлять комплексное оснащение электрических станций (ЭС), подстанций (ПС), промышленных предприятий и других объектов всех уровней напряжения от 0,4 кВ устройствами РЗА (в том числе комплексами АСУ ТП). Основанные на последних достижениях информационных техноологий, они полностью отвечают специфическим требованиям энергетики, доступны в обслуживании и легко интегрируются в автоматизированные системы РЗА, управления и контроля подстанций и электрической части станций любого уровня.
Им присущи важные положительные свойства, отсутствующие у аналоговых устройств:
- многофункциональность и малые размеры: одно цифровое измерительное реле заменяет несколько аналоговых;
- дистанционные изменения и проверка установок с пульта управления оператора;
- адаптация к режиму ЭЭС т.е. автоматическая корректировка параметров РЗА при изменении схемы и режима работы ЭЭС;
- непрерывная самодиагностика и высокая аппаратная надежность;
- регистрация и запоминание параметров аварийных режимов;
- дистанционная передача оператору информации о состоянии и срабатываниях устройств РЗА;
- сокращение специального технического обслуживания: периодических проверок настройки и исправности устройств РЗА.
Для обучения студентов цифровой технике и программированию микроконтроллеров в институте имеется учебный микропроцессорный комплект (УМК-7). Помимо обучения языку ассемблер на примере легко программируемого контроллера PIC16F877, студенты знакомятся с внутренней и внешней структурой современных микроконтроллеров, применяемых в оборудовании. Другими словами, комплект предназначен для изучения архитектурных и программных возможностей микропроцессоров.
В данные методические указания входят 10 лабораторных работ на учебном микропроцессорном комплекте УМК-7.
До дня проведения работы студенты должны к ней подготовиться: прочитать описание лабораторной работы и составить программы для своего варианта задания.
Отчет о лабораторной работе должен содержать титульный лист, задание, текст программы с комментариями, заполненную таблицу результатов, контрольные вопросы.
Лабораторная работа должна быть защищена студентом.
Оборудование и программное обеспечение для проведения лабораторных работ: Windows 98 или выше, среда MPLAB, комплект УМК-7.
1 Лабораторная работа 1. Отображение чисел в цифровой технике
Цель работы: приобрести начальные знания в области применения микроконтроллеров и основ цифровой техники.
Микроконтроллеры применяются вместо громоздких релейно-контакторных схем управления оборудованием. По сравнению с ними они имеют меньшие габариты, более надежны, у них меньше энергопотребление, они очень гибкие при настройке, многофункциональные и, в целом, более дешевые.
О преимуществах изделий с микроконтроллерами написано во введении.
У микроконтроллеров имеются выводы для подключения внешних устройств. Информация с этих выводов сохраняется в специализированной области памяти. Они объединены в функциональные группы-регистры называемые PORTA, PORTB, PORTC, PORTD. В порту А имеется 6 выводов, в остальных перечисленных портах по 8 выводов. В лабораторных работах будем использовать, как правило, порт С, иногда порт D. В результате выполнения программы на выводы порта либо будет подаваться напряжение, либо нет. Содержание регистра порта, а также нумерация разрядов порта показана на рисунке 1.1.
|
Наличие напряжения принято обозначать цифрой 1, отсутствие - цифрой 0. Все выводы регистра нумеруются, начиная с нуля справа налево, и называются разрядами или битами. |
Рисунок 1.1- Схема регистра |
К выводам порта присоединяются различные приборы и устройства, управляющие технологическим процессом. С их помощью можно подключить, например, вентилятор, конвейер, насос подачи реагента и т.д. Если на соответствующем выводе порта будет напряжение (обозначаемое цифрой 1), то устройство будет включено. На лабораторных работах мы будем присоединять к выводам микроконтроллера вместо технологического оборудования светодиоды, сигнализирующие о результате работы микроконтроллера. Представленные на рисунке 1.1 набор нулей и единиц формально считают числом в двоичной системе счисления. Положение цифры в числе называют разрядом. Блок из 8 разрядов называют байтом. Перебирая все сочетания нулей и единиц, начиная с 00000000 до 11111111, можем считать, что в байт можно записать 256 чисел от 0 до 255 в нашей десятичной системе счисления.
В микроконтроллере данные и промежуточные результаты запоминаются в двоичной системе в регистрах общего назначения (РОН) оперативного запоминающего устройства. Все регистры в микроконтроллере нумеруются, естественно, также в двоичной системе. Номер регистра называют его адресом. Программисту неудобно работать с двоичными числами, поэтому их представляют в более компактной шестнадцатеричной системе счисления, имеющей 16 цифр. Эта система выбрана из-за очень простого алгоритма перевода чисел в нее из двоичной системы. Системы счислений применяющиеся в цифровой технике представлены в приложении А. Там же приведен алгоритм перевода чисел из двоичной системы в шестнадцатеричную и наоборот.
Обратите внимание, что в десятичной системе прибавление к цифре 9 единицы дает в результате число 10, то есть 9+1=10. Аналогичный результат и в шестнадцатеричной системе F+1=10 или 2F+1=30. То есть в младший разряд записываем цифру 0, в старший переносим 1. В двоичной системе 1+1=10.
С данными в виде двоичных чисел программой выполняются различные математические действия для анализа ситуации на технологической установке. В программе двоичное число записывают в стандартной форме В’01010011’. Шестнадцатеричное число можно записывать двумя способами: h’21’ или 21h.
Все регистры микроконтроллера объединены в 4 группы, называемыми банками, показанными в приложении Б. Банки имеют нумерацию в двоичной системе: 00 – банк ‘0’, 01 – банк ‘1’, 10 – банк ‘2’, 11 – банк ‘3’.
Все существующие регистры и их адреса в шестнадцатеричной системе показаны в приложении Б. Программист для хранения данных может использовать регистры общего назначения (РОН). Остальные регистры имеют специальное функциональное назначение. К регистру или даже к его разрядам можно обратиться по адресу или по имени.
Лабораторная работа 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 |
Т а б л и ц а 1.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 |
Т а б л и ц а 1.3 - По имени регистра и банку определите адрес в форме В и h
Вариант |
1 |
2 |
3 |
4 |
5 |
6 |
Банк |
0 |
1 |
1 |
1 |
1 |
1 |
Имя |
PLC |
FSR |
INTCOM |
STATUS |
TRISB |
INTCOM |
Продолжение таблицы 1.3.
Вариант |
7 |
8 |
9 |
10 |
11 |
12 |
Банк |
1 |
0 |
1 |
0 |
1 |
1 |
Имя |
PLC |
TMPO |
INTCOM |
STATUS |
TRISD |
TRISB |
13 |
14 |
15 |
16 |
17 |
18 |
|
Банк |
1 |
0 |
1 |
0 |
1 |
1 |
Имя |
PLC |
PIR1 |
PIE2 |
PIR2 |
PIE1 |
FSR |
Контрольные вопросы
1. Какими цифрами обозначают наличие и отсутствие напряжения?
2. Что такое основание системы счисления?
3. Какие цифры имеются в двоичной системе?
4. Какие цифры имеются в шестнадцатеричной системе?
5. Сколько будет 4F+1?
6. Расскажите о преимуществах микроконтроллеров.
7. Какие фирмы выпускают изделия с микроконтроллерами?
8. Какие функции выполняют микроконтроллеры?
9. Сколько банков в микроконтроллере PIC?
10. Как записываются адреса регистров?
11. Как можно обратиться в программе к регистру?
2 Лабораторная работа 2. Изучение среды MPLAB и порта С
Цель работы: изучить среду MPLAB, изучить технику управления портами микроконтроллера и инструкции установки отдельных бит в регистрах.
Задания для внеаудиторной подготовки:
- познакомьтесь с описанием УМК-7 и MPLAB по приложению А;
- познакомьтесь по приложению Б с битами RP1 и RP0 (5 и 6 разряды) регистра status. Эти биты определяют номер банка, с регистрами которого будет работать программа;
- познакомьтесь с картой памяти PIC по приложению Б;
- познакомьтесь по приложению Г с инструкциями микроконтроллера PIC, примененными в приведенных ниже программах: CLRF, BSF, MOVLW, MOVWF, GOTO;
- познакомьтесь с регистрами PORTC и TRISC и их размещением в банках. Запомните, что эти регистры находятся в разных банках;
- изучите приведенный ниже образец программы в качестве аналога для написания программы к вашему варианту.
Если в регистре TRISC записаны все нули (регистр очищен), то порт C работает только на вывод. В этом случае подаваемое на внутренние клеммы порта C напряжение (сигнал ‘1’), поступит на выходные клеммы и светодиоды начнут светиться. Однако подаваемое на внешние клеммы напряжение (сигнал ‘1’) не поступит в микроконтроллер. Если записать все единицы в регистр TRISC, то подаваемое на внутренние клеммы порта C напряжение (сигнал ‘1’), не поступит на выходные клеммы и светодиоды не будут светиться. Теперь подаваемое на внешние клеммы напряжение (сигнал ‘1’) поступит в микроконтроллер и его можно использовать в программе. Часто часть разрядов порта С настраивают на ввод и часть на вывод.
Ниже приведен текст программы, зажигающей по очереди справа налево светодиоды по заданному двоичному числу В’01010011’. Инструкция CLRF- Очистить регистр означает, что в регистр будут записаны все нули, т.е. все биты сброшены. Последнее не относится к регистру Status, после очистки он имеет значение 00011111. Исполняемая часть программы обычно начинается с очистки регистра Status. В 5 и 6 разряды записываются нули, что соответствует выбору нулевого банка.
В любой регистр нельзя непосредственно записать какое - либо число (константу). Сначала константу по инструкции MOVLW записывают в регистр-аккумулятор W, затем по инструкции MOVWF переписывают ее в требуемый регистр. В программе задействован регистр TRISC, находящийся в первом банке. Остальные регистры находятся в нулевом банке. После точки с запятой в программе напечатаны комментарии, которые не воспринимаются ассемблером.
Программа 2.1. В программе выполнено последовательное подключение потребителей, подключенных к фидерам 0, 1, 4, 6 с пульта диспетчера. Светодиоды имитируют нагрузки.
include<p16F877.inc> ; Обязательная строка.
org 0 ; Код, следующий за этим выражением,
начинается с нулевого
; адреса электрически программируемого постоянного ;
запоминающего ; устройства (ЭППЗУ).
nop ; Пустая инструкция, необходимая для работы отладчика.
nop
nop
org 05 ; Код, следующий за этим выражением, начинается с 5-го
адреса
; ЭППЗУ (метка START).
START ; Метка начала программы.
CLRF STATUS ; Очищаем регистр status и выбираем банк ‘0’.
BSF STATUS, 5 ; Записав в 5-й разряд 1, выбираем первый банк.
CLRF TRISC ; Обнуляем TRISC и настраиваем PORTC на вывод.
CLRF STATUS ; Возвращаемся в нулевой банк.
LOOP ; Метка для цикла (повторения инструкций).
CLRF PORTC ; Выключаем светодиоды, если они горели.
MOVLW B'00000001' ; Пересылаем в регистр W число В’00000001’.
MOVWF
PORTC ; Пересылаем число из W в PORTC,
зажигаем
; первый светодиод, который подключен к нулевому разряду.
MOVLW B'00000010' ; Пересылаем в регистр W число В’00000010’.
MOVWF
PORTC ; Пересылаем число из W в PORTC,
зажигаем
; второй светодиод, который подключен к первому разряду.
MOVLW B'00010000' ; Пересылаем в регистр W число 01h.
MOVWF PORTC ; Зажигаем светодиоды, переслав значение W.
MOVLW B'01000000' ; Пересылаем в регистр W число 40h.
MOVWF PORTC ; Зажигаем светодиоды.
GOTO LOOP ; Переходим на метку LOOP для повторения.
END ; Конец программы.
На основе образца напишите на бумаге текст для своего варианта.
Т а б л и ц а 2.1 – Варианты заданий
Вариант |
Заданные значения |
Вариант |
Заданные значения |
1 |
00001111 |
6 |
10101010 |
2 |
11110000 |
7 |
01010101 |
3 |
00111100 |
8 |
00110011 |
4 |
11001100 |
9 |
11100010 |
5 |
01001101 |
10 |
00011101 |
Выполнение программы на УМК-7
Запустите MPLAB двойным щелчком мыши по соответствующей иконке на рабочем столе. Напечатайте в окне редактора программу 2.1. При наборе текста программы применяйте регистр букв такой же, как в образце. С первой позиции печатаются метки, с шестой позиции печатаются инструкции.
Сохраните программу с именем, имеющим для вас смысл, с расширением .asm (в примере tut877.asm) в папке program.
Чтобы заставить работать вашу программу, нужно её скомпилировать. Грубо говоря, перевести текст программы в инструкции микроконтроллера в двоичной форме. Для этого необходимо:
- если есть открытый проект, закрыть его командами Project – Close Project в основном меню MPLAB;
- создать новый проект командами Project – New Project;
-
указать папку для размещения нового проекта, и затем ввести имя проекта, такое же, как у программы.
Выполняемые далее действия приводятся для
проекта с именем tut877.pjt. В диалоговом окне New Project (рисунок 2.1) нажмите
кнопку OK.
Должно открыться диалоговое окно редактирования
проекта Edit Project, показанное на рисунке 2.2.
Обратите внимание на строку Development Mode. Она показывает тот Development Mode и тот процессор, с которым работали с последний раз в MPLAB-IDE до вас. Для нас там должна быть строка “MPLAB-ICD Debugger”. Если необходимо изменить этот параметр, нажмите кнопку Change. Откроется диалоговое окно Development Mode, показанное на рисунке 2.3. Выберите строку MPLAB-ICD Debugger. Далее нажмите кнопки Apply и OK и вы вернетесь в окно Edit Project.
Выделите строку tut877 [.hex] в области Project Files в диалоговом окне Edit Project и затем нажмите кнопку Add Node. В диалоговом окне Add Node выберите файл tut877.asm и затем нажмите кнопку OK. Вы вновь вернетесь в окно Edit Project.
Ассемблер MPASM всегда создает файл с расширением .hex, скомпилированный из asm-файла с тем же именем, что и исходный asm-файл. Менеджер проекта (Project Manager) создаст файл tut877.hex, при формировании проекта (Built Project). Нажав OK, закройте окно Edit Project.
Готовый проект следует сохранить командами Project - Save Project. Теперь командами Project - Make Project выполните компиляцию приложения, используя MPASM. Окно Build Results покажет результат компиляции и отметит ошибки, если они есть. Если в последней строке будет написана фраза “Build completed successfully”, как показано на рисунке 2.4, то компиляция проведена успешно. В случае неудачи щелкните 2 раза в окне Build Results на строку, в которой описана ошибка, и вы вернетесь в текст программы на строку, содержащую ошибку. Исправьте текст программы. Повторно выполните команды Project - Save Project и Project - Make Project для компиляции. Устраните таким образом все ошибки.
Устранив все ошибки, запрограммируйте кристалл, нажав в окне MPLAB-ICD кнопку Program (рисунок 2.5). Если это окно отсутствует, закройте и снова откройте созданный вами проект. Если эти действия не помогут, исправьте установки Development Mode командами Options - Development Mode – MPLAB ICD Debugger. Программирование кристалла может занять пару минут, в течение которых в поле Status показывается процесс выполнения. После завершения программирования в поле Status отображается сообщение “Waiting for user command” - “Ожидание команды пользователя”.
Запустите на выполнение программу в пошаговом режиме командами Debug – Run - Step. Следите за результатами выполнения инструкций по светодиодам.
Если пошаговое выполнение программы застряло на какой - либо строке и не продолжается дальше, выполните команду Debug – Clear all points.
Остановите выполнение программы командами Run - Reset. (Команда Halt просто приостанавливает выполнение программы и после команд Debug – Run- Step выполнение программы продолжится с места останова).
При необходимости исправьте программу и включите ее в отчет по лабораторной работе. Можно скопировать текст в Блокнот.
Повторно запустите программу в автоматическом режиме. Объясните, почему светятся все светодиоды одновременно, а не мигают по очереди.
Вывод. Можно управлять выводом информации в PORTC цифровым методом. Выводимая информация может управлять технологическим процессом, включая разные механизмы, подключенные к порту C.
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа.
2. Можно ли на вход микроконтроллера подавать аналоговый сигнал?
3. Что выполняет инструкция CLRF?
4. Что выполняет инструкция MOVLW?
5. Что выполняет инструкция MOVWF?
6. Что выполняет инструкция MOVF?
7. Что выполняет инструкция BSF?
8. Что выполняет инструкция GOTO?
9. Какие внешние устройства расположены на панели стенда?
10. Объясните, почему светятся все светодиоды одновременно в автоматическом режиме выполнения программы?
3 Лабораторная работа 3. Настройка порта С. Символьные имена
Цель работы: применение и выполнение поразрядной настройки регистра PORTC на ввод или вывод. Применение в программе символьных имен.
Символьные имена устраняют двусмысленность и облегчают чтение текста программы. Ассемблер, когда встретит символьное имя, вместо него подставит значение, присвоенное символьному имени. Это может быть число или адрес регистра.
Настройка части разрядов порта С на ввод, а остальных разрядов на вывод, применяется тогда, когда из порта С по части каналов посылаются управляющие сигналы на оборудование, а по другим каналом происходит сбор данных о протекании технологического процесса. Кроме того, мы можем в зависимости от ситуации запретить управление некоторыми механизмами, например, при аварии.
Инструкция BSF может применяться при необходимости включения оборудования, управляемого сигналом данного разряда порта С. Например, включение тепловой завесы при открывании двери в холодную погоду, несмотря на достаточно высокую температуру в помещении.
Изучите программу 3.1. В этой программе выполнена настройка четырех младших разрядов регистра PORTС на вывод, остальных - на ввод. Будем проверять прохождение на вывод бит числа В’01010011’. Программа решает задачу запрета подключения оборудования по фидерам 2 и 6, оставляя возможность подключения фидеров 0 и 1.
include <p16F877.inc>
R0 EQU h'01' ; R0 - символьное имя, его значение 01h.
R1 EQU h'02' ; R1 - символьное имя, его значение 02h.
R2 EQU h'10' ; R2 - символьное имя, его значение 10h.
R3 EQU h'40' ; R3 - символьное имя, его значение 40h.
; Начало исполняемой части программы.
org 0x000 ; Выполнение программы начинается с нулевого адреса.
nop
nop
nop
org 05h ; Продолжить с адреса 5.
START ; Метка начала программы.
CLRF STATUS ; Очистка регистра STATUS.
BSF STATUS, 5 ; Записать 1 в бит RP0 и выбирать банк ‘1’.
MOVLW B’11110000’; Значение, используемое для настройки порта С.
MOVWF TRISC ; Настройка четырех младших разрядов порта С
; на вывод, а четырех старших
разрядов на ввод.
CLRF STATUS ; Возвращаемся в нулевой банк.
LOOP ; Метка для повторения цикла.
CLRF PORTС ; Очистить порт С, т.е. потушить светодиоды.
MOVLW R0 ; Записать в W число 01h.
MOVWF PORTС ; Записать в порт С число 01h.
MOVLW R1 ; Записать в W число 02h..
MOVWF PORTС ; Записать его в порт С.
MOVLW R2 ; Записать в W число 10h.
MOVWF PORTС ; Записать в порт С число 10h.
MOVLW R3 ; Записать в W число 40h.
MOVWF PORTС ; Записать в порт С число 40h.
BSF STATUS, 5 ; Перейти в банк ‘1’.
BCF TRISC, 6 ; 7-й разряд порта С настраиваем на вывод.
BСF STATUS, 5 ; Перейти в банк ‘0’.
; Светится ли 7-й светодиод?
GOTO LOOP ; Вернуться на метку LOOP для повторения.
END
Выполнение проекта
Откройте предыдущий свой проект, измените, приведите текст программы в соответствие с программой 3.1. Сохраните эту программу, не изменяя имени файла. Используя команды Save Project и Make Project, создайте и сохраните проект, как описано во 2-й лабораторной работе, не меняя его имени.
Внимание! В дальнейших лабораторных работах меняйте только текст программы, не меняя имени файла и проекта.
Когда в разряд записана единица, часто говорят: бит установлен, если записан нуль – говорят бит сброшен.
Запрограммируйте кристалл и запустите программу в пошаговом режиме командами Debug – Run - Step.
Сопоставьте результат работы программы с таблицей 3.1.
Т а б л и ц а 3.1 – Таблица результатов
Число в TRISC для настройки порта С |
Пересылаемая в порт С константа |
Выходное число в порт С |
B’11110000’ |
B’00000001’ |
B’00000001’ |
B’11110000’ |
B’00000010’ |
B’00000010’ |
B’11110000’ |
B’00010000’ |
B’00000000’ |
B’11110000’ |
B’01000000’ |
B’00000000’ |
B’10110000’ |
B’01000000’ |
B’01000000’ |
Если все правильно, измените программу и проект согласно заданию в таблице 3.2. Запустите его и заполните таблицу результатов.
Т а б л и ц а 3.2 - Варианты заданий
Вариант |
Константа настройки порта С на ввод/вывод |
Число, пересылае-мое в |
Вариант |
Константа настройки порта С на ввод/вывод |
Число, пересылае-мое в |
1 |
00111100 |
00001111 |
6 |
11110000 |
10101010 |
2 |
01100111 |
11110000 |
7 |
11000011 |
01010101 |
3 |
00011110 |
00111100 |
8 |
11100001 |
00110011 |
4 |
00111011 |
11111111 |
9 |
11100111 |
00111111 |
5 |
00011101 |
10101010 |
10 |
01110011 |
11000111 |
П р и м е ч а н и е - Напишите программу для настройки порта С на ввод/вывод и пересылки в него заданного числа. |
Исследуйте состояние регистров PORTC и W, для этого создайте окно наблюдения командами Window – Watch Window – New Watch Window. Напечатайте в поле редактирования символ “P” и из предложенного программой списка выберите строку PORTC. Нажмите кнопку Properties и выберите двоичный формат вывода чисел. Далее нажмите кнопку Add. В результате будет создано новое окно наблюдения с именем Watch1. Теперь напечатайте в поле редактирования ‘W’ и из предложенного списка выберите W, нажмите на кнопку Add. Повторите все для регистра Status и затем закройте окно кнопкой Close. Второй раз нажимать на кнопку Properties не требуется, если не надо менять формат вывода числа.
Повторите программу в пошаговом режиме и запишите изменения состояния регистров Status, PORTC и W, показываемые в созданном окне Watch1, на бумаге рядом с инструкциями программы.
Внимание! Далее во всех лабораторных работах создавайте окно наблюдения за всеми регистрами, примененными в программе.
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа
2. Зачем и как в проекте нужно создавать окно наблюдения?
3. Назначение кнопки Properties при создании окна наблюдения.
4. Как инициализировать разряды регистра PORTC на ввод и вывод?
5. Назначение инструкции BSF.
6. Назначение инструкции BCF.
7. Как, без инструкции CLRF STATUS, перейти в нулевой банк?
8. Расскажите о символьных именах.
9. Поясните выражения «бит очищен» и «бит установлен».
4 Лабораторная работа 4. Сложение, вычитание. Логика
Цель работы: изучение инструкций ADDWF, ANDWF, IORWF, XORWF, SUBWF. Выполнение сложения, вычитания, применение логических функций.
Изучите формат инструкций ADDWF, SUBWF, ANDWF, IORWF, XORWF по приложению Г.
Операции сложения и вычитания применяются, например, для автоматизации учета количества автомашин на объекте, которые могут свободно въезжать и выезжать с территории через ворота.
В таблице 4.1 представлены логические функции, их таблицы истинности, условные обозначения и интерпретация на электрической схеме. Все логические операции выполняются поразрядно.
Логическая функция ‘ИЛИ’ (‘OR’) применяется для включения оборудования любой из двух кнопок. Например, запуск обогревателя кнопками, расположенными в разных местах помещения.
Логическая функция ‘И’ (‘AND’) применяется для включения оборудования только в том случае, если включены оба контакта. Например, освещение в помещении автоматически включается при низкой освещенности и наличия в нем людей.
Логическая функция ‘Исключительно ИЛИ’ (‘XOR’) применяется для включения оборудования только в тех случаях, когда переключатели Х1 и Х2 находятся в разных положениях, причем оба переключателя имеют два контакта: нормально замкнутый и нормально разомкнутый. С помощью схемы по этой функции можно управлять, например, освещением длинного тоннеля. С любого конца тоннеля можно включить или выключить освещение.
Таблица 4.1 –Логические функции Y=f(X1,X2)
Инструк- |
Таблица истинности |
Условное обозначение |
Интерпретация на электрической схеме |
||
Х1 |
Х2 |
Y |
|||
IORWF
|
0 0 1 1 |
0 1 0 1 |
0 1 1 1 |
Х1Y
|
Х1
Х2
При замыкании любого контакта в цепи будет ток |
ANDWF Функция ИЛИ
|
0 0 1 1 |
0 1 0 1 |
0 0 0 1 |
Х1Y
|
X1 X2
Ток в цепи будет только при замыкании обоих контактов |
XORWF
Функция
Исключи-
|
0 0 1 1 |
0 1 0 1 |
0 1 1 0 |
Х1Y Х2 |
X1 X2
X2 X1
Ток в цепи будет только тогда, когда переключатели X1 и X2 будут в разном положении |
Изучите программу 4.1, которая выводит результаты работы разных логических функций с двумя константами FAh и 02h в порт С.
Внимание! Перед шестнадцатеричным числом, начинающимся с буквы, например, FAh, в тексте программы пишется нуль. Это делается для того, чтобы отличить число от символьного имени или инструкции, которые всегда начинаются с буквы.
Программа 4.1 выполняет контроль наличия оборудования на складе при его поступлении и выдачи инструкциями SUBWF и ADDWF. С помощью логических функций выполняется запрет или разрешение подачи энергии по различным фидерам.
include <p16F877.inc>
R1 EQU h’20’ ; R1 - символьное имя регистра по адресу 20h.
R2 EQU h’24’ ; R2 - символьное имя регистра по адресу 24h.
org 0x000
nop
nop
nop
org 05h
START ; Начало исполняемой части программы.
CLRF STATUS ; Очистка регистра, выбор банка 0.
BSF STATUS, 5 ; Выбор банка ‘1’.
CLRF TRISC ; Настроить все биты PORTC на вывод.
CLRF STATUS ; Возврат в банк ‘0’.
CLRF PORTC ; Записать в PORTC нули (потушить светодиоды).
MOVLW B‘11111010’ ; Запись константы FAh в W.
MOVWF R2 ; Запись константы FAh в регистр R2.
MOVLW B‘00000010’ ; Запись константы 02h в W.
MOVWF R1 ; Запись константы 02h в регистр R1.
SUBWF R2, 0 ; Вычитание R2 - W (R1). Результат оставляем в W.
MOVWF PORTC ; Загрузить содержимое W в регистр PORTС.
MOVF R2, 0 ; Запись константы FAh в регистр W.
ADDWF R1, 0 ; Сложение R1+ W (R2). Результат оставляем в W.
MOVWF PORTC ; Переслать содержимое W в регистр PORTС
MOVF R2, 0 ; Запись константы FAh в регистр W из R2.
ANDWF R1, 0 ; Логическое умножение R1 AND W(R2), результат ; оставляем в W.
MOVWF PORTC ; Загрузить содержимое W в порт С.
END ; Конец программы.
Введите описанную программу в микроконтроллер.
Внимание! Не забывайте создавать окно наблюдения для всех применяемых в программе регистров в необходимом формате чисел.
Таблица 4.1- Результаты работы программы
Двоичные числа на входе |
Инструкция |
Числа на выходе в порте С |
||
R1 |
R2 |
Форма b |
Форма h |
|
11111010 |
00000010 |
ADDWF (R1+W(R2)) |
11111100 |
FС |
11111010 |
00000010 |
SUBWF (R1-W(R2)) |
11111000 |
F8 |
11111010 |
00000010 |
ANDWF(R1 and W(R2) |
00000010 |
02 |
11111010 |
00000010 |
IORWF (R1 or W(R2)) |
11111010 |
FA |
11111010 |
00000010 |
XORWF (R1 xor W(R2)) |
11111000 |
F8 |
Подготовьте программу для ввода в микроконтроллер по заданию из таблицы 4.2, выполняющую указанные в таблице 4.1 инструкции.
Т а б л и ц а 4.2 – Варианты заданий
Вари- |
Число R1 |
Число R2 |
Вари- |
Число R1 |
Число R2 |
1 |
00000001 |
00010000 |
6 |
00000110 |
01100000 |
2 |
00000010 |
00100000 |
7 |
00000111 |
01110000 |
3 |
00000011 |
00110000 |
8 |
00001000 |
10000000 |
4 |
00000100 |
01000000 |
9 |
00001001 |
10010000 |
5 |
00000101 |
01010000 |
10 |
00001010 |
10100000 |
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа
2. Что выполняет инструкция ADDWF? Когда она применяется?
3. Что выполнят инструкция SUBWF? Когда она применяется?
4. Что выполняет инструкция ANDWF? Когда она применяется?
5. Что выполняет инструкция IORWF? Когда она применяется?
6. Что выполняет инструкция XORWF? Когда она применяется?
7. Приведите инструкцию установки бита. Когда она применяется?
8. Приведите инструкцию сброса бита. Когда она применяется?
5 Лабораторная работа 5. Операции преобразования чисел
Цель работы: изучение и применение операций преобразования чисел с помощью инструкций BCF, BSF, COMF, SWAPF, RRF, RLF.
Инструкция BCF может применяться при необходимости выключения оборудования управляемого сигналом данного разряда порта С. Например, выключение тепловой завесы при открывании двери в теплую погоду.
Операция инверсии COM может применяться для одновременного изменения управляющих сигналов через определенные промежутки времени.
Операция обмена полубайтами SWAP может применяться для изменения параметров пары однотипного оборудования по очереди.
Инструкции сдвига (RRF, RLF) используются при выполнении операций умножения и деления, при последовательной передаче данных нескольким объектам и для других целей. Они могут применяться при управлении протяженным оборудованием. Например, при окрашивании, охлаждении или нагреве деталей во время их движения на конвейере.
При сдвиге во всех случаях бит, сдвигаемый из регистра, записывается в бит CARRY регистра STATUS, а бит из CARRY записывается в другой конец регистра. При сдвиге налево бит из CARRY записывается в младший бит регистра, а при сдвиге вправо - в старший бит.
Во фрагменте программы 5.1 показано применение операций инверсии, очистки бита, обмена полубайтами и сдвига вправо. Назначение операций описано выше. Предполагается, что порт С настроен на вывод. Разберитесь зачем в бит С регистра status был записан нуль перед сдвигом вправо.
Фрагмент программы 5.1.
MOVLW B'11110000' ; Запись константы в аккумулятор W.
MOVWF PORTC ; Копирование константы из W в PORTC.
COMF PORTC, 1 ; Инвертирование порта С.
MOVWF PORTC ; Копирование константы из W в порт С.
BCF PORTC, 7 ; Сброс седьмого бита порта С.
MOVWF PORTC ; Копирование константы из W в порт С.
SWAPF PORTC, 1 ; Обмен полубайтами порта С.
BCF STATUS, 0 ; Запись нуля в бит С регистра status для ; правильного выполнения сдвига.
MOVWF PORTC ; Копирование константы из W в порт С.
RRF PORTC, 1 ; Сдвиг вправо. Результат записываем в порт С.
RRF PORTC, 1 ; Сдвиг вправо. Результат записываем в порт С.
RRF PORTC, 1 ; Сдвиг вправо. Результат записываем в порт С.
Выполнение лабораторной работы на УМК-7
Оформите фрагмент 5.1 как программу и введите ее в микроконтроллер.
Внимание! Не забывайте создавать окно наблюдения для всех регистров в необходимом формате чисел.
Сравните полученные результаты с данными в таблице 5.1.
Таблица 5.1- Результаты работы инструкций
Числа на входе |
Инструкция |
Числа на выходе в порте С |
||
Форма b |
Форма h |
Форма b |
Форма h |
|
11110000 |
F0 |
COMF |
00001111 |
0F |
11110000 |
F0 |
BCF (7-й бит) |
01110000 |
70 |
11110000 |
F0 |
BSF (3-й бит) |
11111000 |
F8 |
11110000 |
F0 |
SWAP |
00001111 |
0F |
11110000 11100001 11000011 |
F0 E1 С2 |
RLF RLF RLF |
11100001 11000011 10000111 |
E1 С2 87 |
11110000 01111000 00111100 |
F0 78 3C |
RRF RRF RRF |
01111000 00111100 00011110 |
78 3C 1E |
11110000 |
F0 |
BCF (7-й бит) |
01110000 |
70 |
11110000 |
F0 |
BSF (1-й бит) |
11110010 |
72 |
Т а б л и ц а 5.2 – Варианты заданий
Варианты |
Заданные значения входного числа |
Выключе-ние бита |
Включе-ние бита |
Варианты |
Заданные значения входного числа |
Выключе-ние бита |
Включе-ние бита |
1 |
12 |
1 |
0 |
6 |
67 |
2 |
3 |
2 |
23 |
1 |
2 |
7 |
78 |
3 |
0 |
3 |
34 |
2 |
3 |
8 |
89 |
3 |
1 |
4 |
45 |
1 |
2 |
9 |
9А |
1 |
2 |
5 |
56 |
2 |
3 |
10 |
АВ |
3 |
2 |
Подготовьте программу для ввода в микроконтроллер по заданию из таблицы 5.2, в которой выполняются указанные ниже действия:
а) напишите строки, использующую инверсию, так, чтобы светодиоды, подключенные к регистру PORTC, зажигались на ‘0’ и не зажигались на ‘1’, записанные в разрядах исходного числа;
б) напишите строки, которые при любом исходном числе выполняют:
1) выключение заданного светодиода, используя инструкцию BCF;
2) зажигают заданный светодиод, используя инструкцию BSF;
в) напишите строки, которые меняют полубайты местами;
г) напишите строки, которые преобразуют исходные числа c помощью операций сдвига. Сдвиг выполните три раза.
Запустите подготовленную по заданию 5.2 программу. Результаты работы всех операций с числами запишите в таблицу 5.1.
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа.
2. Почему для записи чисел использованы адреса начиная с 20h?
3. Приведите инструкцию установки бита. Когда она применяется?
4. Приведите инструкцию сброса бита. Когда она применяется?
5. Как происходит сдвиг вправо (влево). Какой бит регистра status меняется при выполнении операции сдвига?
6. Расскажите о применении операции сдвига.
7. Расскажите об операции «инверсия» и ее применении.
8. Расскажите об операции «обмен полубайтами» и ее применении.
6 Лабораторная работа 6. Сравнение чисел
Цель работы: использование флагов регистра status для сравнения чисел. Изучение инструкций условных переходов BTFSC и BTFSS.
Инструкции условных переходов BTFSC и BTFSS проверяют состояние заданного бита в любом регистре и в зависимости от результата, пропускают или не пропускают следующую инструкцию программы. Инструкция BTFSC пропускает следующую инструкцию, если заданный бит сброшен. Инструкция BTFSS пропускает следующую инструкцию, если заданный бит установлен. На основе этого создается передача управления в другое место программы и организация циклов.
Использование бита CARRY (C)
BTFSS STATUS, C |
Если в бите С установлена единица, то пропускается следующая инструкция программы GOTO МЕТКА и сразу выполняется инструкция MOVWF R2 |
GOTO METKA MOVWF R2 |
Если бит C сброшен, то выполняется следующая инструкция программы GOTO METKA |
Использование бита ZERO (Z)
BTFSS STATUS, Z |
Если в бите Z установлена единица, то пропускается следующая инструкция программы MOVF R2 и сразу выполняется инструкция MOVWF PORTC |
MOVF R2, 0 MOVWF PORTC |
Если бит Z сброшен, то выполняется следующая инструкция программы MOVF R2, 0 |
В реальных программах вместо указанных инструкций пишутся инструкции, согласно разработанному алгоритму.
В ассемблере отсутствуют инструкции сравнения чисел, поэтому, чтобы определить, какое из чисел больше (меньше), применяют следующий алгоритм:
1. Выполняют вычитание чисел. При этом в зависимости от результата, изменяются флаги регистра status, см. таблицу 6.1.
2. Далее применяют инструкции условных переходов.
Т а б л и ц а 6.1 – Значения флагов регистра status при вычитании
Соотношения значений в рабочем регистре W и регистре общего назначения (UMENSH) |
Значения флагов status |
||
Z |
DC |
C |
|
UMENSH>W (положительный результат) |
0 |
1 |
1 |
UMENSH<W (отрицательный результат) |
0 |
0 |
0 |
UMENSH=W (нулевой результат) |
1 |
1 |
1 |
П р и м е ч а н и е – В регистр UMENSH помещается уменьшаемое |
Задача. Две установки потребляют разное количество электроэнергии. Требуется определить, энергопотребление меньшей установки. Решение приведено во фрагменте 6.1. В нем используется значение бита С для вывода меньшего числа на светодиоды.
Фрагмент 6.1.
MOVLW h’4С’ ; h’4С’à W
MOVWF R1 ; h’4С’à R1
MOVWF UMENSH ;W àUMENSH
MOVLW h’3С’ ; h’3С’àW
MOVWF R2 ; W à R2
SUBWF UMENSH, 1 ; UMENSH=
; UMENSH – W=
; = R1 – R2
BTFSS STATUS, C ; C = 1?
MOVF R1, 0 ; R1 à W
MOVWF PORTC ; W à PORTC
Выполните проект по 6.1, результаты сравните с таблицей 6.2.
Таблица 6.2 - Результаты сравнения чисел
Числа на входе |
Алгоритм |
Числа на выходе |
||
R2 |
R1 |
Форма b |
Форма h |
|
00111100 |
01001100 |
Сравнение чисел и вывод меньшего числа |
01001100 |
4С |
00111100 |
00111100 |
Определение равенства чисел |
00000000 |
00 |
После проверки правильности результата работы программы измените ее по заданию из таблицы 6.3. В программе должны использоваться значения флагов из таблицы 6.1, и она должна выполнять следующие действия:
- сравнение чисел, расположенных в разных регистрах. Большее число выводится на светодиоды;
- сравнение одинаковых чисел R1 и R1. Если числа равны в порт с выводится 1 в младшем разряде.
При написании программы используйте блок-схему на рисунке 6.1.
Рекомендация. При написании программы создайте символьные переменные для хранения заданных чисел.
Т а б л и ц а 6.3 - Варианты заданий
Вари- |
Число R1 |
Число R2 |
Вари- |
Число R1 |
Число R2 |
1 |
00111100 |
00001111 |
6 |
11100001 |
00110011 |
2 |
01100111 |
11110000 |
7 |
11001111 |
00111011 |
3 |
00011110 |
00111100 |
8 |
10010110 |
01101010 |
4 |
11110000 |
10101010 |
9 |
01110110 |
00101011 |
5 |
11000011 |
01010101 |
10 |
01100001 |
00111011 |
Контрольные вопросы
1. Какие разряды регистра status меняют свои значения при логических и математических операциях?
2. Расскажите какую реальную задачу решает ваша программа.
3. Поясните инструкцию условного перехода BTFSC.
4. Поясните инструкцию условного перехода BTFSS.
5. Какой логической операцией можно очистить несколько разрядов?
6. Какой логической операцией можно установить несколько разрядов?
7. Какой логической операцией можно определить равенство чисел?
8. В каких случаях флаг Z равен единице при вычитании?
9. В каких случаях флаг С равен единице при вычитании?
10. Когда флаги Z и С регистра STATUS одновременно равны нулю?
7 Лабораторная работа 7. Суммирование значений массива
Цель работы: использование косвенной адресации при создании программы суммирования массива.
Суммирование применяется для различных целей: подсчета количества поступивших изделий, определение средней температуры за расчетный период времени и других.
Суммирование на языках высокого уровня осуществляется с помощью циклов с постусловием или с предусловием. Однако в составе инструкций микроконтроллера нет инструкций циклов с условием, поэтому циклические структуры организуются с помощью операторов условий совместно с оператором перехода.
Организация программ с косвенной адресацией для суммирования приведена во фрагменте 7.1. Регистр FSR хранит адрес ячейки, к которой происходит обращение через имя формально существующего регистра INDF. Инструкция INCF увеличивает значение регистра на единицу.
Задача. В массив записано потребление энергии по месяцам. Требуется определить суммарный расход энергии за указанный период.
Фрагмент программы 7.1 предназначен для сложения массива чисел, расположенных в регистрах по адресам 4Сh…4Fh. В программе для проверки окончания массива используется адрес следующего регистра 50h.
Фрагмент 7.1. Суммирование массива.
REG1 EQU h’4C’ ; Первый регистр массива.
…………. ; Во все регистры массива запишем далее число 11.
MOVLW REG1 ;
Запись адреса первого регистра массива
; с символьным именем REG1 в регистр W.
MOVWF FSR ; Запись в регистр FSR адреса первого регистра массива.
CLRF W ; Очистка рабочего регистра W перед суммированием.
NEXT ; Метка для организации цикла.
ADDWF
INDF, 0 ; Сложение значения регистра W
и регистра, адрес
; которого записан в регистре
FSR.
; с сохранением результата в рабочем регистре W.
INCF FSR, 1 ; Увеличение значения адреса в FSR на единицу.
BTFSS FSR, 4 ; Проверка – выполнено? Дошли до адреса 50h?
GOTO NEXT ; Если нет, то переходим на метку NEXT,
MOVWF PORTC ; если да, то выводим сумму на светодиоды.
Чтобы определить в каком бите следует проверять появление ‘1’, рекомендуется все адреса регистров записать в двоичной форме в таблицу 7.1.
Т а б л и ц а 7.1 - Адреса
Форма ‘h’ |
Форма ‘b’ |
4D |
01001101 |
4E |
01001110 |
4F |
01001111 |
50 |
01010000 |
Результаты работы программы записаны в таблице 7.2.
Аналогично пишется программа для очистки массива информации в оперативной памяти.
Используя приведенный фрагмент, подготовьте программу по варианту из таблицы 7.3, выполняющую сложение указанных регистров. Результаты занесите в таблицу 7.2.
Т а б л и ц а 7.2– Результаты суммирования массива
Вариант |
Адрес регистра массива, указываемый в FSR |
Число в регистре массива |
Сумма в регистре W |
||
Форма h |
Форма В |
Форма h |
Форма В |
||
11 |
4C |
01001100 |
0Bh |
0Bh |
00001011 |
11 |
4D |
01001101 |
0Bh |
16h |
00010110 |
11 |
4E |
01001110 |
0Bh |
21h |
00100001 |
11 |
4F |
01001111 |
0Bh |
2Ch |
00101100 |
Т а б л и ц а 7.3 – Варианты заданий
Вариант |
Адреса регистров массивов |
Вариант |
Адреса регистров массивов |
|
1 |
20h - 23h |
6 |
34h - 37h |
|
2 |
24h - 27h |
7 |
40h - 43h |
|
3 |
28h -2Bh |
8 |
44h - 47h |
|
4 |
2Ch -2Fh |
9 |
54h - 57h |
|
5 |
30h -33h |
10 |
60h – 63h |
|
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа
2. Какие разряды регистра status меняют свои значения при логических и математических операциях?
3. Поясните инструкцию условного перехода BTFSC.
4. Поясните инструкцию условного перехода BTFSS.
5. Какую функцию используют, чтобы очистить один разряд?
6. Какую логическую операцию надо использовать, чтобы установить бит в одном разряде?
7. Когда флаг Z регистра STATUS обнуляется?
8. Когда флаг C регистра STATUS обнуляется?
9. Когда флаги Z и С регистра STATUS одновременно равны нулю?
10. С какой целью подсчитывают сумму чисел в массиве?
8 Лабораторная работа 8. Маскирование
Цель работы: изучение инструкций маскирования. Изучение программных способов маскирования данных.
При маскировании выполняется побитные логические операции исходного числа и маски с целью одновременного изменения нескольких разрядов исходного числа или проверки равенства чисел. Изменение значений нескольких разрядов применяется для тех же целей, которые описаны в предыдущих лабораторных работах при применении инструкций BSF, BCF, изменения значений регистра TRISC и так далее.
Правила маскирования с помощью логических функций:
- логическое умножение (AND) очищает те разряды исходного числа, которые в маске имеют значение нуль;
- логическое сложение (OR) устанавливает в те разряды исходного числа 1, в которых в маске записана единица;
- логическое «исключающее ИЛИ» (XOR) записывает в те биты исходного числа, которые в маске имеют совпадающее значение, нули. Если биты в маске и в исходном числе разные, то записывается единица. Функция часто применяется для определения равенства исходного числа числу, записанному в маске. Эта функция может потребоваться при определении заданной температуры при нагревании детали или определении достигнутого заданного количества изделий при их пересчете.
Примеры результатов маскирования приведены в таблице 8.1.
Т а б л и ц а 8.1 –Применение масок и проверка на равенство
Объекты |
Операция |
|||
OR (установка бит) |
AND (очистка бит) |
XOR
|
XOR
|
|
Число |
10101010 |
10101010 |
10101010 |
10101010 |
Маска |
11110000 |
11110000 |
11110000 |
10101010 |
Результат |
11111010 |
10100000 |
01011010 |
00000000 |
Решение задачи запрета подачи энергии по некоторым фидерам или разрешение подачи может быть выполнено с помощью маскирования с применением логических функций AND и OR. Проверка равенства температуры заданному значению – с помощью логической операции XOR.
Изучите приемы маскирования с помощью логических функций, по фрагментам 8.1, 8.2, 8.3.
Фрагмент 8.1. Установка четырех бит путем логического сложения.
MOVLW B’10101010’ ; Загрузить константу ААh в регистр W.
MOVWF PORTC ; Переслать константу в порт С.
MOVLW B’11110000’ ; Установить маску в регистр W.
IORWF PORTC, 1 ; Установить биты в PORTC с 4 по 7 разряды.
Фрагмент 8.2. Сброс четырех бит путем логического умножения.
MOVLW B’10101010’ ; Загрузить константу ААh в регистр W.
MOVWF PORTC ; Переслать константу в порт С.
MOVLW B’11110000’ ; Установить маску в регистре W.
ANDWF PORTC, 1 ; Очистить биты в PORTC с 0 по 3 разряды.
Фрагмент 8.3. Процедура определения равенства чисел.
MOVLW 0ААh ; Загрузить ААh в регистр W.
MOVWF REG1 ; Загрузить ААh из W в REG1 .
XORWF REG1, 0 ; Применяем
логическую операцию и
; результат записываем в W.
MOVWF PORTC ; Проверяем
светодиодами результат в порте С,
; светодиоды не должны
светиться.
Подготовьте программу, выполняющую маскирование для варианта из таблицы 8.2. Запишите результаты в таблицу 8.1.
Не забудьте создать окно наблюдения за значениями всех регистров.
Т а б л и ц а 8.2 – Варианты заданий
Вариант |
Число |
Маска |
Вариант |
Число |
Маска |
1 |
10110011 |
11000001 |
6 |
00111001 |
11100110 |
2 |
10011111 |
00110010 |
7 |
11011100 |
01101100 |
3 |
10101001 |
01110011 |
8 |
10001110 |
01001111 |
4 |
01110111 |
01010100 |
9 |
00111001 |
00110001 |
5 |
01101101 |
10100101 |
10 |
01110101 |
10010111 |
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа
2. Какой логической функцией очищают определенные разряды числа?
3. Какой логической функцией устанавливают в разряды единицы?
4. Какой логической функцией определяют равенство чисел?
5. Какие способы адресации вы знаете?
6. Как при косвенной адресации устанавливается номер банка?
7. С какой целью применяют логическую операцию ИЛИ?
8. С какой целью применяют логическую операцию И?
9. Зачем применяют логическую операцию Исключительно ИЛИ?
10. С какой целью сравнивают числа?
9 Лабораторная работа 9. Ввод данных с клавиатуры.
Цель работы: обучение созданию программ для ввода данных с клавиатуры. Закрепление навыков организации условных переходов и инициализации портов.
Клавиатура используется в реальных программах для ввода данных, инструкций, изменения алгоритма вычислений. В лабораторной работе с клавиатуры будем подавать напряжение (сигнал’1’) в порт D, без применения дополнительного источника питания. Сигнал будет обработан микропроцессором, и в PORTC будет выведен результат работы программы.
Изучите принципиальную схему подключения пленочной клавиатуры (рисунок 9.1), изображенную на лицевой панели стенда.
Здесь в виде контактов изображены кнопки клавиатуры. На рисунке 9.2 приведена, в качестве примера, монтажная схема подключения кнопки с цифрой «1» к порту D. Одна клемма кнопки «1» подключена к выводу RD7, а вторая клемма кнопки «1» подключена к выводу RD3. Предположим, что бит RD7 запрограммирован на вывод, а бит RD3 - на ввод. Когда кнопка нажата, с выходного бита RD7 проходит сигнал через кнопку «1» на клемму RD3, запрограммированную на ввод.
При составлении программы 9.1 решалась следующая задача: при поступлении аварийного сигнала с датчика, должна включиться сирена, подключенная к фидеру 7. Кнопка «1» в программе имитирует датчик, светодиод имитирует сирену. Изучите программу, выполняющую описанные действия и демонстрирующую зажигание светодиода, подключенного к выводу RC6.
Фрагмент 9.1. Программирование клавиатуры.
START
CLRF STATUS ; Очищаем регистр STATUS.
BSF STATUS, 5 ; Выбираем банк ‘1’.
MOVLW B’00001111’ ; Константа для инициализации порта D.
MOVWF TRISD ;
Инициализируем биты RD0 - RD3
на ввод,
: остальные клеммы порта D (RD4 - RD7) на вывод.
CLRF TRISC ; Инициализируем PORTC на вывод.
CLRF STATUS ; Выбираем банк ‘0’.
CLRF PORTD ; Очищаем регистр PORTD.
CLRF PORTC ; Очищаем регистр PORTC.
MOVLW B’10000000’
MOVWF PORTD ; Записываем 1 в бит RD7, настроенного на вывод,
; т.е. подаем напряжение на кнопку «1».
VKLUCH
BTFSS PORTD, 3 ; Проверяем появилась ли ‘1’ на клемме RD3,
; настроенной на ввод, то есть нажата
ли кнопка «1»,
GOTO VKLUCH ; если нет, то повторяем проверку
MOVLW B’01000000’ ; если кнопка нажата, то зажигаем светодиод,
; подключенный к клемме RC6.
MOVWF PORTC
END
Напишите программу включения светодиодов кнопкой на основе фрагмента 9.1 для задания из таблицы 9.1. Кнопка зажигания светодиодов должна включать набор светодиодов, имитирующий номер варианта.
Дополните программу 9.1 строками для инвертирования светодиодов при нажатии указанной в задании кнопки. Создайте в программе бесконечный цикл включения и инвертирования светодиодов. Продемонстрируйте работу преподавателю.
Т а б л и ц а 9.1- Варианты заданий
Вариант |
Кнопка зажигания светодиодов |
Кнопка инвертирования светодиодов |
Вариант |
Кнопка зажигания светодиодов |
Кнопка инвертирования светодиодов |
1 |
«0» |
«5» |
6 |
«6» |
«2» |
2 |
«2» |
«6» |
7 |
«7» |
«3» |
3 |
«3» |
«7» |
8 |
«8» |
«4» |
4 |
«4» |
«8» |
9 |
«9» |
«6» |
5 |
«5» |
«1» |
10 |
«1» |
«7» |
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа
2. Назначение клавиатуры.
3. Зачем разряды порта D настраивают на ввод и на вывод?
4. Как инициализируется порт D?
5. Как проверяется нажатие кнопки?
6. Почему каждая кнопка не имеет отдельных клемм?
7. Что выполняет инструкция BTFSS?
8. Что выполняет инструкция BTFSC?
9. Как настроить порт D, чтобы подключить кнопки «1» и «5»?
10. Как настроить порт D, чтобы подключить кнопки «4» и «5»?
10 Лабораторная работа 10. Подпрограммы
Цель работы: закрепление навыков организации условных переходов и инициализации портов. Написание подпрограмм, обращение к ним.
Подпрограммы применяют в тех случаях, когда в нескольких места алгоритма требуется выполнить одинаковые действия. Они часто применяются для выдержки времени, например, при нагреве изделия в течение заданного времени, затем паузы. Далее повторяются вновь нагревание и пауза. Отсчет времени можно организовать с помощью подпрограмм со счетчиками, что и реализовано в приведенной ниже программе, показанной на рисунке 10.1.
Сначала счетчику T_in в подпрограмме задаем какое-то значение В. Затем значение счетчика T_in с тактовой частотой микропроцессора по инструкции DECFSZ уменьшается на 1 и далее проверяется: не стало ли оно нулевым. Если значение счетчика не равно нулю, то выполняется инструкция GOTO M_in, повторяющая цикл. Если счетчик обнулился, программа выходит из цикла уменьшения значения счетчика. Длительность задержки времени (паузы) определяется начальной величиной счетчика T_in. Поскольку микропроцессор работает с высокой частотой, приходится создавать внешний счетчик T_out для увеличения времени задержки.
Подпрограммы пишут после инструкции GOTO$ основной программы Эта инструкция разделяет основную программу и подпрограмму. Последняя всегда начинается с имени, которое должно быть написано без пробела. Заканчивается любая подпрограмма инструкцией возврата RETURN. Подпрограмма из основной программы вызывается по имени инструкцией CALL ИМЯ. После завершения ее работы по инструкции RETURN управление передается в главную программу на следующую инструкцию после инструкции CALL ИМЯ.
Изучите организацию мигания светодиодов с помощью временной задержки за счет циклов на примере программы 10.1. Задавая максимальные значения для счетчиков циклов, определите практически наибольшую задержку.
Следующая программа решет задачу подачи энергии, допустим нагревателям, по заданному временному графику, причем подача энергии выполняется несколько раз.
Программа 10.1. Организация циклов.
include<p16F877.inc>
MIG EQU H'21' ; Адрес счетчика цикла количества миганий.
T_IN EQU H'22' ; Адрес счетчика внутреннего цикла задержки.
T_OUT EQU H'23' ; Адрес счетчика внешнего цикла задержки.
org 0x000 ; Выполнение программы начинается с 0-го адреса.
nop
nop
nop
org 10 ; Начать с адреса 10.
START CLRF STATUS ; Очистить регистр статуса.
BSF STATUS, 5 ; Выбираем банк ‘1’.
CLRF TRISC ; Настраиваем порт С на вывод.
CLRF STATUS ; Выбираем банк ’0’.
MOVLW H'02' ; Записываем в W константу.
MOVWF MIG ; Устанавливаем 2 мигания.
L_MIG ; Метка цикла миганий.
MOVLW H'FF' ; Записываем в W константу.
MOVWF PORTC ; Зажигаем все светодиоды.
CALL TIME_Z1 ; Вызываем подпрограмму задержки.
CLRF PORTC ; Тушим все светодиоды.
CALL TIME_Z2 ; Вызываем подпрограмму задержки.
DECFSZ MIG,1 ; Уменьшаем значение счетчика MIG на 1,
GOTO L_MIG ; если он станет равным нулю пропускаем GOTO.
MOVLW H'FF'
MOVWF PORTC ; Зажигаем светодиоды. Сигнал конца программы.
GOTO $ ; Обозначение окончания главной программы.
; Подпрограмма задержки TIME_Z1.
TIME_Z1
MOVLW H'02'
MOVWF T_OUT ; Устанавливаем значение внешнего счетчика.
M_OUT ; Метка внешнего счетчика.
MOVLW H'03'
MOVWF T_IN ; Устанавливаем значение внутреннего счетчика.
M_IN ; Метка внутреннего счетчика.
DECFSZ T_IN,1 ; Уменьшаем значение счетчика T_IN на 1,
GOTO M_IN ; если оно будет равен нулю пропускаем GOTO.
DECFSZ T_OUT, 1 ; Уменьшаем значение счетчика T_OUT на 1,
GOTO M_OUT ; если оно равно нулю пропускаем GOTO.
RETURN ; Конец подпрограммы TIME_Z1.
END ; Конец текста всей программы.
Примечание – Подпрограмма TIME_Z2 не приведена.
Разработайте программу, включающую и выключающую светодиоды на заданное время, согласно варианту задания из таблицы 10.2.
Т а б л и ц а 10.2 – Варианты заданий
Вариант |
Время включения светодиодов, сек |
Время выключения светодиодов, сек |
Вариант |
Время включения светодиодов, сек |
Время выключения светодиодов, сек |
1 |
0,5 |
5 |
6 |
3 |
2,5 |
2 |
1 |
4,5 |
7 |
3,5 |
2 |
3 |
1,5 |
4 |
8 |
4 |
1,5 |
4 |
2 |
3,5 |
9 |
4,5 |
1 |
5 |
2,5 |
3 |
10 |
5 |
0,5 |
П р и м е ч а н и е – Программа варианта должна зажигать светодиоды, имитирующие номер варианта в двоичной системе |
Введите разработанную программу в микроконтроллер. Установите минимальные значения для счетчиков равные 2. После отладки программы в пошаговом режиме, установите количество миганий равное 10, средние значения счетчиков и запустите ее в автоматическом режиме. Настройте заданное время горения светодиодов и время паузы. Для увеличения времени задержки добавьте в циклы дополнительные бесполезные инструкции. Возможно, что вам потребуется создать два вложенных цикла.
Результаты занесите в таблицу 10.3. Продемонстрируйте работу программы преподавателю.
Т а б л и ц а 10.3– Результаты настройки циклов задержки
Вариант |
Параметры подпрограммы включения светодиодов |
Параметры подпрограммы выключения светодиодов |
||||||
Время включения светодиодов, сек |
Значение счетчика |
Время выключения светодиодов, сек |
Значение счетчика |
|||||
T_1 |
T_2 |
T_3 |
T_4 |
T_5 |
T_6 |
|||
|
|
|
|
|
|
|
|
|
Контрольные вопросы
1. Расскажите какую реальную задачу решает ваша программа?
2. Какие числа нужно записать в счетчики циклов, чтобы получить максимальную и минимальную задержку?
3. Назначение подпрограмм.
4. Цикл, вложенный цикл.
5. Как вызывается подпрограмма на выполнение?
6. По какой инструкции происходит возврат в основную программу?
7. Опишите работу инструкции DECFSZ .
Описание УМК-7 и MPLAB
На передней панели стенда (рисунок А.1) расположены:
1 - микроконтроллер PIC16F877;
2 - ряд клемм, соединенных с выводами PIC16F877;
3 - ряд клемм ,соединенных с выводами внешних устройств;
4 –источник звука;
5 –источник аналогового сигнала;
6 –панель светодиодов;
7 - жидкокристаллический индикатор;
8 - клавиатура.
Микроконтроллер с внешними устройствами соединяется перемычками.
MPLAB-ICD – оценочный комплект для микроконтроллеров серии PIC16F87X. В нем используется возможность внутрисхемной отладки (ICD), встроенной в кристаллы PIC16F87X и протокол внутрисхемного программирования фирмы Microchip. Внутрисхемная отладка встроена в кристаллы PIC16F87X. MPLAB-ICD одновременно является программатором и внутрисхемным отладчиком, поскольку он подключается к отлаживаемому устройству и работает как микроконтроллер PIC16F87X. Комплект MPLAB-ICD предназначен для отладки кода в лабораторных условиях.
MPLAB-ICD поддерживает:
- пошаговое выполнение кода в реальном масштабе времени;
- точки останова (break points);
- внутрисхемную отладку;
- встроенное программирование;
- отладку по исходному коду и символическим именам;
- RS-232 интерфейс.
Технические данные микроконтроллера:
- диапазон выходных рабочих напряжений от 3.0 V до 5.5 V;
- рабочие частоты от 32 кГц до 20 МГц.
Системы счислений
В цифровой технике восемь носителей информации, имеющих два устойчивых состояния, объединяют в одну ячейку памяти. Количество записываемой в нее информации называют байтом. Информация в памяти микропроцессора представлена только в двоичной системе. Для удобства работы программиста числа обычно отображают в шестнадцатеричной системе счисления. Соответствие первых 17 чисел в различных системах счислений приведено в таблице Д1.
Т а б л и ц а Д.1 – Соответствие чисел в различных системах счислений
Десятичная система |
Двоичная система |
Восьмеричная система |
Шестнадцатеричная система |
0 |
0000 |
0 |
0 |
1 |
0001 |
1 |
1 |
2 |
0010 |
2 |
2 |
3 |
0011 |
3 |
3 |
4 |
0100 |
4 |
4 |
5 |
0101 |
5 |
5 |
6 |
0110 |
6 |
6 |
7 |
0111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
16 |
10000 |
20 |
10 |
17 |
10001 |
21 |
11 |
В таблице в двоичной системе слева приписаны не значащие нули.
Алгоритмы перевода чисел из двоичной системы в шестнадцатеричную и наоборот.
Перевод чисел из двоичной системы в шестнадцатеричную систему
Двоичное
число разбиваем на четверки чисел справа налево. Для каждой четверки записываем
его эквивалент из приведенной выше таблицы.
Пример перевода: 0101 1011 11012 = 5ВD16.
Обратный перевод чисел очевиден, необходимо только аккуратно писать именно четверки двоичных чисел, дописывая при необходимости нули слева: 1116.= 100012, 1216 = 100102.
Пример перевода: 215С16==0010 0001 0101 11002=10 0001 0101 11002.
Карта памяти микроконтроллера PIC16877
Регистр 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”, если был перенос из младшего полубайта, для инструкций сложения и вычитания в двоично-десятичной системе. Заем имеет инверсное значение ‘0’;
- C флаг переноса или заема. Записывается “1”, если был перенос единицы в старший бит для инструкций сложения. Заем при вычитании имеет инверсное значение.
Т а б л и ц а Г.2 – Выбор номера банка
RP1 (6 разряд) |
RP0 (5 разряд) |
Номер банка |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
2 |
1 |
1 |
3 |
К отдельному биту регистра можно обращаться по имени или по номеру. Инструкция BTFSC STATUS, Z эквивалентна инструкции BTFSC STATUS, 2.
Значения бит регистра status после очистки представлены в таблице Г.3.
Т а б л и ц а Г.3 – Значения разрядов регистра status после инструкции CLRF
Имя |
IRP |
RP1 |
RP0 |
-TO |
-PD |
Z |
DC |
C |
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Значение |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
Приложение Д
Описание некоторых инструкций микроконтроллера PIC
Константа в инструкциях представлена символом k. В описании инструкций указаны флаги, которые могут измениться при ее выполнении. Параметр d (dest) в инструкциях определяет, в какой регистр записывается результат. Если d=0 или отсутствует, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f.
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
1. Сайт в Internet www.microchip.ru.
2. Погребисский М.П. Микропроцессорные системы управления электротехническими установками. –М.: МЭИ, 2003
3. Кохц Дитер. Измерение, управление с помощью PIC-контроллеров. Киев. Наукова думка. 2007.
4. Заец Н.И. Радиолюбительские конструкции на PIC. –М.: Солон, 2003.
5. Яценков В.С. Микроконтроллеры Microchip. Практическое руководство. – 2 –е изд. испр. и дополн. – М.: Горячая линия – Телеком, 2005.
6. Корнеев В.В., Киселев А.В. Современные микропроцессоры –3-е изд., перераб. и доп. – СПб.: БХВ – Петербург, 2003. - 448 с.
7. Ульрих Б.А. Микропроцессоры PIC16x7xx. -СПб.: Наука и техника, 2002.
8. Катцен С. PIC микроконтроллеры. Все, что необходимо вам знать. –М.: Додека, 2008.
9. Фрунзе А.В., Фрунзе М.А. Микроконтроллеры ? Это же просто. М.: ООО ИД СКИМЕН, 2003.
10. Таверенье К. PIC микроконтроллеры- М.: ДМК, 2002.
11. Шмурьев В.Я. Цифровые реле защиты. – М.: НТФ Энергопрогресс, 1999.
12. Овчаренко Н.И. Микропроцессорные комплексы релейной защиты и автоматики распределительных электрических сетей. - М.: НТФ Энергопрогресс, 1999.
13. Дьяков А.Ф., Овчаренко Н.И. Микропроцессорная релейная защита и автоматика электроэнергетических систем. М.: - Издательство МЭИ, 2000.
Содержание
Введение 1 Лабораторная работа 1. Отображение чисел в ЦТ 2 Лабораторная работа 2. Изучение среды MPLAB и порта С 3 Лабораторная работа 3. Настройка порта С. Символьные имена 4 Лабораторная работа 4. Сложение, вычитание. Логика 5 Лабораторная работа 5. Операции преобразования чисел 6 Лабораторная работа 6. Сравнение чисел 7 Лабораторная работа 7. Суммирование значений массива 8 Лабораторная работа 8. Маскирование 9 Лабораторная работа 9. Ввод данных с клавиатуры 10 Лабораторная работа 10. Подпрограммы Приложение A Приложение Б. Приложение В. Приложение Г. Приложение Д. Список литературы |
3 4 7 12 15 18 20 23 24 26 29 32 33 34 35 36 39 |
|
|