Главная страница

Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008). Самоучитель по программированию PIC контроллеров для начинающих. Система команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.


Скачать 3.49 Mb.
НазваниеСистема команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.
АнкорСамоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf
Дата30.01.2017
Размер3.49 Mb.
Формат файлаpdf
Имя файлаСамоучитель по программированию PIC контроллеров для начинающих .pdf
ТипПрограмма
#1195
КатегорияПромышленность. Энергетика
страница36 из 57
1   ...   32   33   34   35   36   37   38   39   ...   57
Z
=1). Итак, после нажатия на кнопку, рабочая точка программы "рано или поздно " установится на команду Status,2

(сброс флага. Следующей исполняется команда декремента ABC,F

, воздействующая на флаг
Z
В
регистре общего назначения, условно названном, на момент начала счета, находится какое- то предварительно (до входа в
циклическую
ПП
) записанное в
него число (константа, например .10 (количество отрабатываемых циклов. После декремента, число .10 уменьшается до .09 и
сохраняется в
том же регистре
ABC
Далее
, с
помощью команды производится анализ состояния флага
Z
Если результат декремента ненулевой, то произойдет переход на начало циклической подпрограммы (
goto XYZ
) и
все повторится снова
В
конце каждого такого "витка ", содержимое регистра
ABC
будет уменьшаться на 1. Рано или поздно " (нам "витке "), результат декремента станет нулевым (
Z
=1), после чего произойдет переход в
сценарий типа "программа исполняется далее " (выход из циклической подпрограммы. После этого, рабочая точка программы будет "гонять по другим кольцам " полного цикла программы, обходя указанную выше, циклическую подпрограмму и
осуществляя слежение за состоянием кнопки
Время задержки будет равно времени нахождения рабочей точкой программы внутри циклической подпрограммы
Изменяя числовое значение константы, можно изменить продолжительность этой задержки
По сравнению стем, что рассматривалось ранее (применялась команда, такой способ "постановки на счетчик ", не является выигрышным (большее количество команд.
Я
о нем рассказал только для того, чтобы "проиллюстрировать " работу с
флагом
Z
Следующий пример работы с
эти флагом более востребован
Задействуя флаг, можно реализовать такое нужное устройство, как цифровой компаратор, то есть, устройство, осуществляющее анализ "входного " числа на предмет его "попадания " или нет) в
определенную "зону " чисел
Если анализируемое число не попадает в
эту "зону ", то исполняется один сценарий работы программы, а
если попадает, то другой

185
В
состав такой "зоны " чисел, в
зависимости от желания программиста, могут входить от двух чисел и
более
Цифровой компаратор может быть частью, например, системы фазовой автоподстройки частоты, дешифратора, системы блокировки и
т д, то есть, весьма обширного класса устройств
Файл с
примером реализации цифрового компаратора с
формализованными комментариями, называется (находится в
папке
"
Тексты программ. Это выглядит так
;********************************************************************************
;
flag.asm
ПРИМЕР
ИСПОЛЬЗОВАНИЯ
ФЛАГА
НУЛЕВОГО
РЕЗУЛЬТАТА
"Z"
;******************************************************************************** Вопрос что должно произойти Ответ если, на момент анализа содержимого регистра буферной памяти, в нем записано любое из чисел от .00 до .04 включительно, то рабочая точка программы должна "уйти" в один сценарий работы "программы" (в подпрограмму YES), а если указанное выше число не входит в "зону" чисел от .00 до .04 включительно, то рабочая точка программы должна "уйти" в другой сценарий работы "программы" (в подпрограмму NO).
;********************************************************************************
; "
ШАПКА
ПРОГРАММЫ
"
;================================================================================
;.............................................................
;.............................................................
;================================================================================
; Определение положения регистров специального назначения.
;================================================================================
Status equ 03h
; Регистр Status.
;.............................................................
;.............................................................
;================================================================================
; Определение названия и
положения регистров общего назначения.

;================================================================================
Registr equ 0Ch
; Регистр буферной памяти.
;.............................................................
;.............................................................
;================================================================================
; Определение места размещения результатов операций.
;================================================================================
W equ 0
; Результат направить в
аккумулятор
.
;.............................................................
;================================================================================
; Присваивание битам названий.
;================================================================================
RP0 equ 5
; Бит выбора банка.
Z equ 2
; Бит флага нулевого результата.
;.............................................................
;================================================================================
org 0
; Начать выполнение программы goto START
; с подпрограммы START.
;********************************************************************************
;********************************************************************************
;
РАБОЧАЯ
ЧАСТЬ
ПРОГРАММЫ
;********************************************************************************
START ......................................
;--------------------------------------------------------------------------------
;
ПП
NO, в которую "уходит" рабочая точка программы, если анализируемое число не попадает в "зону" чисел от .00 до .04 включительно.

186
;--------------------------------------------------------------------------------
NO ......................................
;--------------------------------------------------------------------------------
;================================================================================
; Реализация цифрового компаратора.
; Решение задачи о
вхождении или нет анализируемого числа в "зону" чисел от .00

; до .04 включительно.
;================================================================================
movf Registr,W
; Скопировать содержимое регистра Registr
; в регистр W.
bcf Status,Z
; Сбросить флаг нулевого результата Z.
sublw .00
; Вычесть из константы .00 содержимое ; регистра W.
btfsc Status,Z
; Проверка состояния флага нулевого ; результата (Z).
goto YES
; Если Z=1 (нулевой результат операции,
; то "уход"
в
ПП
YES.
movf Registr,W
; Если Z=0 (ненулевой результат операции, то ; содержимое регистра Registr копируется ; в регистр W.
sublw .01
; Вычесть из константы .01 содержимое ; регистра W.
btfsc Status,Z
; --------------"--------------
goto YES ;
--------------"--------------
movf Registr,W ;
--------------"--------------
;
--------------"--------------
sublw .02
; Вычесть из константы .02 содержимое ; регистра W.
btfsc Status,Z ;
--------------"--------------
goto YES ;
--------------"--------------
movf Registr,W ;
--------------"--------------
;
--------------"--------------
sublw .03
; Вычесть из константы .03 содержимое ; регистра W.
btfsc Status,Z ;
--------------"--------------
goto YES ;
--------------"--------------
movf Registr,W ;
--------------"--------------
;
--------------"--------------
sublw .04
; Вычесть из константы .04 содержимое ; регистра W.
btfsc Status,Z
; Проверка состояния флага нулевого ; результата (Z).
goto YES
; Если Z=1 (нулевой результат операции,
; то "уход"
в
ПП
YES.
goto NO
; Если Z=0 (ненулевой результат операции,
; то происходит безусловный переход в
ПП
NO.
;--------------------------------------------------------------------------------
;
ПП
YES, в которую "уходит" рабочая точка программы, если анализируемое число попадает в "зону" чисел от .00 до .04 включительно.
;--------------------------------------------------------------------------------
YES ......................................
;--------------------------------------------------------------------------------
;********************************************************************************
end
; Конец программы.

187 Файл с
примером реализации цифрового компаратора, с неформализованными комментариями, называется (находится в
папке
"
Тексты программ. Это выглядит так
;********************************************************************************
;
flag_1.asm
ПРИМЕР
ИСПОЛЬЗОВАНИЯ
ФЛАГА
НУЛЕВОГО
РЕЗУЛЬТАТА
"Z"
;********************************************************************************
;.............................................................
;.............................................................
;.............................................................
;.............................................................
;================================================================================
; Реализация цифрового компаратора.
; Решение задачи о
вхождении или нет анализируемого числа в "зону" чисел от .00

; до .04 включительно.
;================================================================================
movf Registr,W
; Скопировать содержимое регистра Registr
; в регистр W.
bcf Status,Z
; Сбросить флаг нулевого результата Z.
sublw .00
; Вычесть из константы .00 содержимое ; регистра W.
btfsc Status,Z
; Результат вычитания нулевой
goto YES
; Да. -уход"
в
ПП
YES.
movf Registr,W
; Нет. -скопировать содержимое регистра ; Registr в регистр W.
sublw .01
; Вычесть из константы .01 содержимое ; регистра W.
btfsc Status,Z
; Результат вычитания нулевой
goto YES
; Да. -уход"
в
ПП
YES.
movf Registr,W
; Нет. -скопировать содержимое ; регистра Registr в регистр W.
sublw .02
; Вычесть из константы .02 содержимое ; регистра W.
btfsc Status,Z
; Результат вычитания нулевой
goto YES
; Да. -уход"
в
ПП
YES.
movf Registr,W
; Нет. -скопировать содержимое регистра ; Registr в регистр W.
sublw .03
; Вычесть из константы .03 содержимое ; регистра W.
btfsc Status,Z
; Результат вычитания нулевой
goto YES
; Да. -уход"
в
ПП
YES.
movf Registr,W
; Нет. -скопировать содержимое регистра ; Registr в регистр W.
sublw .04
; Вычесть из константы .04 содержимое ; регистра W.
btfsc Status,Z
; Результат вычитания нулевой
goto YES
; Да. -уход"
в
ПП
YES.
goto NO
; Нет. -уход"
в
ПП
NO.
;-------------------------------------------------------------------------------- Проект под них в
MPLAB
создавать ненужно Просто откройте (
File
Open
). Вы видите пример программы, реализующей цифровой компаратор
Сначала
, в
общем виде, проанализируем принцип ее работы
Цифровой компаратор анализирует "поступающие на его вход " числа, на предмет их попадания или нет в "зону " чисел от .00 до .04 включительно "Ширину " этой "зоны " можно сделать другой
Можно также и
сместить ее по числовой оси
При соответствующем наращивании количества команд, можно расширить эту "зону ", а
при сокращении, уменьшить
В
результате "протаскивания " рабочей точки программы через цифровой компаратор, она должна "неизбежно уйти " в
один из двух сценариев работы программы

188
В
данном случае, один сценарий будет исполняться после безусловного перехода рабочей точки программы в
ПП
YES
, а
другой
, в
ПП
NO
В
них может "делаться все что угодно ". Это зависит от замысла программы
Названия этих подпрограмм условны и
их можно назвать иначе
Если переходы осуществляются не на первые команды подпрограмм, то речь идет о
метках
Я
расположил
ПП
NO
вверху
, а
ПП
YES
внизу
(по тексту программы, но они могут располагаться и
иначе
В
качестве элемента оперативной памяти, используется регистр (см. "шапку " программы. На момент начала исполнения первой команды группы команд цифрового компаратора, в
регистре
Registr
должно "лежать " число, величину которого нужно "
заанализировать ".
В
данном
, учебно- тренировочном случае, неважно, каким именно образом "возникло " это число (существует множество вариантов "возникновения "). Приглядевшись к
командам
, реализующим цифровой компаратор, Вы должны заметить аналогию с
рассмотренным выше примером
Так как командой, результат исполнения которой анализируется, является команда операции с
константой
, предполагающая задействование регистра команда, воздействующая на флаг, то перед ее исполнением, необходимо скопировать в
регистр
W
число
, находящееся " в
регистре
Registr
, что и
делается с
помощью команды Перед командой, результат исполнения которой будет анализироваться (
sublw
), сбрасываем
(
опускаем
) флаг
Z
Не из- за того, что это необходимо (он относится к
флагам
1- й
группы и
его можно не сбрасывать, а
для того, чтобы "прочувствовать сам процесс ". Такого рода навыки будут архивостребованы при работе с
флагами
2- й
группы
Результат исполнения команды .00
будет нулевым только тогда, когда содержимое регистра
Registr
также будет нулевым (0-0=0). При этом, флаг
Z
будет поднят (
Z
=1). Во всех остальных случаях, результатом исполнения команды будет число неравное нулю
При этом, флаг
Z
будет опущен (
Z
=0). После исполнения команды .00

, результат ее исполнения анализируется командой Status,Z
(анализ состояния флага
Z)
Если в
регистре
Registr
"лежит " число .00 (
Z
=1), то рабочая точка программы "улетает " в
ПП
YES.
Во всех остальных случаях (
Z
=0), она продолжает свое движение по сценарию "программа исполняется далее ". То есть, начинается отработка следующей, "однотипной " группы команд анализа, но только с
использованием числа .01. Входе исполнения этой группы команд, выражаясь неформально, дается ответ на вопрос Анализируемое число равно числу .01 или неравно" Если равно, то рабочая точка программы "летает " все в
ту же
ПП
YES
, а
если неравно, то начинается отработка следующей, "однотипной " группы команд анализа, но только с
использованием числа .02. Итак далее
До числа .04 включительно
Если неводной из этих групп команд не произошел "
улёт " рабочей точки программы в
ПП
YES
(числовых соответствий не обнаружено, то после отработки группы команд анализа на соответствие числу .04, начнется отработка
ПП
NO
В
ПП
YES
и
NO
, примитивно выражаясь, "может делаться все, что угодно ". Если по факту "срабатывания " компаратора, нужно банально включить какое- то внешнее устройство, то команды можно заменить, например, на команды PortA,
X
(
X
– номер бита. Если во всех командах bsf PortA,
X
, номер бита один и
тот же (задействован один вывод порта, то устройство будет включаться в
диапазоне чисел
Если номера этих битов разные (задействованы несколько выводов порта, то можно включать несколько устройств
При этом, факт включения любого из них, будет "привязан " не к
диапазону чисел, а
к одному из его поддиапазонов или даже к
конкретному числу (от .00 до .255). Могут быть и
комбинации

189
С
помощью цифрового компаратора, по факту возникновения числового соответствия (или несоответствия, можно "запустить в
работу " какую- то процедуру (например, процедуру вычисления, косвенно влияющую на управление "периферией ". Могут быть и
другие варианты, здесь "есть где развернуться ".
В
качестве примера практического использования цифрового компаратора можно привести пример реализации (в упрощенном, общем виде, допустим, устройства пожарной сигнализации, реагирующего на температуру
Предположим
, что имеется термодатчик
, который работает в
диапазоне от 0 до 100 градусов
Цельсия
Необходимо
, чтобы в
диапазоне температур от 80 до 90 градусов, сработала некая "
предупреждалка " (например, сирена, а
в диапазоне температур от 91 до 100 градусов, включилась система автоматического пожаротушения
Предположим
, что датчик линейный, и
изменению температуры от 0 до 100 градусов соответствует изменение напряжения на его выходе от 0 до 10
в
Предположим
, что аналоговый сигнал датчика переведен в
цифровую форму, и
изменению напряжения в
диапазоне
0 в линейно соответствует изменение значений чисел в
диапазоне
.0 … .100.
В
этом случаев команды первой группы проверок, должны быть "заложены " константы c числовыми значениями от .80 до .90, а
в команды второй группы проверок - от .91 до .100. Внутри такого "составного " компаратора, можно либо поменять местами эти группы, либо, в
пределах группы, "перетасовать числа как колоду карт ". На работе устройства это не отразится
А
теперь все зависит от степени "
навороченности " замысла конструктора
Если она низкая, то можно подключить вход исполнительного устройства к
какому
- нибудь выводу порта, настроенному на работу "на выход ", и
с помощью команд
/
1   ...   32   33   34   35   36   37   38   39   ...   57


написать администратору сайта