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

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


Скачать 3.49 Mb.
НазваниеСистема команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.
АнкорСамоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf
Дата30.01.2017
Размер3.49 Mb.
Формат файлаpdf
Имя файлаСамоучитель по программированию PIC контроллеров для начинающих .pdf
ТипПрограмма
#1195
КатегорияПромышленность. Энергетика
страница57 из 57
1   ...   49   50   51   52   53   54   55   56   57
RB2...7
Что и
требуется
Это то, что я
называю "нейтрализацией " (можно придумать и
другое название. Еще раз посмотрите на константу
Биты с 0, 1
являются единицами, следовательно, биты с 0, 1
результата логической операции "И" будут в
точности такими же, как и
биты с 0, 1
результата опроса состояния выводов порта
В
Вывод
:
биты результата опроса выводов порта
В
, с 7...2
, "нейтрализованы ". То есть, после исполнения команды b'00000011'

, они гарантированно будут заменены нулями
Состояния битов результата исполнения команды andlw b'00000011'

, сбудут в
точности повторять состояния битов с 0, 1
результата опроса порта
В
"
Дешево и
сердито ".

284 Существуют и
другие случаи применения команды Например, если производятся операции "в границах " полубайта, то ей можно "нейтрализовать " любой из полубайтов
Также можно осуществить и
выборочную "нейтрализацию " битов в
байте
13.
О
директиве
INCLUDE
и что такое $+N
?
Директива
INCLUDE
также
, как и
другие директивы, это всего- лишь "элемент удобства ". В "Самоучителе, в
учебно
- тренировочных целях, "шапка " программы оформляется по принципу "прописки " только нужного, и
не более того (ничего лишнего. Ив будущем я
собираюсь действовать также То есть, прежде чем переходить к "удобствам ", нужно как следует "вжиться структуру шапки ". Для тех же, кто считает, что он в
нее "вжился ", и
существует директива
INCLUDE
Воспользовавшись директивой, можно "прописать всё
оптом " (кроме регистров общего назначения, но этот "
опт окажется за кадром ". Естественно, что после этого, "масса шапки " существенно уменьшается
А
теперь детали
При "вводе в
эксплуатацию " директивы, "из недр " извлекается и "подключается к
работе " файл с
расширением
.INC
, который есть нечто иное, как "заготовка шапки " программы с
уже "прописанными " в
ней
, по- максимуму, регистрами специального назначения (включая и "прописку " битов флагов, и "прописку " мест сохранения результатов операций. Для каждого типа
ПИКа имеется "свой " файл с
расширением
.INC
, и
все эти файлы находятся в
папке
MPLAB
Откройте папку
MPLAB,
и
Вы там их обнаружите целую "кучу ". Давайте просмотрим какой- нибудь из них, например, файл с
названием
P16F84a.INC
(для. Откройте этот файл
Если при его открытии, Вы увидите вопрос
С
помощью какой программы открыть, то выберете иконку программы (а если ее нет в
списке
, то создайте. После этого, в
текстовом редакторе
MPLAB,
Вы увидите то, что после "ввода в
эксплуатацию " директивы "будет находиться за занавесом ". Для того чтобы воспользоваться этим "добром ", нужно "соблюсти некоторые формальности ":
1.
В
рабочей части программы, названия регистров и
битов должны быть в
точности такими же, как ив тексте файла с
расширением
.IN
С
То есть, если написано, то и
нужно писать, а
не как- то иначе (например,
Status
), а
иначе будете получать сообщения об ошибках
2.
Несколько изменилась форма представления битов конфигурации (бит с
названием
... включить
/
выключить
), поэтому нет необходимости "ломать голову " над определением значения числа, выражающего их состояния (например, 03FF1H). Еще раз посмотрите в
текст файла
P16F84a.INC
и обратите внимание на то, что регистры специального назначения 1- го банка (например,
OPTION_REG, TRIS...
) "прописаны " по своим фактическим адресам, то есть, 81h, 8...h, а
не по адресам нулевого банка 01h, 0...h, которые я
использую для написания текстов программ, не содержащих директивы
INCLUDE
То же самое относится и
к файлам с
расширением
.INC
других типов
ПИКов
Допустим
, что текст программы, в
которой используется директива, не содержит ошибок
После этого "на гора будет выдан " список сообщений с
итогом
Build completed успешное ассемблирование
). Все эти сообщения являются информирующими (Message). Они не являются ошибками (Error). Типы, цифровые коды и
содержание сообщений расписаны в "MPASM. Руководство пользователя. Появление таких информирующих сообщений обусловлено "пропиской ", в
файле с
расширением
.INC,
фактических адресов регистров специального назначения 1- го банка
Может возникнуть вопрос "Почему в "Самоучителе, во всех "шапках " программ, регистры специального назначения 1- го банка "прописываются " по адресам нулевого банка, а
не по своим фактическим адресам" Ответ чтобы избавиться от сообщений информативного характера типа Message[302], которых достаточно много

285 При этом, я
руководствуюсь тем соображением, что на первых порах, нежелательно распылять свое внимание на просмотри анализ каких- то длинных списков сообщений
При "вводе в
эксплуатацию " директивы, должны быть применены специальные символы, ив "шапке " программы, написание названия INC- файла не должно отличаться от написания названия соответствующего INC- файла, "лежащего " в
папке
MPLAB
Что такое goto $+N

Обращаю
Ваше внимание на то, что речь идет не о
символе
S
, а
о символе (доллар.
N
– число "прыжка ", которое может быть отображено в
различных системах исчисления
Например
, исполнение команды приведет к "прыжку " рабочей точки программы на 2- ю, после $+2

, команду, по направлению сверху вниз
Если вместо знака "
+
", использовать знак "
-
", то будет тоже самое, но по направлению снизу вверх
Подобрав числовое значение
N
и знак, можно "прыгнуть " (осуществить безусловный переход) туда, куда нужно
При этом, отпадает необходимость в
выставлении метки
Команда
goto $
"мертвяк " ("
закольцовка " на саму себя, без возможности выхода. Команда заменяет два
NOP
а
14.
О
выводе битов и
байтов на выводы порта.
В
случае вывода бита (битов, соответствующий (
ие
) выводы) порта предварительно должен (
ны
) быть настроены) на работу "на выход ". Если выводится весь байт, то все выводы порта предварительно должны быть настроены на работу "на выход ". Настройка " направлений работы выводов порта осуществляется в
регистре специального назначения
TRIS…
Вывод бита с
помощью команд BCF

/
BSF. Для вывода бита, используются бит- ориентированные команды (на выводе порта нулевой уровень) или (на выводе порта единичный уровень. За один присест ", можно вывести только один бит
Если нужно последовательно изменить состояния, например, 3 битов, то необходимо также последовательно, исполнить 3 бит- ориентированные команды
BCF
/
BSF
Например
, вывод нуля, на вывод извиняюсь за тавтологию, будет выглядеть так
bcf PortB,4
(установить, на выходе защелки вывода
RB4,
нулевой уровень.
С
учетом того, что
RB4
работает "на выход ", это соответствует формированию, на выводе, нулевого уровня
Вывод байта с
помощью команды MOVWF. Для вывода байта используется байт- ориентированная команда
MOVWF
Предварительно
, все выводы порта должны быть настроены на работу "на выход ". Сначала, байт (число) должен быть скопирован в
регистр
W
из какого- нибудь регистра общего назначения или этот байт (число) должен быть константой, записанной в
регистр
W
с помощью команды
MOVLW
Например
:
movwf Расшифровка ": установка на выходах всех защелок порта
В
уровней
, предварительно записанных в
регистр
W при работе "на выход ", выходы защелок подключены к
выводам порта
)
Еще проще вывод содержимого регистра
W
в порт
В
Если в
регистр
W
была записана константа, то она и
будет выведена в
порт
В
То же самое можно сказать и
о случае копирования, в
регистр
W,
содержимого какого- то регистра общего назначения, например, с
названием
ABCD
(
movf ABCD,W
).
В
большинстве случаев, в
регистре
ABCD
"лежит " результат "долгой и
кропотливой работы " программы (в динамике. Быстрый" вывод группы битов с
количеством бОльшим
1, но меньшим ми. Особое место занимает случай, когда "за один присест " (без использования бит- ориентированных команд, в
порт нужно вывести количество битов более одного, но менее восьми
Предположим
: На выводы порта
В
с номерами 0,1,2,3 нужно вывести полубайт
К
выводам порта
В
с номерами 4,5,6,7 подключены выходы внешних устройств

286 Что нужно сделать Перед выводом полубайта, необходимо "настроить " биты регистра
TrisB
следующим образом выставить в
битах с нули (работа выводов "на выход "), а
в битах с, выставить единицы (работа выводов "на вход "). Это выглядит так
bsf Status,RP0
; выбор го банка (или Status,5)
movlw b'11110000'
; запись константы в
аккумулятор
movwf TrisB
; копирование числа 11110000, изв регистр Если в
дальнейшем не требуется производить каких- то операций с
содержимым регистра
(
регистров
) специального назначения 1- го банка, то после команды TrisB

, нужно выбрать 0- й
банк
(
bcf или Status,5
).
Всё
Выводы порта
В
"настроены " так, как было указано выше, и
теперь можно "выводить наружу " полубайт
Вопрос
: "
С
выводами
, настроенными на работу на выход, все ясно
На них будет выводиться полубайт
А
не повлияет ли процесс вывода полубайта на состояния остальных 4- х
выводов
, настроенных на работу на вход" Ответ нет, не повлияет (хотя на выходах защелок выводов
RB4,5,6,7
выставятся какие- то уровни
В
данном случае, неважно какие) по той причине, что выходы этих защелок электрически отключены от выводов (работа "на вход "). Уровни, присутствующие на выводах, если в
дальнейшем они не будут перестраиваться на работу "на выход ", полностью определяются состояниями выходов внешних устройств, подключенных к
ним
В
регистр
W
должна быть записана либо константа k

, где - константа, либо в
него должно быть скопировано содержимое регистра общего назначения, в
котором хранится результат предшествующей работы программы ABCD,W

). Затем,
movwf PortB
, и
дело сделано
Вопрос
: "
А
если нужно, например, вывести три бита
И
не соседних друг с
другом
, а
допустим
, с" Ответ они выводятся также, как ив описанном выше случае, только нужно внести коррективы в
значение константы, записываемой в
регистр
TrisB
Для случая работы остальных выводов порта
В
"на вход ", она будет выглядеть так Существуют и
другие разновидности вывода "наружу " группы битов с
количеством бОльшим
1, но меньшим 8- ми
Руководствуясь сказанным выше, плюс немного смекалки, можно реализовать любую разновидность вывода. Пример организации 3-
байтного счетчика.
.................. ; Команды программы.
movlw L
; Запись константы L
movwf SecL
; в регистр SecL.
movlw M
; Запись константы M
movwf SecM
; в регистр SecM.
movlw H
; Запись константы H
movwf SecH
; в регистр SecH.
.................. ; Другие команды программы ; (могут быть, а могут и
не быть.

PAUSE decfsz SecL,F
;
goto PAUSE
; Классический SecM,F
; х байтный
goto PAUSE
; вычитающий SecH,F
; счетчик.
goto PAUSE
;
goto
............. ; Переход туда, куда нужно или без этой команды,
.................. ; если работа происходит на "линейном" участке. ; программы. При помощи такого счетчика можно обеспечить достаточно длительные задержки

287 По такому же принципу можно "сконструировать " счетчик любой "
байтности ". То, что
Вы видите, это классический 3- байтный вычитающий счетчик
Заменив
decfsz
на
incfsz
, получите суммирующий счетчик
Применив и, и, получите комбинированный счетчик
Номиналы констант зависят и
от конструкции счетчика (в том числе и
с учетом "врезок "), и
от величины требуемой задержки
"
Самоучитель по программированию PIC контроллеров для начинающих"

http://ikarab.narod.ru E-mail: karabea@lipetsk.ru
1   ...   49   50   51   52   53   54   55   56   57


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