Микропроцессорная система коррекции режимов работы двигателя внутреннего сгорания (Текст программы), страница 2

;--------------------------------------------------------------0004             org     _IntVector         ; вектор прерываний

0004 190B                btfsc   _intcon,2  ; переполнение таймера

0005 2854                goto    _rtcc_int  ; да - идем на обработку

;--------------------------------------------------------------0006 0091                movwf   tmp_w     ; сохраняем w и _status

0007 0803                movf    _status,w ; в собственные регистры

0008 0092                movwf   tmp_st    ; w->tmp_w, STATUS->tmp_st

0009 118B                bcf     _intcon,3 ; сброс флагов разрешения прерываний

000A 120B                bcf     _intcon,4 ; от порта RB и int

000B 178B                bsf     _intcon,7 ; разрешение остальных прерываний (от таймера)

000C 0801        _save   movf    _tmr0,w     ;сохранение текущего значения времени входа в

000D 009F                movwf   templ       ;прерывание;      мр

000E 080E                movf    _tmr0h,w    ;                              таймера

000F 009E                movwf   temph       ;                 ср

0010 081E                movf    temph,w     ;      сравниваем не

0011 020E                subwf   _tmr0h,w    ;      произошло ли прерывание от

0012 1D03                btfss   _status,z   ;      таймера

0013 280C                goto    _save       ;      в момент сохранения

0014 081F                movf    templ,w     ;      чтобы не ошибиться на 0x100

0015 0201                subwf   _tmr0,w     ;  сравниваем мр.

0016 1C03                btfss   _status,c   ;  если не равен, то

0017 280C                goto    _save       ;  идем заново на сохранение

0018 188B                btfsc   _intcon,1   ; прерывание от ножки int

0019 2860                goto    int0        ; идем на обработку

001A 0806                movf    _portb,w    ; считываем порт в регистр

001B 100B                bcf     _intcon,0   ; сбрасываем флаг прерывания от RB4-7

001C 1A06        RB5     btfsc   _portb,inpd ; передний фронт сигнала?

001D 2830                goto    RB5_z       ; да - идем на обработку

; |_

001E 080F                movf    owh,w     ; загружаем ср. начала отсчета периода

001F 021E                subwf   temph,w   ; вычитаем из ср. текущего времени

0020 00A0                movwf   tj0h      ; получаем ср. начала отсчета "топлива"

0021 0810                movf    ow,w      ; относительно заднего фронта "зажигания"

0022 021F                subwf   templ,w   ; аналогично с мр.

0023 00A1                movwf   tj0       ; запись

0024 1C03                btfss   _status,c ; перенос?

0025 03A0                decf    tj0h,f    ; пара (tj0h,tj0) содержит требуемое значение

0026 081F                movf    templ,w   ; запись текущего времени

0027 00A3                movwf   tn        ; для использования его в качестве начала

0028 081E                movf    temph,w   ; отсчета длительности импульса "топливо"

0029 00A2                movwf   tnh       ; (tnh,tn)

002A 204F                call    save_old  ; вызов сохранения предыдущего значения

002B 1985                btfsc   _porta, S_A ; проверяем настройку порта

002C 2849                goto    exit      ; синхронный впрыск - на выход

002D 1506                bsf     _portb,inj1; выдаем импульс


MPASM 01.50 Released              DET.ASM   6-23-1999  21:01:07         PAGE  4

LOC  OBJECT CODE SOURCE TEXT

VALUE

002E 100D                bcf    flagh,0

002F 2849                goto    exit      ; выход и обработки прерывания

0030 1E06        RB5_z   btfss   _portb,inpd ; задний фронт сигнала?

0031 281C                goto    RB5         ; да - идем на обработку

; _|

0032 081F                movf    templ,w  ; запись текущего времени

0033 00A5                movwf   tjd      ; в регистры

0034 081E                movf    temph,w

0035 00A4                movwf   tjdh

0036 0822                movf    tnh,w    ; ср начала отсчета импульса "топливо"