The code below is for frequency meter 0-50Mhz.
it is posible to import in pbp;
Code:processor 16F84a
include p16f84a.inc
RAM equ h'0C'
YES equ 1
NO equ 0
;PORTA
CONFIGA equ B'00010000'
;Port B
CONFIGB equ B'00000000'
PULLUP equ NO
;OPTION
CONFOPT equ B'00100111'
;INTERRUPTION
CONFINT equ B'00000000'
cblock RAM
Temp
Temp0
TimeOut
SaveW
Result : 4
Count
Char
Thousand : 2
BCD0
BCD1
BCD2
BCD3
N
endc
Reset START
IntReq Intserv
IncPre macro
bsf PORTA,3
bcf PORTA,3
endm
Init macro
clrf PORTA
clrf PORTB
Bank1
Movlf CONFIGA,TRISA
Movlf CONFIGB,TRISB
Movlf CONFOPT,OPTION_REG
Movlf CONFINT,INTCON
Bank0
bsf POWER
endm
InitMeasure macro
Movlf B'00000011',Thousand ; Change: Thousand=(999)10
Movlf B'11100111',Thousand+1
clrf TMR0
clrf Result+1
clrf Result
endm
Ra3_out macro
Bank1
bcf TRISA,3
Bank0
endm
Ra3_in macro
Bank1
bsf TRISA,3
Bank0
endm
TJZ16 macro file16,address
Test file16
JZ TJZ16_MSB_ZERO
nop
nop
goto TJZ16_END
TJZ16_MSB_ZERO
Test file16 +1
JZ address
TJZ16_END
endm
ClearDisp macro
movlw b'00000001'
call SEND_CMD
call T1mS
endm
DataOk macro
bsf E
bcf E
endm
DDRam macro address
movlw 0x80 + address
call SEND_CMD
endm
Disp macro charvalue
movlw charvalue
call SEND_CHAR
endm
RSCmd macro
bcf RS
endm
RSChar macro
bsf RS
endm
ShiftL macro
movlw b'00011000'
call SEND_CMD
endm
T975us
Movlf .243 ,Temp0
Loop975us
nop
decfsz Temp0,f
goto Loop975us
return
;Name : Readprescal
;Function: Read the prescaler and store the result.
;Input : tmr0 and prescaler
;Output : Result +2 (tmr0) and Result +3 (prescaler)
;Call : None
;Register: Count
Readprescal
Movlf 255,Count
Movff TMR0,Result+2
INCREMENT
IncPre
incf Count,f
CJE TMR0,Result+2,INCREMENT
movf Count,w
sublw 255
movwf Result+3
return
; Bin To BCD conversion ( 32 bit word -> 8 digits )
; Bin in Result, Result+1, Result+2, Result+3
; BCD in BCD3, BCD2, BCD1, BCD0
Bin2BCD
clrc
Movlf .32,N
clrf BCD3
clrf BCD2
clrf BCD1
clrf BCD0
LoopBB
rlf Result+3,f
rlf Result+2,f
rlf Result+1,f
rlf Result,f
rlf BCD3,f
rlf BCD2,f
rlf BCD1,f
rlf BCD0,f
decfsz N,f
goto DecAdj
return
DecAdj
Movlf BCD3,FSR
call BCDAdj
Movlf BCD2,FSR
call BCDAdj
Movlf BCD1,FSR
call BCDAdj
Movlf BCD0,FSR
call BCDAdj
goto LoopBB
BCDAdj
movlw 3
addwf INDF,w
movwf Temp
btfsc Temp,3
movwf INDF
movlw 30H
addwf INDF,w
movwf Temp
btfsc Temp,7
movwf INDF
return
; Display Frequency stored in BCD3, BCD2, BCD1 and BCD0 (LSD)
DispFreq
DDRam 3
swapf BCD0,W
andlw 0FH
call DispHex
movf BCD0,W
andlw 0FH
call DispHex
Disp '.'
swapf BCD1,W
andlw 0FH
call DispHex
movf BCD1,W
andlw 0FH
call DispHex
swapf BCD2,W
andlw 0FH
call DispHex
Disp '.'
movf BCD2,W
andlw 0FH
call DispHex
swapf BCD3,W
andlw 0FH
call DispHex
movf BCD3,W
andlw 0FH
call DispHex
return
; Display hex digit
; input : w = hex
DispHex
addlw -0AH
SkipNC
addlw 7
addlw 3AH
call SEND_CHAR
return
Intserv
retfie
;____________________________________main_______________________
START Init
call INIT_LCD
movlw b'00001100'
call SEND_CMD
movlw b'00101000'
call SEND_CMD
Movlf 226,TimeOut
ClearDisp
Disp 'F'
Disp 'R'
Disp 'E'
Disp 'Q'
Disp 'U'
Disp 'E'
Disp 'N'
Disp 'C'
Disp 'Y
Disp 'M'
Disp 'E'
Disp 'T'
Disp 'E'
Disp 'R'
Disp ' '
call T1S
call T1S
ClearDisp
call T100mS
Disp ' '
Disp ' '
Disp '5'
Disp '0'
Disp ' '
Disp 'M'
Disp 'H'
Disp 'z'
Disp ' '
Disp ' '
call T1S
call T1S
ClearDisp
call T100mS
Disp 'F'
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp ' '
Disp 'H'
Disp 'z'
MEASURE InitMeasure
Ra3_in
call T975us
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
GATE TJZ16 Thousand,STOP
WAIT call T975us
Dec16 Thousand
btfss INTCON,T0IF
goto NO_OVERFLOW_TMR0
OVERFLOW_TMR0
bcf INTCON,T0IF
incf Result+1,f
JZ INC_RESULT
nop
nop
goto GATE
INC_RESULT
incf Result,f
goto GATE
NO_OVERFLOW_TMR0
nop
nop
nop
nop
nop
goto GATE
STOP Ra3_out
READ call Readprescal
call Bin2BCD
call DispFreq
TEST Test BCD0
SkipNZ
Test BCD1
SkipNZ
Test BCD2
SkipNZ
Test BCD3
SkipNZ
goto TIME_CONTROL
clrf TimeOut
goto MEASURE
TIME_CONTROL
incf TimeOut,F
JZ MESS_TIME_OUT
goto MEASURE
MESS_TIME_OUT
ClearDisp
Disp ' '
Disp 'A'
Disp 'R'
Disp 'R'
Disp 'E'
Disp 'T'
Disp ' '
Disp 'A'
Disp 'U'
Disp 'T'
Disp 'O'
call T1S
call T1S
bcf POWER
LOOP_STOP
goto LOOP_STOP
end