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

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

0 ... 83848586878889 ... 159


TMROReset = 256 goto Afterint org 4

- TMROReset , Значение для таймера

, Переход после прерываний

, Программа управления прерываниями

movwf

movf

STATUS, w

STATUS, RPO ,

Банк 0

movwf

status

INTCON, TOIF,

Сброс запроса от таймера

movlw

TMROReset

movwf

TMRO

Int RX

Проверка, принят ли символ

movlw

0x004

addwf

RXCount, f

btfss

STATUS, DC

Регистр пуст

goto

RXNo

Проверять пока нечего

movf

RXCount, w ,

Проверка, все ли принято

xorlw

0x091

btfsc

STATUS, Z ,

Проверка счетчика

goto

RXAEnd

STATUS, С

Данные принимаются через бит переноса

if (Polarity ==Pos)

btfsc

RXPort, RXPin

, 10 циклов приема

else

btfss

RXPort RXPin

endif

STATUS, С

RXByte f

RXCount, 2 ,

Счет начинается с цифры 4

RXEndl3

goto

RXEnd

15 циклов, завершение приема битов

RXEnd8

8 циклов

goto

$ + 1

goto

RXEnd13

RXNo

5 циклов от Int RX, данные не поступают

btfSC

RXCount, 0 ,

Что-нибудь функционирует

goto

RXEnd8

8 циклов Если да, пропуск

Over

btfsc

RXCount, 3 ,

Проверка стартовых битов

goto

RXStartCheck

If (Polarity == Pos)

btfsc

RXPort, RXPin

, Если на линии 0, запуск

, стартового бита



else

btfss

RXPort RXPin

endif

RXCount 2

Стартовый бит отсутствует

goto

RXEnd13

18 циклов от Int RX

RXStartCheck

До этого момента 10 циклов

if (Polarity == Pos)

btfsc

RXPort, RXPin

else

btfss

RXPort, RXPin

endif

movlw

OxOFF

Обнуление счетчика приема

addlw

movwf

RXEnd

goto

RXEnd

До окончания 16 циклов

RXAtEnd

9 циклов от Int RX, проверка последнего бита

if (Polarity Pos)

btfsc

RXPort, RXPin

else

btfss

RXPort RXPin

endif

RXFlag

clrf

RXCount

Окончание, сброс, 12 циклов

goto

$ + 1

goto

RXEnd

RXEnd

Int TX

Передача данных (22 цикла)

movlw

0x004

Прерывание передачи

addwf

TXCount f

btfss

STATUS DC

Пересылка следующего байта

goto

TXSendDlayCheck

TXCount 2

Инкрементирование на 3 при передаче каждого бита

STATUS С

TXByte f

movf

TXPort w

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

andlw

OxOFF ~ (1 << TXPin)

if (Polarity == Pos)

btfsc

STATUS С

else

btfss

STATUS, С

endif

lorlw 1 << TXPin

movwf

TXPort

12-й цикл посылка бита

goto

TXSendDlayCheck

Нужно 14 циклов

TXSendDlayCheck

Биты не передаются

Проверка стартового бита



btfss

goto

movlw

movwf movf

If andlw

else lorlw

endif movwf goto

TXCount, 0 TXNothingtoCheck 0x004

TXCount TXPort, w (Polarity == Pos)

OxOFF - (1 << TXPin)

1 << TXPin

Флаг нуля

Подготовка таймера для инкрементирования на 3

Выдача стартового бита

TXPort

TXCompletedGoOn

TXNothingtoCheck

movf TXCount, w

xorlw 0x004

btfss STATUS, Z

xorlw 0x004 " 0x09C

btfsc STATUS, Z

clrf TXCount

rXCompletedGoOn

movf

movwf swapf swapf retfie

SerialRX bcf btfss goto movf return

SerialTX movf btfss

goto

movwf

return

Afterint

status, w

STATUS w, f w, w

RXFlag RXFlag $ - 1 RXByte,

TXCount, f STATUS, Z

$ - 2 TXByte TXCount, 0

Передача первого бита требует 14 циклов Ничего не посылать

Счетчик равен О

Завершение передачи, переход к приему Восстановление контекста после прерываний

Сброс флага символа Ожидание приема символа

Возврат принятого символа

Передача

Ожидание окончания предыдущей передачи

Загрузка символа Установка указателя для подпрограммы управления прерываниями

Возврат значения Конфигурирование для прерывания



0 ... 83848586878889 ... 159