0070 0090 movwf ow ; (owh,ow) содержит текущее время
0071 081E movf temph,w ; т.е. начало отсчета нового периода
0072 008F movwf owh
0073 306D movlw b'01101101' ; сбрасываем флаги в регистре flag
0074 058C andwf flag,f ; т.к. начинается новый период
0075 1985 btfsc _porta,S_A ; синхронный впрыск?
0076 100D bcf flagh,0 ; сбрасываем флаг выбора импульса "топливо"
; в текущем периоде
; изменение разряда
0077 3080 movlw b'10000000' ; отвечающего за текущее значение
0078 078D addwf flagh,f ; выдаваемого сигнала "топливо"
0079 0895 movf t2h,f ; проверка длительности скорректированного
007A 1D03 btfss _status,z ; сигнала "зажигание" на равенство нулю
007B 287F goto rb_00 ;
007C 0896 movf t2,f ; если ср и мр равны нулю
007D 1903 btfsc _status,z ; то идем на выход,
007E 2849 goto exit ; т.е. коррекции не было
007F 081F rb_00 movf templ,w ; если коррекция производилась, то
0080 0796 addwf t2,f ; прибавляем текущее значение времени
0081 1803 btfsc _status,c ; к скорректированному значению длительности
0082 0A95 incf t2h,f ; сигнала -> получаем время в текущем периоде
0083 081E movf temph,w ; когда должны выдать скорректированный сигнал
0084 0795 addwf t2h,f ; если происходит переполнение ср
0085 1803 btfsc _status,c ; то ставим флаг, который сбросится при
0086 170D bsf flagh,6 ; переходе таймера через 0
0087 2849 goto exit ; идем на выход
MPASM 01.50 Released DET.ASM 6-23-1999 21:01:07 PAGE 6
LOC OBJECT CODE SOURCE TEXT
VALUE
0088 1806 RB_z btfsc _portb,inpb ; определение фронта сигнала
0089 2861 goto RB ; "зажигание"
; |_
008A 3043 movlw b'01000011' ; 1:16 период 6,4mks по _|
008B 0062 option ; загружаем OPTION
008C 080F movf owh,w ; загружаем ср начала отсчета периода
008D 021E subwf temph,w ; вычитаем из ср текущего времени
008E 0097 movwf tay2h ; записываем ср длительности "зажигания"
008F 0810 movf ow,w ; мр начала отсчета
0090 021F subwf templ,w ; мр текущего времени
0091 0098 movwf tay2 ; мр длительности "зажигание"
0092 1C03 btfss _status,c; при переполнении
0093 0397 decf tay2h,f ; уменьшаем ср
0094 178C bsf flag,7 ; ставим флаг принятия импульса "зажигание"
0095 1E05 btfss _porta,idl ; проверяем IDL
0096 289D goto _out_i2 ; если равен 0 идем на выдачу импульса
0097 0895 movf t2h,f ; проверяем на 0 скорректированное значение
0098 1D03 btfss _status,z ; ср = 0?
0099 2849 goto exit ; нет -> идем на выход
009A 0896 movf t2,f ;
009B 1D03 btfss _status,z ; мр = 0?
009C 2849 goto exit ; нет -> идем на выход
009D 1486 _out_i2 bsf _portb,outc ; выдаем импульс "зажигание"
009E 30B5 movlw b'10110101' ; настраиваем регистр для
009F 058C andwf flag,f ; сброса флагов
00A0 0195 clrf t2h ; очищаем регистры для хранения
00A1 0196 clrf t2 ; скорректированной длительности импульса
00A2 160C bsf flag,4 ; ставим флаг выдачи импульса "зажигание"
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.