НПО Системы Безопасности
(499)340-94-73 График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной

Главная » Периодика » Безопасность

0 ... 82838485868788 ... 159


данных (в битах в секунду), а с помощью параметра Freq - тактовая частота микроконтроллера (в герцах).

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

Эта макрокоманда может использоваться с микроконтроллерами младшего и среднего подсемейств:

NRZSerialNI Macro TXPort, TXPin, RXPort, RXPin, Polarity, Rate, Frequency

Variable BitDlay

BitDlay = Frequency/(4 • Rate)

SerialRX , Прием данньх в режиме B-N-1 (В-битньй

, формат без контроля по четности, , с одним стоповым битом) if (Polarity == Pos) btfsc RXPort, RXPin

else

btfss RXPort, RXPin

endif

goto $ - 1

DlayMacro BitDlay/2

Ожидание входных данных

if (Polarity == btfsc

else btfss

endif

Pos)

goto

RXPort, RXPin RXPort, RXPin SerialRX

movlw В

SRXLoop

if ((BitDlay - 10) > 770) DlayMacro 770

else

DlayMacro BitDlay - 10 endif

bcf STATUS, С

if (Polarity == Pos)

btfsc RXPort, RXPin

else

btfss RXPort, RXPin

endif

Задержка на половину длительности бита

Данные достоверны

Если была импульсная помеха выполнение начинается с начала

Ожидание получения В бит Цикл приема Проверка значения Удваивание задержки

Ожидание середины следующего бита



STATUS, С NRZTemp, f

Прием бита декрементирования и окончание, если он равен О

subwf

NRZTemp w

xorlw

OxOFF

addwf

NRZTemp, w

btfss

STATUS, Z

goto

SRLoop

If ((BitDlay - 9) > 770)

, Проверка значения

DlayMacro

, Удвоение задержки

DlayMacro

BitDlay - (770 + 9)

else

DlayMac ro

BitDlay - 9

, Ожидание середины

, следующего бита

endif

If (Polarity == Pos)

, Столовый бит принят

btfss

RXPort, RXPin

else

btfsc

RXPort, RXPin

endif

goto

SerialRX

, Если нет, новый старт

movf

NRZTemp, w

, Возврат принятого байта

return

SerialTX

, Подпрограмма передачи

movwf

NRZTemp

, Фиксирование байта

, для передачи

movlw

STATUS С

, Посылка стартового бита

STXLoop

If (Polarity == Pos)

, Выдача очередного бита

btfsc

STATUS, С

else

btfss

STATUS, С

endif

goto

$ + 4

, Каждый раз требуется

, 6 циклов

TXPort, TXPin

, Выдача 0

goto

$ + 3

TXPort, TXPin

, Выдача 1

goto

$ + 1

If ((BitDlay - 15) > 770)

, Проверка значения

DlayMacro

, Удвоение задержки

DlayMacro

BitDlay - (770 + 15)

else

DlayMac ro

BitDlay - 15

, Ожидание середины

endif

следующего бита



subwf

xorlw addwf btfsc return

bsf rrf

goto endm

NRZTemp, w OxOFF

NRZTemp, w STATUS Z

STATUS, С NRZTemp, f

STXLoop

Декрементирование счетчика битов

Возврат после передачи всех битов

Сдвиг для передачи следующего бита

Макрокоманда инициализации последовательного интерфейса для микроконтроллеров среднего подсемейства приведена ниже.

NRZSerialNISetup Macro TXPort, TXPin, Polarity

SerialSetup bsfSTATUS, RPO bcfTXPort, TXPin

bcfSTATUS, RPO

if (Polarity == Pos) bsfTXPort, TXPin

Инициализация модуля

Задание вывода ТХ как выхода

Передатчик в режиме ожидания

else bcfTXPort

endif return endm

TXPin

Следующая макрокоманда предполагает использование таймера TMRO для реализации функций последовательного интерфейса. С помощью прерывания таймера организуется трехкратная проверка (считывание) поступающих битов при определении их значения.

Variable BitDlay, Prescaler, TMROReset BitDlay = (Frequency/(3 ♦ 4 • Rate)) -TMROReset = BitDlay/2 Prescaler = 0

while (TMROReset > OxOFF TMROReset = TMROReset/2 Prescaler - Prescaler + 1

endw

if (Prescaler > 7)

Использование таймера TMRO Задание соответствующих значений регистров таймера и прескалера Нельзя задействовать таймер TMRO

error "Bit Delay cannot use TMRO for Polling Clock , Заданная задержка не позволяет использовать TMRO , для тактирования endif



0 ... 82838485868788 ... 159