00A3 2849 goto exit ; идем на выход
;--------------------------------------------------------------00A4 read_EEPROM ; в adrk адрес интервала коррекции
00A4 0814 movf adrk,w ; запись через регистр w
00A5 0089 movwf _eeadr ; в регистр адреса EEPROM
00A6 138B bcf _intcon,7 ; запрет прерываний
00A7 1683 bsf _status,rp0 ;переключаем страницу памяти
00A8 1408 bsf _eecon1,rd ; ставим бит чтения EEPROM
00A9 1283 bcf _status,rp0 ;переключаем на начальную страницу
00AA 0808 movf _eedata,w ; записываем прочитанные данные
00AB 0093 movwf tmp ; в w и tmp
00AC 178B bsf _intcon,7 ; разрешаем прерывания
00AD 0008 return ; в tmp и w возвращается значение из EEPROM
;--------------------------------------------------------------00AE make_adrk
00AE 081B movf per,w ; считываем мр периода
00AF 0093 movwf tmp ; записываем в tmp
00B0 081A movf perh,w ; пересылаем ср периода в
00B1 0094 movwf adrk ; регистр adrk
00B2 0D93 rlf tmp,f ; производим два сдвига влево
00B3 0D94 rlf adrk,f ; полученный результат в регистре
MPASM 01.50 Released DET.ASM 6-23-1999 21:01:07 PAGE 7
LOC OBJECT CODE SOURCE TEXT
VALUE
00B4 0D93 rlf tmp,f ; adrk равен периоду деленному на 0x40
00B5 0D94 rlf adrk,f
00B6 3020 movlw 0x20 ; сравниваем adrk с 0x20
00B7 0214 subwf adrk,w
00B8 1C03 btfss _status,c ; если меньше -> на выход
00B9 0008 return ; выход: в adrk адрес интервала коррекции
00BA 30F0 movlw b'11110000'; если больше -> маскируем 4 младших
00BB 0594 andwf adrk,f ; разряда и меняем местами ср и мр
00BC 0E94 swapf adrk,f ; получаем период деленный на 0x400
00BD 0008 return ; выход: в adrk адрес интервала коррекции
;--------------------------------------------------------------00BE create_inj
00BE 1E05 btfss _porta,idl ; если IDL = 0
00BF 28F2 goto _make_ex ; то переход на перезапись результата
00C0 180C btfsc flag,0 ; момент перехода установлен?
00C1 28E1 goto make_double; идем на сравнение текущего периода
00C2 082A movf o_inj_h,w ; ср старого значения длительности
00C3 0224 subwf tjdh,w ; вычитаем из текущего
00C4 1C03 btfss _status,c ; перенос?
00C5 28F2 goto _make_ex ; ср текущей длит. > ср предыдущего
00C6 0094 movwf adrk ; записываем ср разности
00C7 082B movf o_inj,w ; мр старого значения
00C8 0225 subwf tjd,w ; вычитаем из предыдущего
00C9 1C03 btfss _status,c ; перенос?
00CA 0394 decf adrk,f ; уменьшаем ср разности
00CB 0093 movwf tmp ; записываем мр разности
00CC 0183 clrf _status ; сброс переноса
00CD 0CAA rrf o_inj_h,f ; делим старое значение длительности
00CE 0CAB rrf o_inj,f ; на два; теперь сравниваем разность и
; половину дредыдущей длительности
00CF 0814 movf adrk,w ; загружаем ср разности
00D0 022A subwf o_inj_h,w ; вычитаем из ср половина длительности
00D1 1C03 btfss _status,c ; перенос?
00D2 28DB goto ok_inj ; ср разности > ср половины длительности
00D3 1D03 btfss _status,z ; флаг нуля
00D4 28F2 goto _make_ex ; ср разности < ср половины длительности
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.