Подпрограмма обработки прерывания
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 |
; |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.