НПО Системы Безопасности
(499)340-94-73
График работы:
ПН-ПТ: 10:00-19:00
СБ-ВС: выходной
|
Главная » Периодика » Безопасность0 ... 83848586878889 ... 159TMROReset = 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
|
|