;--------------------------------------------------------------0004 org _IntVector ; вектор прерываний
0004 190B btfsc _intcon,2 ; переполнение таймера
0005 2854 goto _rtcc_int ; да - идем на обработку
;--------------------------------------------------------------0006 0091 movwf tmp_w ; сохраняем w и _status
0007 0803 movf _status,w ; в собственные регистры
0008 0092 movwf tmp_st ; w->tmp_w, STATUS->tmp_st
0009 118B bcf _intcon,3 ; сброс флагов разрешения прерываний
000A 120B bcf _intcon,4 ; от порта RB и int
000B 178B bsf _intcon,7 ; разрешение остальных прерываний (от таймера)
000C 0801 _save movf _tmr0,w ;сохранение текущего значения времени входа в
000D 009F movwf templ ;прерывание; мр
000E 080E movf _tmr0h,w ; таймера
000F 009E movwf temph ; ср
0010 081E movf temph,w ; сравниваем не
0011 020E subwf _tmr0h,w ; произошло ли прерывание от
0012 1D03 btfss _status,z ; таймера
0013 280C goto _save ; в момент сохранения
0014 081F movf templ,w ; чтобы не ошибиться на 0x100
0015 0201 subwf _tmr0,w ; сравниваем мр.
0016 1C03 btfss _status,c ; если не равен, то
0017 280C goto _save ; идем заново на сохранение
0018 188B btfsc _intcon,1 ; прерывание от ножки int
0019 2860 goto int0 ; идем на обработку
001A 0806 movf _portb,w ; считываем порт в регистр
001B 100B bcf _intcon,0 ; сбрасываем флаг прерывания от RB4-7
001C 1A06 RB5 btfsc _portb,inpd ; передний фронт сигнала?
001D 2830 goto RB5_z ; да - идем на обработку
; |_
001E 080F movf owh,w ; загружаем ср. начала отсчета периода
001F 021E subwf temph,w ; вычитаем из ср. текущего времени
0020 00A0 movwf tj0h ; получаем ср. начала отсчета "топлива"
0021 0810 movf ow,w ; относительно заднего фронта "зажигания"
0022 021F subwf templ,w ; аналогично с мр.
0023 00A1 movwf tj0 ; запись
0024 1C03 btfss _status,c ; перенос?
0025 03A0 decf tj0h,f ; пара (tj0h,tj0) содержит требуемое значение
0026 081F movf templ,w ; запись текущего времени
0027 00A3 movwf tn ; для использования его в качестве начала
0028 081E movf temph,w ; отсчета длительности импульса "топливо"
0029 00A2 movwf tnh ; (tnh,tn)
002A 204F call save_old ; вызов сохранения предыдущего значения
002B 1985 btfsc _porta, S_A ; проверяем настройку порта
002C 2849 goto exit ; синхронный впрыск - на выход
002D 1506 bsf _portb,inj1; выдаем импульс
MPASM 01.50 Released DET.ASM 6-23-1999 21:01:07 PAGE 4
LOC OBJECT CODE SOURCE TEXT
VALUE
002E 100D bcf flagh,0
002F 2849 goto exit ; выход и обработки прерывания
0030 1E06 RB5_z btfss _portb,inpd ; задний фронт сигнала?
0031 281C goto RB5 ; да - идем на обработку
; _|
0032 081F movf templ,w ; запись текущего времени
0033 00A5 movwf tjd ; в регистры
0034 081E movf temph,w
0035 00A4 movwf tjdh
0036 0822 movf tnh,w ; ср начала отсчета импульса "топливо"
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.