Данная подпрограмма осуществляет конвертирование двоичного кода, предварительно записанного в буферных регистрах TEMP_TL TEMP_TH в двоично-десятичный код, записываемый в регистры индикации IND_0, IND_1, IND_2, IND_3.
Листинг подпрограммы приведен ниже.
;-_DEC ; ПОДПРОГРАММА ДВОИЧНО-ДЕСЯТИЧНОЙ КОРРЕКЦИИ
;-
; РАСПРЕДЕЛЕНИЕ ТЕТРАД РЕГИСТРОВ TEMP_TL И TEMP_TH ПО РЕГИСТРАМ IND_0 - IND_3
MOVF TEMP_TL, W 0x0F
MOVWF IND_0 ; ПОМЕСТИТЬ МЛАДШУЮ ТЕТРАДУ TEMP_TL В IND_0
SWAPF TEMP_TL, W 0x0F
MOVWF IND_1 ; ПОМЕСТИТЬ СТАРШУЮ ТЕТРАДУ TEMP_TL В IND_1
MOVF TEMP_TH, W 0x0F
MOVWF IND_2 ; ПОМЕСТИТЬ МЛАДШУЮ ТЕТРАДУ TEMP_TH В IND_2
SWAPF TEMP_TH, W 0x0F
MOVWF IND_3 ; ПОМЕСТИТЬ СТАРШУЮ ТЕТРАДУ TEMP_TH В IND_3
;-
; КОРРЕКЦИЯ РЕЗУЛЬТАТА STATUS, Z STATUS, C
MOVLW 0x0A IND_0, W STATUS, C
GOTO $+5 STATUS, Z ; ЕСЛИ ЗНАЧЕНИЕ IND_0 НЕ МЕНЬШЕ 0x0A $+3 IND_0 ; В РЕГИСТР IND_0 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И
; 0x0A IND_1, F ; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_1
BCF STATUS, Z STATUS, C
MOVLW 0x0A ; ИНАЧЕ ЗНАЧЕНИЯ РЕГИСТРОВ ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ
SUBWF IND_1, W STATUS, C
GOTO $+5 STATUS, Z ; ЕСЛИ ЗНАЧЕНИЕ IND_1 НЕ МЕНЬШЕ 0x0A $+3 IND_1 ; В РЕГИСТР IND_1 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И
; 0x0A IND_2, F ; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_2
BCF STATUS, Z STATUS, C
MOVLW 0x0A ; ИНАЧЕ ЗНАЧЕНИЯ РЕГИСТРОВ ОСТАВИТЬ БЕЗ ИЗМЕНЕНИЯ
SUBWF IND_2, W STATUS, C
GOTO $+5 STATUS, Z ; ЕСЛИ ЗНАЧЕНИЕ IND_2 НЕ МЕНЬШЕ 0x0A $+3 IND_2 ; В РЕГИСТР IND_2 ЗАПИСАТЬ РАЗНОСТЬ ЕГО СОДЕРЖИМОГО И
; 0x0A IND_3, F ; И УВЕЛИЧИТЬ НА 1 СОДЕРЖИМОЕ IND_3
;-
Обработка прерываний
Вектор прерываний находится по адресу 0х04.
Обработчик прерываний включает в себя следующие подпрограммы:
1. Подпрограмма сохранения контекста.
2. Подпрограмма определения источника прерывания.
. Подпрограмма часов.
. Подпрограмма обработки прерываний от таймера TMR2.
. Подпрограмма обработки прерываний по входу INT.
. Подпрограмма обработки прерываний по входам <RB4: RB7>.
. Подпрограмма приема / передачи данных через USART.
. Подпрограмма восстановления контекста.
Подпрограмма сохранения контекста
При переходе на обработку прерываний необходимо сохранять текущее содержимое аккумулятора и регистра STATUS, чтобы при возврате из прерывания программа могла продолжать нормальную работу.
Ниже приведен листинг подпрограммы, осуществляющей сохранение контекста во временные регистры W_TEMP и STATUS_TEMP. Регистр STATUS_TEMP определен в 0-м банке по адресу 0х39, а регистр W_TEMP - в 0-м банке по адресу 0х3А и в 1-м банке по адресу 0хВА.
;-
; СОХРАНЕНИЕ АККУМУЛЯТОРА И РЕГИСТРА STATUS STATUS, RP0 ; ОПРЕДЕЛЕНИЕ ТЕКУЩЕГО БАНКА RP0_CLR STATUS, RP0 ; УСТАНОВИТЬ БАНК 0 W_TEMP ; СОХРАНИТЬ АККУМУЛЯТОР STATUS, W STATUS_TEMP ; СОХРАНИТЬ РЕГИСТР STATUS STATUS_TEMP, 5 ; ВОССТАНОВИТЬ ЗНАЧЕНИЕ БИТА RP0 $+4_CLR W_TEMP ; СОХРАНИТЬ АККУМУЛЯТОР
SWAPF STATUS, W STATUS_TEMP ; СОХРАНИТЬ РЕГИСТР STATUS
;-
Подпрограмма определения источника прерывания
Данная подпрограмма по состоянию флагов прерываний в регистрах PIR1 и INTCON определяет источник прерывания и осуществляет вызов соответствующей подпрограммы обработки.
Листинг подпрограммы приведен ниже.
;-
; ОПРЕДЕЛЕНИЕ ИСТОЧНИКА ПРЕРЫВАНИЯ
INT_SOURCE STATUS ; ОЧИСТИТЬ РЕГИСТР STATUS
BTFSC PIR1, CCP1IF ; ЕСЛИ ПРЕРЫВАНИЕ ОТ МОДУЛЯ CCP1 CLOCK ; ПЕРЕХОД НА ПОДПРОГРАММУ ЧАСОВ
PIR1, TMR2IF ; ЕСЛИ ПРЕРЫВАНИЕ ОТ ТАЙМЕРА TMR2 INT_TMR2 ; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ОТ
; TMR2
INTCON, INTF ; ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДУ INT INT_INT ; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ПО
; INT
INTCON, RBIF ; ЕСЛИ ПРЕРЫВАНИЕ ПО ВХОДАМ <RB4:RB7> INT_RB ; ПЕРЕХОД НА ПОДПРОГРАММУ ОБРАБОТЧИКА ПРЕРЫВАНИЙ ПО
; ВХОДАМ <RB4:RB7> PIR1, RCIF ; ЕСЛИ ПРЕРЫВАНИЕ ОТ ПРИЕМНИКА USART SERIAL_PRT ; ПЕРЕХОД НА ПОДПРОГРАММУ ПРИЕМА/ПЕРЕДАЧИ
; ДАННЫХ ЧЕРЕЗ USART END_INT ; ИНАЧЕ ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ
Самое читаемое:
Модернизация канала формирования импульсов запуска блока Т-17М
Постоянное совершенствование средств воздушного нападения,
опыт войн и вооруженных конфликтов последних десятилетий предъявляют повышенные
требования к возможностям зенитных комплексов ближнего действия по обнаружению,
сопровождению и поражению воздушных целей в различных условиях обстановки.
Однако подавляющее большинство зенитны ...