50M頻率表的電路圖及源程序
電路圖:
源程序:
;*******************************************************************
; FMETER.ASM
; 4 digits auto-ranging frequency-meter
; made by Simone Benvenuti & Andrea Geniola
; e-mail: simone.benvenuti@studenti.ing.unipi.it
; andrea.geniola@studenti.ing.unipi.it
;*******************************************************************
;
; A frequency counter which can read frequencies from 0Hz to 50MHz is
; here implemented using a PIC microcontroller. The basic hardware for
; the measurement circuit is shown below: the measure result can be read
; on 4 seven-segments displays in the engeneering notation (A.BC * 10^D).
; The displays are driven using only 11 output pins and 4 transistors;
; during a refresh cycle each digit is turned on for 62.5 usec
; The imput frequency is "gated" for a precise duration of time. The gate
; is implemented in software as an accurate delay. In order to minimize
; the error the gate is 1msec wide if the frequency is above 256KHz,
; otherwise is 1msec wide. If the frequency is below 128Hz the digits
; blink to warn that the error can be greater than the device resolution.
; To minimize the energy consumption the PIC turns in sleep mode if no
; input signal is detected for 10sec (this period is software tunable),
; but it wake-up itself immediately when the input is stimulated.
; The program is written for the PIC16C84 but cheaper PICs (as PIC16C61)
; can be used.
;
; ________________
; cents gnd -| RA2 RA1 |- tenths gnd
; esp gnd -| RA3 RA0 |- units gnd
; input -/\/\/\/\--+-----| RA4/TOCKI |- ___a___
; 470ohm | -| |- 4 MHz cristal | |
; | gnd-| |- VDD 3..5 Volt f| |b
; input control +-----| RB0 Rb7 |- "g" segment | g |
; "a" segment -| RB1 RB6 |- "f" segment |-----|
; "b" segment -| RB2 RB5 |- "e" segment e| |c
; "c" segment -| RB3 RB4 |- "d" segment | d |
; ---------------- -------
;*******************************************************************
;
LIST p=16C84, wdte=0 ; PIC16C84 is the target processor
;
;status registers:
pc equ 02 ;program counter
porta equ 05 ;I/O register
portb equ 06 ;I/O register
status equ 03 ;status register
tmr equ 01 ;8 bits counter
trisa equ 0x5 ;port "a" direction register
trisb equ 0x6 ;port "b" direction register
intcon equ 0x0B ;interrupt control register
;general registers:
unita equ 0x0C ;display units
decimi equ 0x1D ;display tenths
cents equ 0x1E ;display cents
esp equ 0x1F ;display exponent
H_byte equ 0x10 ;high_byte of the read number (N)
L_byte equ 0x11 ;low_byte of the read number (N)
conta_r equ 0x12 ;refresh counter
cifra equ 0x13 ;parameter
U equ 0x14 ;units
D equ 0x15 ;tens
H equ 0x16 ;hundreds
M equ 0x17 ;thousands
DM equ 0x18 ;tens of thousands
addwf DM
movlw 0x05
addwf M
movlw 0x05
addwf H
movlw 0x03
addwf D
movlw 0x06
addwf U ;add 65536
return
END