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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.