Проектирование радиоприемного устройства. Расчет структурной схемы линейного тракта, страница 16

Подпрограмма обработки прерывания

PRER

movwf

W_TEMP

;сохранение регистров W и STATUS

swapf

STATUS, w

;на время

bcf

STATUS, RP0

;выполнения

movwf

S_TEMP

;прерывания

btfss

PORT_B, 6

;если нажата кн.на RB6, то

goto

OBRAB_NAJ6

;уходим по этой метке, если нет, то

btfss

PORT_B, 7

;проверка RB7, если нажата

goto

OBRAB_NAJ7

;уходим по этой метке

goto

SBROS_PRER

;если ошибка, то переход по метке

SBROS_PRER

bcf

INTCON, 0

;сброс флага прерывания

swapf

S_TEMP, w

;восстановление

movwf

STATUS

;регистров

swapf

W_TEMP, f

;W и STATUS, сохраненных в

swapf

W_TEMP, w

;начале прерывания

goto

KONEC_PRER

;переход на метку

KONEC_PRER

retfie;

Возврат из прерывания

OBRAB_NAJ6

bsf

PRR, 0

;уст. бит соверш. прерыв в 1

bcf

STATUS, Z

;обнулить бит Z

incf

SCHET_ED, f

;добавить 1 в регистр

movf

SCHET_ED, w

;сохранить в W

sublw

B’00001010’

;проверка на переполнение при

btfss

STATUS, Z

;инкременте регистра SCHET_ED

goto

PRD6

;если нет, переход на метку

clrf

SCHET_ED,

;обнулить регистр

bcf

STATUS, Z

;обнулить бит Z

incf

SCHET_DES,f

;прибавить 1 к содерж. Регистра

movf

SCHET_DES, w

;сохранить регистр в W

sublw

B’00001001’

;проверка на переполнение канала 89

btfss

STATUS, Z

;если переполнения не было, то

goto

PRD6

;переход на метку, если было

clrf

SCHET_DES

;обнуление регистра

movlw

B’00000001’

;запись 1 канала в

movwf

SCHET_ED

;регистр

bcf

STATUS, Z

;обнуление

bcf

STATUS, C

;битов Z и C

goto

PRD6

;переход на метку

PRD6

movlw

B’00000010’

;переход на следующий 

addwf

UPRAVL_SLOVO1

;канал

btfsc

STATUS, C

;проверка на переполнение номера

goto

PLUS_SLOVO2

;канала, если было, то переход по метке

btfsc

UPRSVL_SLOVO2,0

;если нет, проверка бита 0 регистра

goto

PLUS_1

;если бит 0=1, переход по метке, если

goto

SBROS_PRER

;нет переход по этой метке

PLUS_1

bcf

STATUS, Z

;обнулить бит Z

movf

UPRAVL_SLOVO1,w

;записать в регистр W

sublw

B’01100111’

;проверка на переполнение,если было

btfsc

STATUS, Z

;то

goto

OGRAN1

;переход на метку, если нет

goto

SBROS_PRER

;переход на эту метку

OGRAN1

movlw

B’10110101’

;если было переполнение

movwf

UPRAVL_SLOVO1

;то запись в регистр начального знач.

goto

SBROS_PRER

;переход на метку

PLUS_SLOVO2

bcf

STATUS_Z

;обнуление бита Z

bsf

UPRAVL_SLOVO2,0

;бит0 = 1

goto

SBROS_PRER

;переход на метку

OBRAB_NAJ7

bsf

PRR, 0

;обработка нажатия кнопки

bcf

STATUS, Z

;на RB7, аналогична предыдущей

bcf

STATUS, C

;подпрограмме, только операция

movf

SCHET_ED,w

;сложения заменяется операцией

sublw

B’00000001’

;вычитания

btfss

STATUS, Z

;

goto

MIN1

;

bcf

STATUS, Z

;

movf

SCHET_DES, w

;

sublw

B’00000000’

;

btfss

STATUS, Z

;

goto

OBNL

;

movlw

B’00001000’

;

movwf

SCHET_DES

;

movlw

B’00001001’

;

movwf

SCHET_ED

;

goto

PRD7

;

MIN1

btfss

STATUS, C

;

goto

MIN_DES

;

bcf

STATUS, C

;

decf

SCHET_ED

;

goto

PRD7

;

OBNL

clrf

SCHET_ED

;

bcf

STATUS, Z

;

bcf

STATUS, C

;

goto

PRD7

;

MIN_DES

decf

SCHET_DES

;

bcf

STATUS, Z

;

bcf

STATUS, C

;

movlw

B’00001001’

;

movwf

SCHET_ED

;

goto

PRD7

;

PRD7

btfsc

UPRAVL_SLOVO2,0

;

goto

SRAVNA_NOL

;

bcf

STATUS, Z

;

movf

UPRAVL_SLOVO1,w

;

sublw

B’10110101’

;

btfsc

STATUS, Z

;

goto

VOZVRAT

;

movlw

B’00000010’

;

subwf

UPRAVL_SLOVO1,f

;

goto

SBROS_PRER

;

SRAVNA_NOL

bcf

STATUS, C

;

bcf

STATUS, Z

;

movf

UPRAVL_SLOVO1,w

;

sublw

B’00000000’,f

;

btfsc

STATUS, C

;

goto

MINUS_1

;

movlw

B’00000010’

;

subwf

UPRAVL_SLOVO1,f

;

goto

SBROS_PRER

;

MINUS_1

bcf

UPRAVL_SLOVO2,0

;

bcf

STATUS, C

;

bcf

STATUS, Z

;

goto

SBROS_PRER

;

VOZVRAT

movlw

B’01100111’

;

movwf

UPRAVL_SLOVO1

;

bsf

UPRAVL_SLOVO2,0

;

bcf

STATUS, Z

;

bcf

STATUS, C

;

goto

SBROS_PRER

;