0037 02A4 subwf tjdh,f ; вычитаем из ср текущего времени
0038 0823 movf tn,w ; мр начала отсчета
0039 02A5 subwf tjd,f ; получаем длительность импульса "топливо"
003A 1C03 btfss _status,c; перенос?
003B 03A4 decf tjdh,f ; уменьшаем ср
003C 1D0C btfss flag,2 ; предыдущий IDL был 1?
003D 204F call save_old ; нет - запись старого значения длительности
003E 1985 btfsc _porta,S_A
003F 2845 goto ex_rb5
0040 1A05 btfsc _porta,idl
0041 2845 goto ex_rb5
0042 1106 bcf _portb,inj1; заканчиваем выдачу импульса
0043 150D bsf flagh,2 ; ставим флаг окончания
0044 100D bcf flagh,0
0045 1A05 ex_rb5 btfsc _porta,idl ;IDL равен 1
0046 150C bsf flag,2 ; да - ставим флаг
0047 1E05 btfss _porta,idl ;IDL равен 0
0048 110C bcf flag,2 ; да - сбрасываем флаг
0049 0812 exit movf tmp_st,w ; восстанавливаем STATUS
004A 0083 movwf _status ;
004B 0811 movf tmp_w,w ; и W
004C 158B bsf _intcon,3 ; разрешаем прерывания от RB4-7
004D 160B bsf _intcon,4 ; и от ножки int
004E 0009 retfie ; возврат с разрешением прерываний
004F 0824 save_old movf tjdh,w ; сохранение длительности
0050 00AA movwf o_inj_h ; ср
0051 0825 movf tjd,w ; предыдущего импульса "топливо"
0052 00AB movwf o_inj ; мр
0053 0008 return
;--------------------------------------------------------------0054 009D _rtcc_int movwf tmr_w ; сохраняем w и _status
0055 0803 movf _status,w ; в собственные регистры
0056 009C movwf tmr_st ; для прерывания таймера
0057 0F8E incfsz _tmr0h,f ; увеличиваем счетчик 9-16 разрядов
0058 285B goto _r_i ; перехода через ноль нет - выход
0059 3087 movlw b'10000111'; сброс флагов переполнения для сигналов
005A 058D andwf flagh,f ; "зажигание", "топливо1,2","перебор"
MPASM 01.50 Released DET.ASM 6-23-1999 21:01:07 PAGE 5
LOC OBJECT CODE SOURCE TEXT
VALUE
005B 110B _r_i bcf _intcon,2 ; сброс флага прерывания от таймера
005C 081C movf tmr_st,w ; восстановление регистров
005D 0083 movwf _status ; STATUS
005E 081D movf tmr_w,w ; и W
005F 0009 retfie ; выход из прерывания
;--------------------------------------------------------------0060 108B int0 bcf _intcon,1 ; сброс флага прерывания int
0061 1C06 RB btfss _portb,inpb ; проверяем фронт сигнала
0062 2888 goto RB_z ; задний фронт сигнала "зажигание"
; _|
0063 1086 bcf _portb,outc ; начинаем выдавать сигнал "зажигание"
0064 158C bsf flag,3 ; ставим флаг начала выдачи сигнала
0065 3003 movlw b'00000011' ; 1:16 период 6,4mks по |_
0066 0062 option ; загружаем в регистр OPTION
0067 080F movf owh,w ; текущее значение времени
0068 021E subwf temph,w ; минус сохраненное значение
0069 009A movwf perh ; начала отсчета дает
006A 0810 movf ow,w ; значение периода
006B 021F subwf templ,w ; (perh,per) содержит значение периода
006C 009B movwf per
006D 1C03 btfss _status,c
006E 039A decf perh,f
006F 081F movf templ,w
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.