Микроконтроллерный расходомер топлива из Радио №11/2001

Приветствую всех.
У меня вопрос по поводу Микроконтроллерный расходомер топлива опубликованного в далеком 2001 году в " Радио" №11, автор публикации - А. Долгий, не уверен что он отслеживает что нибудь касаемо этого устройства (хотя очень хотелось бы). Пытаюсь разобраться с программированием PIC , в частности доработать данный расходомер - необходимо изменить "Литры в час" на "Литры в минуту" . Но с программированием сложновато одному разбираться. Вопрос ко всем кто может помочь (и к автору , если вдруг увидит это сообщение) - ниже исходник расходомера. Помогите пожалуйста разобраться с тремя вопросами: 1-й Как изменить время "отсчета" с "Литров в час" на "Литры в минуту"? 2-й вопрос - что за коэффициент (в программе)
Заранее спасибо за помощь.
У меня вопрос по поводу Микроконтроллерный расходомер топлива опубликованного в далеком 2001 году в " Радио" №11, автор публикации - А. Долгий, не уверен что он отслеживает что нибудь касаемо этого устройства (хотя очень хотелось бы). Пытаюсь разобраться с программированием PIC , в частности доработать данный расходомер - необходимо изменить "Литры в час" на "Литры в минуту" . Но с программированием сложновато одному разбираться. Вопрос ко всем кто может помочь (и к автору , если вдруг увидит это сообщение) - ниже исходник расходомера. Помогите пожалуйста разобраться с тремя вопросами: 1-й Как изменить время "отсчета" с "Литров в час" на "Литры в минуту"? 2-й вопрос - что за коэффициент (в программе)
- Код: Выделить всё
K05 equ d'500000'/(d'16'*d'256')
Заранее спасибо за помощь.
- Код: Выделить всё
#DEFINE RADIO
LIST P=PIC16F628
NOLIST
#include <P16F628.inc>
#include <fuel_cfg.inc>
FUE0 equ d'100' ;Число импульсов на 0,1 л
K05 equ d'500000'/(d'16'*d'256')
; Разряды порта B
; Входы
bDRT equ 0 ;INT
bMODE equ 6
bBUTN equ 7
;Выходы
ifdef RADIO
bDC0 equ 2
bDC1 equ 4
bDC2 equ 5
bDC3 equ 1
else
bDC0 equ 1
bDC1 equ 2
bDC2 equ 4
bDC3 equ 5
endif
bPWM equ 3 ;PWM
mDRT equ 1 << bDRT
mPWM equ 1 << bPWM
mMODE equ 1 << bMODE
mBUTN equ 1 << bBUTN
mDC0 equ 1 << bDC0
mDC1 equ 1 << bDC1
mDC2 equ 1 << bDC2
mDC3 equ 1 << bDC3
mDC equ mDC0|mDC1|mDC2|mDC3
ANODE equ PORTA
; Разряды порта A
ifdef RADIO
;Вход
bIGN equ 5
;Выходы
bAN1 equ 3 ;0,1
bAN2 equ 0 ;1
bAN3 equ 7 ;10
else
;Вход
bIGN equ 5
;Выходы
bAN1 equ 0 ;0,1
bAN2 equ 3 ;1
bAN3 equ 7 ;10
endif
mIGN equ 1 << bIGN
mAN1 equ 1 << bAN1
mAN2 equ 1 << bAN2
mAN3 equ 1 << bAN3
mAN equ mAN1|mAN2|mAN3
; Разряды PSW
b01L equ 1 ;Израсходовано 0,1 л
b2Hz equ 2 ;~2 Гц
bSB1 equ bAN3
bSB2 equ bAN2
bSB3 equ bAN1
cblock H'70'
DCD
FigPtr
FigSel
W_copy
STATUS_copy
FSR_copy
PSW
NL
NH
endc
cblock H'20'
; Израсходовано
EXP_S,EXP_D,EXP_E,EXP_T
; В баке
TNK_S,TNK_D,TNK_E,TNK_T
; Часовой расход
;LPH_L,LPH_H
LPH_S,LPH_D,LPH_E,LPH_T
; Напряжение батареи
U_OLD,U_NEW
UBT_S,UBT_D,UBT_E,UBT_T
T0CTR ;Счетчик прерываний от таймера
FUE_L ;Счетчик импульсов ДРТ
FUE_H
FUE0_L ;Число импульсов на 0,1 л
FUE0_H
AN_copy
TEMP
endc
#include <fuel_mac.inc>
;*********************************
ORG 0
goto START
ORG 4
movwf W_copy ; Сохраняем копии содержимого
movf STATUS,w ; регистров W, STATUS и FSR,
movwf STATUS_copy ; которое в процессе обработки
movf FSR,w ; прерывания может измениться.
movwf FSR_copy
L btfss INTCON,INTF
goto T0SERV
bcf INTCON,INTF
decf FUE_L,F
btfss STATUS,Z
goto T0SERV
movf FUE_H,f
btfsc STATUS,Z
goto L1
decf FUE_H,F
goto T0SERV
L1 bsf PSW,b01L
movf FUE0_L,W
movwf FUE_L
movf FUE0_H,W
movwf FUE_H
T0SERV btfss INTCON,T0IF
goto T0END
movlw mDC
movwf PORTB ; Гасим все цифры.
btfss PORTB,bBUTN
goto B1
movfw AN_copy
iorwf PSW,F
B1 comf AN_copy,W
btfsc PORTB,bBUTN
goto B2
andwf PSW,F
B2 decf FigSel,F
movf FigSel,W
BNZ FG1
movlw 3
movwf FigSel
FG1 movfw FigSel
call AN
movwf AN_copy
movwf ANODE
movfw FigSel
addwf FigPtr,W
movwf FSR
movfw INDF
FG3 btfss STATUS,Z
goto FG2
btfss AN_copy,bAN2
xorlw H'FF'
FG2 call CDC
movwf PORTB ; Зажигаем цифру
T0END decfsz T0CTR,F
goto ENDINT
movlw K05
movwf T0CTR
bsf PSW,b2Hz
ENDINT
movf FSR_copy,w ; Восстанавливаем состояние
movwf FSR ; спецрегистров, пользуясь их
movf STATUS_copy,w
movwf STATUS ; сохраненными копиями.
swapf W_copy,f
swapf W_copy,w
bcf INTCON,T0IF ; Сбрасываем флаг запроса
clrwdt
retfie ; прерывания и возвращаемся
; Порядок работы индикаторов
AN addwf PCL,F
nop
DT mAN3,mAN2,mAN1
; Коды, подаваемые на дешифратор
CDC andlw H'0F'
addwf PCL,F
retlw 0 ;0
retlw mDC0 ;1
retlw mDC1 ;2
retlw mDC0|mDC1 ;3
retlw mDC2 ;4
retlw mDC2|mDC0 ;5
retlw mDC2|mDC1 ;6
retlw mDC2|mDC1|mDC0 ;7
retlw mDC3 ;8
retlw mDC3|mDC0 ;9
retlw mDC ;A
retlw mDC ;B
retlw mDC ;C
retlw mDC ;D
retlw mDC ;E
retlw mDC ;F
INITADR
andlw H'07'
addwf PCL,F
DT FUE0_L,FUE0_H
DT TNK_D,TNK_E,TNK_T
DT EXP_D,EXP_E,EXP_T
; Главная программа
START
movlw 5
movwf CMCON ;Один компаратор COM2
bsf STATUS,RP0
bsf PCON,OSCF ;4 МГц
movlw B'00000011' ;t0pre 1:16
movwf OPTION_REG
bcf STATUS,RP0
movlw 8
movwf TEMP
INI1 decf TEMP
movfw TEMP
call INITADR
movwf FSR
movfw TEMP
call EEREAD
movwf INDF
movf TEMP,W
btfss STATUS,Z
goto INI1
movfw FUE0_L
movwf FUE_L
movfw FUE0_H
movwf FUE_H
clrf LPH_S
movlw 8
movwf LPH_D
movwf LPH_E
movwf LPH_T
SETTRIS ~mAN,~(mDC|mPWM)
movlw K05+1
movwf T0CTR
movlw 3
movwf FigSel
movlw TNK_S
movwf FigPtr
clrf PSW
I2 PWMSet
call VCONV
bsf INTCON,T0IE
bsf INTCON,INTE
bsf INTCON,GIE
LOOP:
btfss PORTA,bIGN
goto IGN_OFF ;Если выключено зажигание...
btfss PSW,b2Hz
goto L01L ;Если не прошло 0,5 с...
; А это делаем 2 раза в секунду...
bcf PSW,b2Hz
btfsc CMCON,C2OUT ;Исправлено ss на sc!
goto MORE
incf CCPR1L
goto VOLT
MORE decf CCPR1L
VOLT call VCONV
btfss PORTB, bMODE
goto TANK
; Режим "РАСХОД"
btfss PSW,bSB1
goto EX1
clrf EXP_D
clrf EXP_E
clrf EXP_T
EX1 movlw EXP_S
btfsc PSW,bSB2
movlw UBT_S
btfsc PSW,bSB3
movlw LPH_S
movwf FigPtr
goto LOOP
;
TANK
; Режим "ОСТАТОК"
movlw TNK_S
movwf FigPtr
btfss PSW,bSB1
goto TN1
INCR TNK_D
TN1 btfss PSW,bSB2
goto TN2
INCR TNK_E
TN2 btfss PSW,bSB3
goto LOOP
INCR TNK_T
;
L01L btfss PSW,b01L
goto LOOP
; Израсходовано 0,1 л
bcf PSW,b01L
EXP_INC
TNK_DEC
goto LOOP
; Зажигание выключено
IGN_OFF bcf INTCON,GIE
clrf PORTA
movlw mDC
movwf PORTB
; Сохраняем счетчики
STORE EEWRITE 2,TNK_D
EEWRITE 3,TNK_E
EEWRITE 4,TNK_T
EEWRITE 5,EXP_D
EEWRITE 6,EXP_E
EEWRITE 7,EXP_T
bsf STATUS,RP0
bcf EECON1,WREN
bcf STATUS,RP0
GO_ON ;sleep
btfsc PORTA,bIGN
goto START
goto GO_ON
;
; Подпрограммы
;
VCONV movfw U_NEW
movwf U_OLD
movfw CCPR1L
movwf U_NEW
movwf NL
movfw U_OLD
addwf NL,F
rrf NL
clrf NH
movlw UBT_T
movwf FSR
CONVERT
;Перед вызовом FSR=>разряд 0,1
clrf INDF ;1
decf FSR
clrf INDF ;10
decf FSR
clrf INDF ;100
decf FSR
clrf INDF ;1000
CV1000 add16c NL,NH,-.1000
incf INDF
btfsc STATUS,C
goto CV1000
add16c NL,NH,.1000
decf INDF
incf FSR
CV100 add16c NL,NH,-.100
incf INDF
btfsc STATUS,C
goto CV100
add16c NL,NH,.100
decf INDF
incf FSR
CV10 add16c NL,NH,-.10
incf INDF
btfsc STATUS,C
goto CV10
add16c NL,NH,.10
decf INDF
incf FSR
movf NL,W
movwf INDF
return
EEREAD
;Чтение из ячейки EEPROM в регистр W
bsf STATUS,RP0
movwf EEADR
bsf EECON1,RD
movfw EEDATA
bcf STATUS,RP0
return
; Исходные данные в EEPROM
ORG H'2100'
DE Low(FUE0),High(FUE0);
DE 3,9,9
DE 0,0,0
end