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

018B 0008                return         ; да - возврат

018C 1E0C                btfss   flag,4 ; еще не выдали сигнал в этом периоде?

018D 0008                return         ; да - возврат

018E 1E05                btfss   _porta,idl ; IDL = 0 ?

018F 29AE                goto    no_make2   ; да - переписываем старое значение

0190 1905                btfsc   _porta, E_A; проверяем предустановленное значение

0191 29B6                goto    _EEPROM_c  ; идем на обработку коррекции из ПЗУ

; иначе - корр. по датчику детонации

0192 1E8C                btfss   flag,5     ; проверяем флаг детонации

0193 299C                goto    mign1      ; флаг не стоит - идем дальше

0194 128C                bcf     flag,5     ; сбрасываем флаг

0195 0184                clrf    count      ; иначе сброс счетчика

0196 08AF                movf    delta,f    ; проверяем множитель УОЗ

0197 1903                btfsc   _status,z  ; на равенство нулю

0198 29AE                goto    no_make2   ; переписываем значение длительности

0199 0BAF                decfsz  delta,f    ; уменьшаем УОЗ

019A 299F                goto    mign2      ; если не ноль - идем на коррекцию УОЗ

019B 29AE                goto    no_make2   ; если ноль - идем на перезапись

019C 0F84        mign1   incfsz  count,f    ; увеличиваем счетчик оборотов

019D 299F                goto    mign2

019E 0AAF                incf    delta,f    ; если 256 оборотов - увеличиваем УОЗ

019F 08AF        mign2   movf    delta,f    ; проверяем множитель УОЗ

01A0 1903                btfsc   _status,z  ; на равенство нулю

01A1 29AE                goto    no_make2   ; переписываем значение длительности

01A2 081A                movf    perh,w    ; загружаем ср периода

01A3 0099                movwf   suml      ; запись в рабочий регистр

01A4 0D1B                rlf     per,w     ; сдвигаем влево мр и ср периода


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

LOC  OBJECT CODE SOURCE TEXT

VALUE

01A5 0D99                rlf     suml,f    ; в suml шаг коррекции = 1,40625°п.к.в.

01A6 082F                movf    delta,w   ; переписываем значение множителя УОЗ

01A7 0093                movwf   tmp       ; в регистр tmp

01A8 0819        _md10   movf    suml,w    ; шаг коррекции

01A9 0298                subwf   tay2,f    ; отнимаем от мр длительности

01AA 1C03                btfss   _status,c ; перенос

01AB 0397                decf    tay2h,f   ; уменьшаем ср

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

01AD 29A8                goto    _md10     ; если не ноль - заново

01AE 0818        no_make2 movf   tay2,w  ; в (t2h,t2) записываем значение из

01AF 0096                movwf   t2      ; (tay2h,tay2) которое либо осталось преждним,

01B0 0817                movf    tay2h,w ; либо изменилось в результате коррекции

01B1 0095                movwf   t2h     ;

01B2 138C                bcf     flag,7  ; сброс флага принятия сигнала "зажигание"

01B3 170C                bsf     flag,6  ; ставим флаг о том, что скорректировали

01B4 120C                bcf     flag,4  ; сброс флага выдачи сигнала в данном периоде

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

01B6 20AE        _EEPROM_c call    make_adrk  ; вычисляем текущий интервал

01B7 20A4                call    read_EEPROM; читаем коррекцию из EEPROM

01B8 307F                movlw   b'01111111'; проверяем

01B9 0513                andwf   tmp,w      ; значащие биты коррекции

01BA 1903                btfsc   _status,z ; если нулевая коррекция

01BB 29AE                goto    no_make2  ; просто переписываем старое значение

01BC 081A                movf    perh,w    ; загружаем ср периода

01BD 0099                movwf   suml      ; запись в рабочий регистр

01BE 0D1B                rlf     per,w     ; сдвигаем влево мр и ср периода

01BF 0D99                rlf     suml,f    ; в suml шаг коррекции = 1,40625°п.к.в.

; произвели деление периода на 0x80