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

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


Скачать 3.49 Mb.
НазваниеСистема команд pic16F84A 26 Что такое программа иправила ее составленияПример создания программы автоколебательного мультивибратораДирективы.
АнкорСамоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf
Дата30.01.2017
Размер3.49 Mb.
Формат файлаpdf
Имя файлаСамоучитель по программированию PIC контроллеров для начинающих .pdf
ТипПрограмма
#1195
КатегорияПромышленность. Энергетика
страница14 из 57
1   ...   10   11   12   13   14   15   16   17   ...   57
Start,
рабочая точка программы должна "уйти в
вечное кольцо " и "мотать в
ней кольца " до момента переключения радиостанции с
приема на передачу
После того как это случится, рабочая точка программы должна выйти из этого "вечного кольца " по сценарию "программа исполняется далее ", и
еще раз "
закольцеваться " в
процедуре формирования периода тонального сигнала
Одновременно должен начать работать таймер, время срабатывания которого зависит от количества периодов тонального сигнала, сформированных программой, с
момента нажатия на тангенту
После отсчитывания заданного количества периодов (через 3 сек, таймер должен "сработать ", и
рабочая точка программы, независимо оттого, находится ли радиостанция на передаче или нет, до следующего рабочего перепада управляющего сигнала (до следующего перехода от приема к
передаче
), должна снова "уйти в
вечное кольцо " подпрограммы
Start
Все это, с
непривычки
, выглядит чем- тоне вполне понятным, но после работы с
текстом программы, многие из
Вас удивятся, как это, в
сущности
, просто
Для того чтобы еще более конкретно оформить "конструкцию " программы, необходимо ответить на вопрос "
В
каком месте программы должны записываться константы (числа, определяющие величину интервала времени "выхода " тонального сигнала в
эфир
)"? Дело в
том
(а это очень важно и
сейчас
, и
при работе с
другими программами, что константы, используемые в
работе устройств, подобных упомянутому выше таймеру
(
устройств
, которые что- то подсчитывают, должны "закладываться " (записываться) в
эти устройства предварительно, то есть, до начала их работы
Эта "закладка " должна происходить вне цикла работы этого таймера (счетчика, а
иначе
, значения констант будут обновляться каждый цикли таймер никогда не сработает (никогда

77 недосчитает до нуля.
В
нашем случае, "особо не развыбираешься ", так как вне 3- х
секундного "кольца " находится только подпрограмма
Start
Таким образом, задача сводится к
определению "места ", внутри
ПП
Start
, в
которое можно "врезать " команды записи констант
В
частности
, их можно "врезать " между командами подготовительных операций, но это затрудняет комфортное восприятие текста программы
Во избежание этого, лучше всего поместить группу команд записи констант в
конце подпрограммы
Start
Да будет так
Четвертый пункт
Для реализации этого пункта, нужен какой- то орган управления типа переключателя или кнопки
В
данном случае, можно задействовать кнопку
А
(аксессуары) радиостанции Vertex - 2000, расположенную на передней панели радиостанции, что очень удобно
Она задействуется при программировании радиостанции (зашивке " частот и
режимов
), а
в рабочем режиме, если при программировании ей не присвоено никаких функций (что и
имеет место быть, она просто свободна и
ее можно использовать в
качестве выключателя (или "включателя ") режима тонального вызова
Если использовать эту кнопку (фиксации нетто в
качестве элемента оперативной памяти, придется назначить дополнительный регистр общего назначения, работающий как триггер
(
элемент оперативной памяти, состояния которого зависят от состояния кнопки на момент опроса
Кроме того, если речь идет о
более
- менее качественном устройстве, то необходимо будет принять меры по защите от дребезга контактов, а
если речь идет об очень качественном устройстве, то необходимо будет задействовать энергонезависимую (
EEPROM
) память данных
ПИКа
(для энергонезависимого сохранения настроек) или после включения питания, по умолчанию, включать (или выключать) режим тонального вызова
Все это сделать можно, но если разработчик поставлен перед такого рода выбором, то прежде всего, нужно повнимательнее изучить аппаратуру
А
вдруг в
ней имеется то, что нужно
В
данном случае, то что нужно, в
наличии имеется, и
поэтому простонет смысла усложнять программу
И
в самом деле, в "
Вертексе " имеется и
кнопка
, и
светодиодный индикатор ее включения и
выключения
В
нем имеется и
оперативная память интересующей нас кнопки, и "
противодребезг ", и
после включения питания р
/
станции
, сигнал управления, формируемый этой кнопкой, представляет собой сигнал управления типа "кнопка отжата ". Для того, чтобы это выяснить, нужно просто понаблюдать за поведением светодиодного индикатора при нажатиях
/
отжатиях этой кнопки и
при коммутациях питания
К
сожалению
, память данных микропроцессора р
/
станции под эту кнопку не задействована, нос этим вполне можно мириться
Для того чтобы "запустить в
эксплуатацию " этот "подарок судьбы ", нужно всего- лишь сделать отвод оттого места пайки выводов светодиода, на котором наблюдается наиболее резкий перепад напряжения ив дальнейшем, "привязать " программу к
логике этого перепада
При этом, никаких преобразователей уровней (для согласования уровней) вводить в
схему разрабатываемого устройства ненужно, так как
Вертекс собран на пятивольтовых микросхемах
Переходим к
составлению принципиальной схемы
Так как применяется стандартный кварцевый генератор (
XT
), то можно использовать стандартную схему подключения кварца
Для того чтобы не использовать сетевой блок питания, можно запитаться от радиостанции вольт в
ней имеется, но лучше излишне не перегружать 5- вольтовый стабилизатор напряжения р
/
станции и
ввести в
принципиальную схему устройства свой 5- вольтовый стабилизатор нам схеме 142
ЕН
5
А
, для которой, в
связи с
малым энергопотреблением, радиатор ненужен Сигнальные цепи, по которым будет осуществляться обмен данными между
ПИКом и
радиостанцией
, определены ранее

78 Остается только выяснить, какие именно выводы
ПИКа задействовать под эти цепи Например, назначим следующую "привязку ": Вывод порта
В
RB0
будет входом управления (
прием
/
передача
). Этот вывод нужно подключить к
тому контакту кнопки тангенты
, который не соединен с
корпусом
В
этом случае, режиму приема будет соответствовать 1, а
режиму передачи 0.
Вывод
RB2
назначаем выходом устройства тонального вызова
Его нужно подключить к
модуляционному входу передатчика
Так как этот вход имеет высокую чувствительность, то выходной уровень тонального сигнала нужно понизить, и
на всякий случай, принять меры "развязки " по постоянному току
В
простейшем случае, это можно сделать, если включить в
разрыв цепи, соединяющей выход устройства тонального вызова с
модуляционным входом передатчика, последовательную- цепочку
Вывод
RB6
назначаем входом управления (

вкл
/
выкл режима тонального вызова Этот вывод нужно подключить к
тому месту пайки индикаторного светодиода кнопки
А
радиостанции
, на котором, при переключениях этой кнопки, наблюдается максимальный перепад напряжения
Для этого нужно произвести замер напряжения, после чего определиться стем, какому именно из двух состояний светодиода ("
горит
/
не горит ") будет соответствовать, например, режим включения устройства тонального вызова Определим так (но можно и
наоборот
):
- включению устройства тонального вызова будет соответствовать 1,
- а
выключению
0. Таким образом, уровни управляющих сигналов "четко привязались " к
исполняемым операциями к ним, в
дальнейшем
, будет "привязана " программа
Для слухового контроля за процессом "выхода " в
эфир сигнала тонального вызова, к
выводу
RB2, можно подключить пьезоэлектрический излучатель
Теперь ничто не мешает составить принципиальную схему устройства Примечание выводы портов можно "привязать " к
сигнальным цепям в
какой угодно комбинации
Можно назначить их ив порте
А
По вполне понятным причинам, эту "привязку " нужно осуществить до начала составления программы
Номинал
R2 нужно подбирать по наилучшему качеству модуляции
Для р
/
станций
Vertex-2000 он такой, как указано в
схеме
Для других типов радиостанций, возможно, его нужно будет подобрать

79
Если
ПИК
не нужно сбрасывать внешним сигналом сброса, а
в данном случае, это так, то между выводом
MCLR
и цепью +5v подключается R1 номиналом, обычно, от 1 до 10
ком
Можно подключить и
напрямую
(без резистора, ноя, на всякий случай, "подстрахуюсь ". Номиналы конденсаторов
С
3 и
С
4 указаны с
запасом
Можно сделать их и
поменьше
Внешние цепи устройства тонального вызова 1 … 5 подключаются к
разъему на задней стенке "
Вертекса ".
В
нем есть незадействованные контакты, на которые можно вывести сигналы, необходимые для его работы (для выводов
RB0
и
RB6
), а
также и
цепь
+13,8v
Вывод корпуса и
вывод модуляционного входа имеются
Разъем монтируется прямо на печатной плате устройства и
поэтому
, при подключении его к
р
/
станции
, никаких механических креплений ненужно Итак, своеобразная "болванка " замысла программы создана
Теперь нужно наполнить ее содержанием "Скелет " программы (стратегический замысел) сформирован ранее
Принципиальная схема есть
Остается только составить блок - схему программы
Перед ее составлением, нужно определиться с
названиями подпрограмм
Назначаем следующие названия подпрограмм Функции подпрограмм, PAUSE_1, были рассмотрены ранее
Циклическую подпрограмму формирования времени "выхода " сигнала тонального вызова в
эфир назову, например,
CYCLE
, а
подпрограмму
, в
которой осуществляется "уход в
вечное кольцо ", назову, например, Можно назвать их и
по
- другому
Это зависит от фантазии

80 Переходим к
тексту программы
Я
сделал два варианта текста программы
Они отличаются только комментариями
Вариант текста программы, с
названием
cus_2.asm,
содержит комментарии в
формализованном виде
То есть, они написаны на формальном языке команд
Вариант текста программы, с
названием
cus_1.asm,
содержит неформализованные комментарии, которые объясняют суть производимых действий
Совместное использования обеих этих текстов должно
Вам помочь
Оба этих файла прилагаются (см.
папку
"
Тексты программ. Текст программы
cus_1.asm
выглядит так
;********************************************************************************
;
cus_1.asm
ВАРИАНТ
КОММЕНТАРИЯ

1
; Программа разработана для устройства тонального вызова с
частотой
1450 Гц.
;********************************************************************************
; Автор
Корабельников
Евгений
Александрович г
.
Липецк
, январь г.
; E-mail: karabea@lipetsk.ru http://ikarab.narod.ru
; Используется микроконтроллер PIC16F84A. Частота кварца кГц.
; Объем программы 46 слов в
памяти программ.

;********************************************************************************
; "ШАПКА" ПРОГРАММЫ
LIST p=16F84A
; Назначение типа
ПИКа
: PIC16F84A.
__CONFIG 03FF5H
; Установка битов конфигурации стандартный ; генератор, WDT включен, бит защиты не ; установлен, PWRT включен (1111 0101).
;================================================================================
; Определение адресов регистров специального назначения.
;================================================================================
OptionR equ 01h
; Регистр Option - банк
Status equ 03h
; Регистр Status
PortB equ 06h
; Порт B
TrisB equ 06h
; Регистр Tris B - Банк
IntCon equ 0Bh
; Регистр IntCon
;================================================================================
; Определение названия и
адресов регистров общего назначения.

;================================================================================
Sec equ 0Ch
; Счетчик времени полупериода equ 0Dh
; Старший байт таймера.
SecL equ 0Eh
; Младший байт таймера.
;================================================================================
; Присвоение буквенного обозначения операции направления результата выполнения команды в
регистр
, с содержимым которого производится действие (для удобства восприятия текста программы.
;================================================================================
F equ 1
; Результат направить в
регистр
, с содержимым ; которого производится действие.
;================================================================================
; Присвоение биту выбора банка регистра STATUS (пятому) его стандартного названия (для удобства восприятия текста программы.
;================================================================================
RP0 equ 5
; Присвоение 5-
му биту регистра STATUS

; названия RP0.
;================================================================================
; Определение точки входа в
программу
.
;================================================================================
org 0
; Начать выполнение программы goto START
; с первой команды подпрограммы START.
;********************************************************************************
;********************************************************************************
;------------------------
РАБОЧАЯ
ЧАСТЬ
ПРОГРАММЫ
-----------------------------
;********************************************************************************

81
; Подготовительные операции.
;--------------------------------------------------------------------------------
START clrf IntCon
; Запрещение всех прерываний.
clrwdt
; Сброс сторожевого таймера WDT.
bsf Status,RP0
; Установка банка 1.
movlw .65
; RB0,RB6 работают на вход, (.65 = 0100 0001)
movwf TrisB
; остальные - на выход.
movlw .143
; Выключение подтягивающих резисторов порта
В
.
movwf OptionR
;
Предделитель с
Кдел
.=128 (18
мс
.*128=2,3
сек
.)
; подключен к WDT, остальное - неважно Установка банка 0.
;--------------------------------------------------------------------------------
; Запись констант времени работы таймера.
;--------------------------------------------------------------------------------
movlw .15
; Запись в
регистр
SecH
movwf SecH
; константы .15
movlw .255
; Запись в
регистр
SecL
movwf SecL
; константы .255
;--------------------------------------------------------------------------------
; Проверка наличия включения на передачу (опрос клавиатуры.
;--------------------------------------------------------------------------------
CYCLE btfsc PortB,0
; Если передача не включена, то переход ;
в
ПП
START.
goto START
; Если включена - программа исполняется далее-
; Проверка режим тонального вызова включен или выключен ?
;--------------------------------------------------------------------------------
btfss PortB,6
; Если режим тонального вызова выключен – уход ; в PRD.
goto PRD
; Если включен, то программа исполняется далее-
; Формирование времени отрицательного полупериода сигнала тонального вызова.
;--------------------------------------------------------------------------------
bcf PortB,2
; Начало формирования отрицательного ; полупериода.
nop
; Пустые машинные циклы точной калибровки nop
; времени отрицательного полупериода ; (точная доводка.
nop
; -------------------"---------------------
movlw .85
; Запись в
регистр
Sec
movwf Sec
; константы .85
PAUSE_1 clrwdt
; Сброс сторожевого таймера WDT.
decfsz Sec,F
; "Грубый" отсчет интервала времени goto PAUSE_1
; отрицательного полупериода.
;--------------------------------------------------------------------------------
; Формирование времени положительного полупериода сигнала тонального вызова.
;--------------------------------------------------------------------------------
bsf PortB,2
; Начало формирования положительного ; полупериода.
nop
; Пустые машинные циклы точной калибровки nop
; времени положительного полупериода ; (точная доводка.
nop
; --------------------"----------------------
movlw .83
; Запись в
регистр
Sec
movwf Sec
; константы .83
PAUSE_2 clrwdt
; Сброс сторожевого таймера WDT.
decfsz Sec,F
; "Грубый" отсчет интервала времени goto PAUSE_2
; положительного полупериода.

82
;--------------------------------------------------------------------------------
; "Очистка" (декремент) таймера.
;--------------------------------------------------------------------------------
1   ...   10   11   12   13   14   15   16   17   ...   57


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