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

01C0 1B93                btfsc   tmp,7     ; проверка старшего разряда коррекции

01C1 29C9                goto    decrease2 ; если 1 - то отрицательная

; цикл коррекции

01C2 0819        _md01   movf    suml,w    ; загружаем шаг коррекции

01C3 0798                addwf   tay2,f    ; добавляем к мр длительности

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

01C5 0A97                incf    tay2h,f   ; да - увеличиваем ср

01C6 0B93                decfsz  tmp,f     ; уменьшаем счетчик

01C7 29C2                goto    _md01     ; если не ноль - заново

01C8 29AE                goto    no_make2  ; идем на запись скорр. значения

01C9 1393        decrease2 bcf   tmp,7     ; сброс бита знака коррекции

01CA 29A8                 goto _md10       ; идем на коррекцию

;--------------------------------------------------------------01CB             check_outC

01CB 1A0C                btfsc   flag,4 ; сигнал "зажигание" выдан?

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

01CD 1D8C                btfss   flag,3 ; начали выдачу сигнала?

01CE 0008                return         ; нет - возврат

01CF 1B0D                btfsc   flagh,6 ; есть флаг переполнения?

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

01D1 1E05                btfss   _porta,idl ; IDL = 0

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

01D3 0815                movf    t2h,w      ; ср момента выдачи сигнала

01D4 020E                subwf   _tmr0h,w   ; вычитаем из ср таймера


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

LOC  OBJECT CODE SOURCE TEXT

VALUE

01D5 1C03                btfss   _status,c  ; проверяем флаг переноса

01D6 0008                return             ; ср таймера > ср момента выдачи

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

01D8 29DD                goto    _ot2       ; ср таймера < ср момента выдачи

01D9 0816                movf    t2,w       ; мр момента выдачи сигнала

01DA 0201                subwf   _tmr0,w    ; вычитаем из мр таймера

01DB 1C03                btfss   _status,c  ; проверяем флаг переноса

01DC 0008                return             ; мр таймера > мр момента выдачи

01DD 1486        _ot2    bsf    _portb,outc ; выдаем сигнал

01DE 30B5                movlw   b'10110101'; сбрасываем флаги

01DF 058C                andwf   flag,f     ; в регистре flag

01E0 160C                bsf     flag,4     ; ставим флаг выдачи сигнала

01E1 0196                clrf    t2         ; очистка регистров

01E2 0195                clrf    t2h        ; хранения коррекции сигнала

01E3 0008                return             ; выход

01E4             make_inj_t       ; обработка сигнала "топливо"

01E4 1D85                btfss  _porta,S_A ; проверяем предустановку порта

01E5 2A20                goto   _mit3    ; идем на обработку асинхр. впрыска

01E6 0820                movf   tj0h,w   ; пороверка регистровой пары

01E7 1D03                btfss  _status,z; (tj0h,tj0) на равенство нулю

01E8 29EC                goto   mit1     ; если значение нулевое

01E9 0821                movf   tj0,w    ; то выходим - сигнала "топливо" не было

01EA 1903                btfsc  _status,z

01EB 0008                return

01EC 1A8C        mit1    btfsc  flag,5   ; проверяем вычисление значения

01ED 29FC                goto   mit2     ; начала выдачи импульсов

01EE 0821                movf   tj0,w    ; записываем мр задержки сигнала "топливо"

01EF 0084                movwf  _fsr     ; относительно начала отсчета в регистр _fsr

01F0 0820                movf   tj0h,w   ; ср в регистр _fsrh

01F1 00A8                movwf  _fsrh

01F2 0810                movf   ow,w     ; мр прибавляем к началу отсчета

01F3 0784                addwf  _fsr,f   ;

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

01F5 0AA8                incf   _fsrh,f  ; увеличивем ср

01F6 080F                movf   owh,w    ; загружаем ср