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

01F7 07A8                addwf  _fsrh,f  ; прибавляем к ср начало отсчета

01F8 1803                btfsc  _status,c; перенос?

01F9 168D                bsf    flagh,5  ; ставим флаг переполнения

01FA 168C                bsf    flag,5   ; ставим флаг записи

01FB 0008                return          ; возврат

01FC 1A8D        mit2    btfsc  flagh,5  ; переполнение

01FD 0008                return          ; да - возврат

01FE 0828                movf    _fsrh,w  ; загружаем ср времения выдачи

01FF 020E                subwf   _tmr0h,w ; вычитаем из ср текущего времени

0200 1C03                btfss   _status,c; проверяем перенос

0201 0008                return           ; выход

0202 1D03                btfss   _status,z; проверяем флаг нуля

0203 2A08                goto    m_i_0    ; идем на коррекцию

0204 0804                movf    _fsr,w   ; сравниваем мр

0205 0201                subwf   _tmr0,w  ; с текущим временем

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

0207 0008                return           ; то возврат


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

LOC  OBJECT CODE SOURCE TEXT

VALUE

0208 140D        m_i_0   bsf    flagh,0   ; ставим флаг скорректировали в этом периоде

0209 128C                bcf    flag,5

020A 1F8D                btfss  flagh,7   ; если очередь импульса 1,4 форсунок

020B 2A16                goto   m_i_t_1   ; идем туда

020C 1586                bsf    _portb,inj2; выдаем импульс 2,3 форсунки

020D 2100                call   cr_inj_com ; корректируем длительность

020E 1803                btfsc  _status,c  ; если есть перенос из ср

020F 160D                bsf    flagh,4    ; ставим флаг переполнения

0210 108D                bcf    flagh,1    ; сброс флага выдачи импульса

0211 0819                movf   suml,w     ; мр  переписываем полученные значения

0212 00A9                movwf  tj2        ; для выдачи импульса

0213 082E                movf   sumh,w     ; ср

0214 00A8                movwf  tj2h       ;

0215 0008                return            ; возврат

0216 1506        m_i_t_1 bsf    _portb,inj1; выдаем импульс 1,4 форсунки

0217 2100                call   cr_inj_com ; корректируем длительность

0218 1803                btfsc  _status,c  ; если есть перенос

0219 158D                bsf    flagh,3    ; ставим флаг переполнения

021A 110D        m_i_t_3 bcf    flagh,2    ; сбрасываем флаг выдачи

021B 0819                movf   suml,w     ; переписываем скорректированные

021C 00A7                movwf  tj1        ; значения

021D 082E                movf   sumh,w

021E 00A6                movwf  tj1h

021F 0008                return

0220 140D        _mit3   bsf     flagh,0   ; сброс флага приняли сигнал

0221 0824                movf    tjdh,w    ; записываем в adrk и tmp

0222 00AE                movwf   sumh      ; значение для коррекции

0223 0825                movf    tjd,w

0224 0099                movwf   suml

0225 2905                goto    cr_i_1   ; идем на преобразование

0226 0801        no_m_inj movf  _tmr0,w   ; прибавляем к полученному результату

0227 0799                addwf  suml,f    ; текущее время

0228 1803                btfsc  _status,c ; получаем момент, когда нужно

0229 0AAE                incf   sumh,f    ; сбросить выходной сигнал

022A 080E                movf   _tmr0h,w

022B 07AE                addwf  sumh,f

022C 1803                btfsc  _status,c  ; если есть перенос

022D 158D                bsf    flagh,3    ; ставим флаг переполнения

022E 2A1A                goto   m_i_t_3

;--------------------------------------------------------------022F             check_inj1      ; проверка импульса 1,4 форсунок

022F 198D                btfsc   flagh,3  ;флаг переполнения активен?

0230 0008                return           ; да  - возврат

0231 1985                btfsc   _porta,S_A

0232 2A35                goto    c_i1_

0233 1E05                btfss   _porta,idl ; проверяем значение IDL