00D5 0813 movf tmp,w ; загружаем мр разности
00D6 022B subwf o_inj,w ; вычитаем из мр половины длительности
00D7 1C03 btfss _status,c ; перенос?
00D8 28DB goto ok_inj ; установили момент перехода на двойной счет
00D9 1D03 btfss _status,z ; флаг нуля
00DA 28F2 goto _make_ex ; нет - двойного счета не было
00DB 140C ok_inj bsf flag,0 ; установили момент перехода на двойной счет
00DC 081B movf per,w ; записываем значение текущего периода
00DD 00AD movwf dbl ; в регистровую пару
00DE 081A movf perh,w ; (dblh,dbl)
00DF 00AC movwf dblh
00E0 28ED goto pr_d1 ; идем на перезапись
MPASM 01.50 Released DET.ASM 6-23-1999 21:01:07 PAGE 8
LOC OBJECT CODE SOURCE TEXT
VALUE
00E1 make_double ; проверка текущего периода и
00E1 082C movf dblh,w ; сохраненного значения периода перхода на
00E2 021A subwf perh,w ; двойной счет
00E3 1C03 btfss _status,c; перенос?
00E4 28ED goto pr_d1 ; ср периода < ср сохраненного периода
00E5 1D03 btfss _status,z
00E6 28F2 goto _make_ex ; ср периода > ср сохраненного периода
00E7 082D movf dbl,w ; загружаем мр
00E8 021B subwf per,w ; вычитаем из текущего
00E9 1903 btfsc _status,z ; флаг нуля установлен
00EA 28ED goto pr_d1 ; да - мр периода = мр сохраненного периода
00EB 1803 btfsc _status,c ; флаг переноса?
00EC 28F2 goto _make_ex ; текущий период < сохраненного
00ED pr_d1 ; уменьшаем в два раза длительность сигнала "топливо"
00ED 20F2 call _make_ex ; подготавливаем adrk и tmp
00EE 0183 clrf _status ; сбрасываем STATUS
00EF 0C94 rrf adrk,f ; делим на 2 длительность сигнала
00F0 0C93 rrf tmp,f ; "топливо"
00F1 0008 return ; выход: в (adrk,tmp) - скорр. длительность
00F2 0824 _make_ex movf tjdh,w ; записываем в adrk и tmp
00F3 0094 movwf adrk ; подготовленное для коррекции значение
00F4 00AA movwf o_inj_h ; длительности сигнала "топливо"
00F5 0825 movf tjd,w ; в (o_inj_h,o_inj) вместо старого значения
00F6 0093 movwf tmp ; длительности записываются скорректированное
00F7 00AB movwf o_inj ; значение сигнала "топливо"
00F8 0008 return ; выход
00F9 1003 _make25 bcf _status,c; сброс флага переноса
00FA 0C94 rrf adrk,f ; делим пару (adrk,tmp)
00FB 0C93 rrf tmp,f ; на 4 путем двух сдвигов вправо
00FC 1003 bcf _status,c; сброс флага переноса
00FD 0C94 rrf adrk,f
00FE 0C93 rrf tmp,f
00FF 0008 return ;выход: (adrk,tmp)=0.25 длительности "топлива"
0100 cr_inj_com
0100 20BE call create_inj ; вычисляем коррекцию
0101 0813 movf tmp,w ; переписываем полученные
0102 0099 movwf suml ; значения коррекции
0103 0814 movf adrk,w ; в пару регистров
0104 00AE movwf sumh ; результата
0105 1E05 cr_i_1 btfss _porta,idl ; IDL = 0 ?
0106 2922 goto c_i_n ; да - переписываем старое значение
0107 20AE call make_adrk ; вычисляем текущий интервал
0108 1694 bsf adrk,5 ; читаем вторую половину EEPROM
0109 20A4 call read_EEPROM; читаем коррекцию из EEPROM
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.