![]() | |
НПО Системы Безопасности (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 Прием бита декрементирования и окончание, если он равен О
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 |