Dalrate.ru

Построение рабочей локальной сети

Подпрограмма двоично-десятичной коррекции

Данная подпрограмма осуществляет конвертирование двоичного кода, предварительно записанного в буферных регистрах 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 ; ИНАЧЕ ПЕРЕХОД НА ПОДПРОГРАММУ ВОССТАНОВЛЕНИЯ Перейти на страницу: 1 2 3 4 5 6

Популярное:

Анализ прохождения детерминированного сигнала через линейную цепь с постоянными параметрами Нахождение корреляционной функции для входного сигнала, сдвинутого на на интервале При обработке сигналов часто приходится сравнивать сигнал со смещёнными во времени копиями этого сигнала, а также другими сигналами. О степени связи сигнала со смещёнными копиями можно судить по корреляционным функциям. Для вещественного сигнал ...