Файл: Самоучитель по программированию 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