Файл: Самоучитель по программированию PIC контроллеров для начинающих (Е.А. Корабельников,2008).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.06.2025
Просмотров: 3613
Скачиваний: 3
Остается только выяснить, какие именно выводы ПИКа задействовать под эти цепи? Например, назначим следующую "привязку":
Вывод порта В RB0 будет входом управления (прием/передача).
Этот вывод нужно подключить к тому контакту кнопки тангенты, который не соединен с корпусом.
Вэтом случае, режиму приема будет соответствовать 1, а режиму передачи 0.
Вывод RB2 назначаем выходом устройства тонального вызова.
Его нужно подключить к модуляционному входу передатчика.
Так как этот вход имеет высокую чувствительность, то выходной уровень тонального сигнала нужно понизить, и на всякий случай, принять меры "развязки" по постоянному току.
Впростейшем случае, это можно сделать, если включить в разрыв цепи, соединяющей выход устройства тонального вызова с модуляционным входом передатчика, последовательную RC-цепочку.
Вывод RB6 назначаем входом управления (вкл/выкл режима тонального вызова).
Этот вывод нужно подключить к тому месту пайки индикаторного светодиода кнопки А радиостанции, на котором, при переключениях этой кнопки, наблюдается максимальный перепад напряжения.
Для этого нужно произвести замер напряжения, после чего определиться с тем, какому именно из двух состояний светодиода ("горит/не горит") будет соответствовать, например, режим включения устройства тонального вызова?
Определим так (но можно и наоборот):
- включению устройства тонального вызова будет соответствовать 1, - а выключению 0.
Таким образом, уровни управляющих сигналов "четко привязались" к исполняемым операциям, и к ним, в дальнейшем, будет "привязана" программа.
Для слухового контроля за процессом "выхода" в эфир сигнала тонального вызова, к выводу RB2, можно подключить пьезоэлектрический излучатель.
Теперь ничто не мешает составить принципиальную схему устройства:
Примечание: выводы портов можно "привязать" к сигнальным цепям в какой угодно комбинации. Можно назначить их и в порте А.
По вполне понятным причинам, эту "привязку" нужно осуществить до начала составления программы.
Номинал R2 нужно подбирать по наилучшему качеству модуляции. Для р/станций Vertex-2000 он такой, как указано в схеме.
Для других типов радиостанций, возможно, его нужно будет подобрать.
78
Если ПИК не нужно сбрасывать внешним сигналом сброса, а в данном случае, это так, то между выводом MCLR и цепью +5v подключается R1 номиналом, обычно, от 1 до 10ком. Можно подключить и напрямую (без резистора), но я, на всякий случай, "подстрахуюсь". Номиналы конденсаторов С3 и С4 указаны с запасом. Можно сделать их и поменьше.
Внешние цепи устройства тонального вызова 1 … 5 подключаются к разъему на задней стенке "Вертекса".
В нем есть незадействованные контакты, на которые можно вывести сигналы, необходимые для его работы (для выводов RB0 и RB6), а также и цепь +13,8v.
Вывод корпуса и вывод модуляционного входа имеются.
Разъем монтируется прямо на печатной плате устройства и поэтому, при подключении его к р/станции, никаких механических креплений не нужно.
Итак, своеобразная "болванка" замысла программы создана. Теперь нужно наполнить ее содержанием.
"Скелет" программы (стратегический замысел) сформирован ранее. Принципиальная схема есть.
Остается только составить блок - схему программы.
Перед ее составлением, нужно определиться с названиями подпрограмм. Назначаем следующие названия подпрограмм:
Функции подпрограмм START, PAUSE_1, PAUSE_2 были рассмотрены ранее. Циклическую подпрограмму формирования времени "выхода" сигнала тонального вызова в эфир назову, например, CYCLE, а подпрограмму, в которой осуществляется "уход в вечное кольцо", назову, например, PRD.
Можно назвать их и по-другому. Это зависит от фантазии.
79
Переходим к тексту программы.
Я сделал два варианта текста программы. Они отличаются только комментариями. Вариант текста программы, с названием cus_2.asm, содержит комментарии в формализованном виде. То есть, они написаны на формальном языке команд. Вариант текста программы, с названием cus_1.asm, содержит неформализованные комментарии, которые объясняют суть производимых действий.
Совместное использования обеих этих текстов должно Вам помочь.
Оба этих ASM-файла прилагаются (см. папку "Тексты программ").
Текст программы cus_1.asm выглядит так:
;********************************************************************************
; |
cus_1.asm |
ВАРИАНТ КОММЕНТАРИЯ № 1 |
; |
Программа разработана для устройства тонального вызова с частотой 1450 Гц. |
|
;********************************************************************************
; |
Автор: Корабельников Евгений Александрович г.Липецк, январь 2005г. |
|
; |
E-mail: karabea@lipetsk.ru |
http://ikarab.narod.ru |
;Используется микроконтроллер PIC16F84A. Частота кварца 4000кГц.
;Объем программы: 46 слов в памяти программ.
;********************************************************************************
; "ШАПКА" ПРОГРАММЫ
;********************************************************************************
LIST |
p=16F84A |
; Назначение типа ПИКа: PIC16F84A. |
|||
__CONFIG |
03FF5H |
; Установка битов |
конфигурации: стандартный |
||
; |
XT-генератор, WDT включен, бит |
защиты не |
|||
; |
установлен, PWRT |
включен (1111 |
0101). |
||
;================================================================================
; Определение адресов регистров специального назначения.
;================================================================================
OptionR |
equ |
01h |
; Регистр Option - банк1 |
|
Status |
equ |
03h |
; Регистр Status |
|
PortB |
equ |
06h |
; Порт B |
|
TrisB |
equ |
06h |
; |
Регистр Tris B - Банк1 |
IntCon |
equ |
0Bh |
; |
Регистр IntCon |
;================================================================================
; Определение названия и адресов регистров общего назначения.
;================================================================================
Sec |
equ |
0Ch |
; Счетчик времени полупериода. |
|||
SecH |
equ |
0Dh |
; |
Старший |
байт |
таймера. |
SecL |
equ |
0Eh |
; |
Младший |
байт |
таймера. |
;================================================================================
;Присвоение буквенного обозначения операции направления результата выполнения
;команды в регистр, с содержимым которого производится действие (для удобства
;восприятия текста программы).
;================================================================================
F equ 1 ; Результат направить в регистр, с содержимым ; которого производится действие.
;================================================================================
;Присвоение биту выбора банка регистра STATUS (пятому) его стандартного названия
;(для удобства восприятия текста программы).
;================================================================================
RP0 |
equ |
5 |
; |
Присвоение 5-му биту регистра STATUS |
; |
названия RP0. |
;================================================================================
; Определение точки входа в программу.
;================================================================================
org |
0 |
; |
Начать выполнение программы |
goto |
START |
; |
с первой команды подпрограммы START. |
;********************************************************************************
;******************************************************************************** ;------------------------ РАБОЧАЯ ЧАСТЬ ПРОГРАММЫ -----------------------------
;********************************************************************************
80
; Подготовительные операции. |
||||
;-------------------------------------------------------------------------------- |
||||
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, остальное - не важно. |
||||
; |
(.143 = 1000 1111) |
|||
bcf |
Status,RP0 |
; Установка банка 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 |
; положительного полупериода. |
||
81
;-------------------------------------------------------------------------------- |
|||
; "Очистка" (декремент) таймера. |
|||
;-------------------------------------------------------------------------------- |
|||
decfsz |
SecL,F |
; Декремент содержимого регистра SecL. |
|
goto |
CYCLE |
; Если |
результат декремента не=0, то переход |
; в ПП |
CYCLE. |
||
; Если |
результат декремента =0, то программа |
||
; исполняется далее. |
|||
decfsz |
SecH,F |
; Декремент содержимого регистра SecH. |
|
goto |
CYCLE |
; Если |
результат декремента не=0, то переход |
; в ПП |
CYCLE. |
||
; Если |
результат декремента =0, то программа |
||
; исполняется далее. |
|||
bcf |
PortB,2 |
; Установить на выходе RB2 ноль. |
|
;-------------------------------------------------------------------------------- |
|||
;Уход рабочей точки программы в "вечное" кольцо и выход из него после
;переключения р/станции с передачи на прием.
;-------------------------------------------------------------------------------- |
||||||||
PRD |
clrwdt |
; Сброс сторожевого таймера |
WDT. |
|||||
btfss |
PortB,0 |
; Передача |
включена? |
|||||
goto |
PRD |
; |
Если |
да, |
то переход на |
ПП |
PRD. |
|
; |
Если |
нет, то программа |
исполняется далее. |
|||||
;Еще одна проверка.
btfss |
PortB,0 |
; Передача |
включена? |
||||||
goto |
PRD |
; Если |
да, |
то переход |
на |
ПП PRD. |
|||
; Если |
нет, то |
программа |
исполняется далее. |
||||||
goto |
START |
; |
Конец |
полного цикла |
программы, переход на |
||||
; |
новый |
полный |
цикл программы. |
||||||
;================================================================================ end ; Конец программы.
Текст программы cus_2.asm выглядит так:
;********************************************************************************
; |
cus_2.asm |
ВАРИАНТ КОММЕНТАРИЯ № 2 |
; |
Программа разработана для устройства тонального вызова с частотой 1450 Гц. |
|
;********************************************************************************
; |
Автор: Корабельников Евгений Александрович г.Липецк, январь 2005г. |
|
; |
E-mail: karabea@lipetsk.ru |
http://ikarab.narod.ru |
;Используется микроконтроллер PIC16F84A. Частота кварца 4000кГц.
;Объем программы: 46 слов в памяти программ.
;********************************************************************************
; "ШАПКА" ПРОГРАММЫ
;********************************************************************************
LIST |
p=16F84A |
; Назначение типа ПИКа: PIC16F84A. |
|||
__CONFIG |
03FF5H |
; Установка битов |
конфигурации: стандартный |
||
; |
XT-генератор, WDT включен, бит |
защиты не |
|||
; |
установлен, PWRT |
включен (1111 |
0101). |
||
;================================================================================
; Определение адресов регистров специального назначения.
;================================================================================
OptionR |
equ |
01h |
; Регистр Option - банк1 |
|
Status |
equ |
03h |
; Регистр Status |
|
PortB |
equ |
06h |
; Порт B |
|
TrisB |
equ |
06h |
; |
Регистр Tris B - Банк1 |
IntCon |
equ |
0Bh |
; |
Регистр IntCon |
;================================================================================
; Определение названия и адресов регистров общего назначения.
;================================================================================
Sec |
equ |
0Ch |
; Счетчик времени полупериода. |
|||
SecH |
equ |
0Dh |
; |
Старший |
байт |
таймера. |
SecL |
equ |
0Eh |
; |
Младший |
байт |
таймера. |
;================================================================================
82