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