;*******************************************************************
;ааааааааааааааааааааааааа
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
CMааааа equаааа 0x19ааааа
;hundreds of thousands
conta1а equаааа 0x1Aааааа
:first counter register
conta2а equаааа 0x1Bааааа
;second counter register
Nаааааа equаааа 0x1Cааааа
;general register
zeriааа equаааа 0x20ааааа
;number of cycles without signal
;
;***************************а MAIN
PROGRAM а
ааааа orgаааа 0
startааааааа
ааааааа movlwаа 0x27
ааааааа optionааааааааааааааааа ;load 00100111 in option
register
ааааа movlw 0x10
ааааааа movwfаа intconааааааааа ;enable interrupts
ааааа movlw .20
ааааааа movwfаа zeriаааааааааааа
ааааа clrfааа porta
ааааааа clrfааа portbаааааааааа
ааааааа bsfаааа status,5ааааааа
ааааа movlwаа 0x10
ааааааа movwfаа trisaаааааааааа ;porta<0_3>=output,
porta<4>=input
ааааааа clrfааа trisbаааааааааа ;potrb<0_7>=output
ааааааа bcfаааа status,5ааааааа
ааааааа movlwаа 0x08ааааааааааа ;all the segments are switched on
ааааааа movwfаа unitaаааааааааа ;to test the displays
ааааа movwfаа decimi
ааааа movwfаа cents
ааааа movwfаа esp
ааааааа movlwаа .20аааааааааааа ;test refresh (0.5sec wide)
ааааааа movwfаа conta_rаааааааа
loop1аа callааа refreshаааааааа ;Refresh of the displays
ааааа decfszа conta_r
ааааа gotoааа loop1
loop5аа clrfааа tmrаааааааааааа
ааааааа bsfаааа status,5
ааааааа movlwаа 0x01
ааааааа movwfаа trisbаааааааааа ;-
ааааааа bcfаааа status,5ааааааа ; |
ааааааа movlwаа .99аааааааааааа ; |
ааааа movwfаа conta1ааа
аааааа; |
un_msаа nopаааааааааааааааааааа ; |
ааааа nopаааааааааааааааааааа ; |
ааааа nopаааааааааааааааааааа ; |
ааааа nopаааааааааааааааааааа ; |
ааааа nopаааааааааааааааааааа ; |
ааааааа nopаааааааааааааааааааа ; |-а 1msec delay
ааааа nopаааааааааааааааааааа ; |
ааааа decfszа conta1ааааааааа ; |
ааааааа gotoааа un_msаааааааааа ; |
ааааааа nopаааааааааааааааааааа ; |
ааааааа nopаааааааааааааааааааа ; |
ааааа nopаааааааааааааааааааа ; |
ааааа nopаааааааааааааааааааа ; |
ааааа nopаааааааааааааааааааа ; |
ааааааа bsfаааа status,5ааааааа ; |ааааааа
ааааааа
clrfааа trisbаааааааааа ;-
ааааааа bcfаааа status,5ааааааааааа
ааааааа callааа prescalerаааааа ;put the counted number into
H_byte-L_byte
ааааааа movfааа H_byteааааааааа
ааааа btfssаа status,2ааааааа ;test: H_byte=0
ааааааа gotoааа cal1_msаааааааа ;no
ааааааа btfscаа L_byte,7ааааааа ;yes, then test if L_byte<=128
ааааааа gotoааа cal1_msаааааааа ;no
ааааааа clrfааа tmrаааааааааааа ;yes
ааааааа bsfаааа status,5
ааааа movlwаа 0x01
ааааааа movwfаа trisbаааааааааа ;-
ааааааа bcfаааа status,5ааааааа ; |
аааааа аmovlwаа
.20аааааааааааа ; |
ааааааа movwfаа conta_rаааааааа ; |
looprаа callааа refreshаааааааа ; |
ааааааа decfszа conta_rаааааааа ; |
ааааааа gotoааа looprаааааааааа ; |
ааааааа movlwаа .4ааааааааааааа ; |- 0.5 sec delay
("refresh" is called
ааааааа movwfаа Nаааааааааааааа ; |аааааааааааааааа 20 times)
waitааа decfszа Nаааааааааааааа ; |
ааааааа gotoааа waitааааааааааа ; |
ааааааа nopаааааааааааааааааааа ; |
ааааааа nopаааааааааааааааааааа ; |
ааааааа bsfаааа status,5ааааааа ; |
ааааааа clrfааа trisbаа
аааааааа;-
ааааааа bcfаааа status,5ааааааа ;аааа
ааааааа callааа prescalerаааааа ;put the counted number into
H_byte-L_byte
ааааааа movfааа H_byteааааааааа ;
ааааааа btfssаа status,2ааааааа ;test if H_byte=0
ааааа gotoааа cal05аааааааааа ;NO
ааааааа btfscаа L_byte,7ааааааа ;yes, then test if L_byte<=127
ааааа gotoааа cal05аааааааааа ;NO
ааааа movfа L_byteааааааааааа
ааааа btfss status,2ааа
ааааа goto lamp
ааааааа clrfааа espаааааааааааа ;no input signal is detected
ааааааа clrfааа unitaаааааааааа ;clear all the displays and show
ааааааа clrfааа decimiааааааааа ;zero without blinking for
"zeri" times
ааааа clrfа cents
ааааа decfszааааа zeri
ааааа gotoа loop5
ааааа bcfаа intcon,1
ааааа sleep
ааааа gotoа loop1
lampааа movlwаа 0x14ааааааааааа ;blinking modeа
ааааааа movwfаа Nаааааааааааааа
giroааа callааа ritardoаааааааа
ааааа decfszааааа N
ааааа gotoа giroа
ааааа goto cal05
;
cal1_ms clrfааа Uаааааааааааааа ;put the right values into the 4
displays
ааааааа clrfааа Dаааааааааааааа ;registers and add 3 to the
exponent
ааааааа clrfааа Hаааааааааааааа ;to multiply by one thousand
ааааааа clrfааа Mаааааа
аааааааа
ааааа clrfааа DM
ааааа clrfааа CM
ааааа movlwаа 0x03
ааааа movwfаа esp
ааааа callааа calcolo
ааааа movlwаа .20
ааааа movwfаа conta_r
ааааа gotoааа loop1
;
cal05аа clrfааа Uаааааааааааааа ;multiply the number by 2 and
put the
ааааааа clrfааа Dаааааааааааааа ;right values into the 4 displays
regs
ааааааа clrfааа Hааааааааааааааа
ааааа clrfааа M
ааааа clrfааа DM
ааааа clrfааа CM
ааааа btfscаа H_byte,7
ааааа callааа sessant
ааааа bcfаааа status,0
ааааа rlfаааа L_byte
ааааа rlfаааа H_byte
ааааааа clrfааа esp
ааааааа callааа calcolo
ааааа gotoааа loop5
;
;
; *****************************аааа Delay
subroutine
ritardo movlwаа .8ааааааааааааа ; -аааа
ааааааа movwfаа conta1ааааааааа ;а
|
ааааааа nopаааааааааааааааааааа ;а |
betaааа movlwаа .0ааааааааааааа ;а
|
ааааааа movwfаа conta2ааааааааа ;а
|_ 62.5 microsec delay
alfaааа decfszа conta2ааааааааа ;а
|
ааааа gotoааа alfaааааааааааа ;а
|
ааааааа nopаа аааааааааааааа ;а |
ааааааа decfszа conta1ааааааааа ;а
|
ааааа gotoааа betaааааааааааа ;а
|
ааааа movlw .14аааааааа ;а |
ааааа movwf conta2ааааааааааа ;а |
gamma decfszааааа conta2ааааааааааа ;а |
ааааа gotoа gammaаааааа ;а
|
ааааа nopаааааааааааааа ;а |
ааааа nopааааааа аааааа ;а |
ааааааа returnааааааааааааааааа ; -
; *****************************а choice
of the right segments
segmentiааа nop
ааааааа movfааа cifra,0
ааааааа addwfаа pcааааааааааааа ;return into W the right set of
segments
ааааааа retlwаа 0x7Eааааааааааа ;to be ligthed for each digit
ааааа retlw 0x0C
ааааа retlw 0xB6
ааааа retlw 0x9E
ааааа retlw 0xCC
ааааа retlw 0xDAаааааааааааа
ааааа retlw 0xFA
ааааа retlw 0x0E
ааааа retlw 0xFE
ааааа retlw 0xDE
;
; ***************************** refresh subroutine:а 250 mSec
refresh movfааа unita,0
ааааааа movwfаа cifraааааааааа
ааааа callааа segmenti
ааааа movwf portb
ааааааа bsfаааа porta,0аааааааа
ааааа callааа ritardo
ааааааа bcfаааа porta,0ааааааа
ааааа movfааа decimi,0
ааааааа movwfаа cifraаааааааааа
ааааа callааа segmenti
ааааа movwf portb
ааааааа bsfаааа porta,1ааааааа
ааааа callааа ritardo
ааааааа bcfаааа porta,1аааааааа
ааааа movfааа cents,0
ааааааа movwfаа cifraааааааааа
ааааа callааа segmenti
ааааа movwf portb
ааааааа bsfаааа porta,2аааааа
ааааа callааа ritardo
ааааааа bcfаааа porta,2аааааа
ааааа movfааа esp,0
ааааааа movwfаа cifraааааааааа
ааааа callааа segmenti
ааааа movwf portb
ааааааа bsfаааа porta,3аааааа
ааааа callааа ritardo
ааааааа bcfаааа porta,3аааааа
ааааа return
; ************** subroutine to extract the value contained in prescaler
prescalerаааааа movfааа tmr,0
ааааааа movwfаа H_byteааааааааа ;make a copy of the counter into
H_byte
ааа ааааclrfааа
Nаааааааааааааа
cicloаа bcfаааа portb,0
ааааааа bsfаааа portb,0
ааааааа bcfаааа portb,0аааааааа ;give un edge to the input controller
ааааааа incfааа Nаааааааааааааа
ааааааа movfааа H_byte,0ааааааа ;make a copy of H_byte into W
ааааааа xorwf ааtmr,0аааааааааа ;control if tmr is changed
(tmr=H_byte)
ааааааа btfscаа status,2ааааааа
ааааааа gotoааа ciclo
ааааааа movlwаа 0xFF
ааааааа movwfаа L_byteааааааааа
ааааа movfааа N,0аааааааааааа
ааааааа subwfаа L_byteааааааааа ;-|__ L_byte=256-N
ааааа incfааа L_byteааааааааа ;-|ааа
ааааа return
; ****************************** frequency calculation subroutine
calcolo movlwаааа .20
ааааа movwf zeri
ааааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit7 of H_byte
ааааа gotoааа c_2
ааааа movlwаа 0x03
ааааа addwfаа DM
ааааа movlwаа 0x02
ааааа addwfа аM
ааааа movlwаа 0x07
ааааааа addwfаа H
ааааа movlwаа 0x06
ааааа addwfаа D
ааааа movlwаа 0x08
ааааааа addwfаа Uаааааааааааааа ;if bit7=1 then add 32768
c_2аааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit6 of H_byte
ааааа gotoааа c_3
ааааа movlwаа 0x01
ааааа addwfаа DM
ааааа movlwа а0x06
ааааа addwfаа M
ааааа movlwаа 0x03
ааааааа addwfаа H
ааааа movlwаа 0x08
ааааа addwfаа D
ааааа movlwаа 0x04
ааааааа addwfаа Uаааааааааааааа ;if bit6=1 then add 16384
c_3аааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit5 of H_byte
ааааа gotoааа c_4
ааааа movlwаа 0x08
ааааа addwfаа M
ааааа movlwаа 0x01
ааааааа addwfаа H
ааааа movlwаа 0x09
ааааа addwfаа D
ааааа movlwаа 0x02
ааааааа addwfаа Uаааааааааааааа ;if bit5=1 then add 8192
c_4аааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit4 of H_byte
ааааа gotoааа c_5
ааааа movlwаа 0x04
ааааа addwfаа M
ааааа movlwа а0x09
ааааа addwfаа D
ааааа movlwаа 0x06
ааааааа addwfаа Uаааааааааааааа ;if bit4=1 then add 4096
c_5аааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit3 of H_byte
ааааа gotoааа c_6
ааааа movlwаа 0x02
ааааа addwfаа M
ааааа movlwаа 0x04
ааааа addwfаа D
ааааа movlwаа 0x08
ааааааа addwf ааUаааааааааааааа ;if bit3=1 then add 2048
c_6аааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit2 of H_byte
ааааа gotoааа c_7
ааааа movlwаа 0x01
ааааа addwfаа M
ааааа movlwаа 0x02
ааааа addwfаа D
ааааа movlwаа 0x04
ааааааа addwfаа Uаааааааааааааа ;if bit2=1 then add 1024
c_7аааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit1 of H_byte
ааааа gotoааа c_8
ааааа movlwаа 0x05
ааааааа addwfаа H
ааааа movlwаа 0x01
ааааа addwfаа D
ааааа movlwаа 0x02
ааааааа addwfаа Uаааааааааааааа ;if bit1=1 then add 512
c_8аааа rlfаааа H_byte
ааааааа btfssаа status,0ааааааа ;check bit0 of H_byte
ааааа gotoааа c_9
ааааа movlwаа 0x02
ааааааа addwfаа H
ааааа movlwаа 0x05
ааааа addwfаа D
ааааа movlwаа 0x06
ааааааа addwfаа Uаааааааааааааа ;if bit0=1 then add 256
c_9аааа rlfаааа L_byte
ааааааа btfssаа status,0ааааааа ;check bit7 of L_byte
ааааа gotoааа c_10
ааааа movlwаа 0x01
ааааааа addwfаа H
ааааа movlwаа 0x02
ааааа addwfаа D
ааааа movlwаа 0x08
ааааааа addwfаа Uаааааааааааааа ;if bit7=1 then add 128
c_10ааа rlfаааа L_byte
ааааааа btfssаа status,0ааааааа ;check bit6 of L_byte
ааааа gotoааа c_11
ааааа movlwаа 0x06
ааааа addwfаа D
ааааа movlwаа 0x04
ааааааа addwfаа Uаааааааааааааа ;if bit6=1 then add 64
c_11ааа rlfаааа L_byte
ааааааа btfssаа status,0ааааааа ;check bit5 of L_byte
ааааа gotoааа c_12
ааааа movlwаа 0x03
ааааа addwfаа D
ааааа movlwаа 0x02
ааааааа addwfаа Uаааааааааааааа ;if bit5=1 then add 32
c_12ааа rlfаааа L_byte
ааааааа btfssаа status,0ааааааа ;check bit4 of L_byte
ааааа gotoааа c_13
ааааа movlwаа 0x01
ааааа addwfаа D
ааааа movlwаа 0x06
ааааааа addwfаа Uаааааааааааааа ;if bit4=1 then add 16
c_13ааа rlfаааа L_byte
ааааааа btfssаа status,0ааааааа ;check bit3 of L_byte
ааааа gotoааа c_14
ааааа movlwаа 0x08
ааааааа addwfаа Uаааааааааааааа ;if bit3=1 then add 8
c_14ааа rlfаааа L_byte
ааааааа btfssаа status,0ааааааа ;check bit2 of L_byte
ааааа gotoааа c_15
ааааа movlwаа 0x04
ааааааа addwfаа Uаааааааааааааа ;if bit2=1 then add 4
c_15ааа rlfа аааL_byte
ааааааа btfssаа status,0ааааааа ;check bit1 of L_byte
ааааа gotoааа c_16
ааааа movlwаа 0x02
ааааааа addwfаа Uаааааааааааааа ;if bit1=1 then add 2
c_16ааа rlfаааа L_byte
ааааааа btfssаа status,0ааааааа ;check bit0 of L_byte
ааааа gotoааа c_17
ааааа movlwаа 0x01
аааа аааaddwfаа
Uаааааааааааааа ;if bit0=1 then
add 1
c_17ааа callааа riporti
ааааааа movfааа CM,0ааааааааааа ;the 1st significant digit (MSD) is
searched
ааааааа btfssаа status,2ааааааа ;and a 4th significant digit
approximation
ааааааа gotoааа appcmnzаааааа аа;is made
ааааааа movfааа DM,0ааааааааааа
ааааааа btfssаа status,2
ааааааа gotoааа appdmnz
ааааааа movfааа M,0ааааааааааа
ааааааа btfscаа status,2
ааааааа gotoааа fuoriаааааааааа
ааааааа movfааа U,0ааааааааааа
ааааааа movwfаа N
ааааааа movlwаа 0x05
ааааа subwfаа N
ааааааа btfssаа status,0
ааааааа gotoааа fuori
ааааааа incfааа D
ааааааа gotoааа fuori
appdmnz movfааа D,0аааааааааааа ; DM is the MSD
ааааааа movwfаа N
ааааааа movlwаа 0x05
ааааа subwfаа N
ааааааа btfssаа status,0
ааааааа gotoааа fuori
ааааааа incfаа аH
ааааааа gotoааа fuori
appcmnz movfааа H,0аааааааааааа ;CM is the MSD
ааааааа movwfаа N
ааааааа movlwаа 0x05
ааааа subwfаа N
ааааааа btfssаа status,0
ааааааа gotoааа fuori
ааааааа incfааа M
fuoriаа callааа riporti
ааааааа movfааа CM,0ааааааааааа ;put the 4th significant digit into
ааааааа btfssаа status,2ааааааа ;the 4 display registers
ааааааа gotoааа cmnzааааааааааа ;and put into esp the rigth value
ааааааа movfааа DM,0ааааааааааа
ааааа btfssаа status,2
ааааа gotoааа dmnz
ааааа movfааа M,0
ааааа btfssаа status,2
ааааааа gotoа ааmnzаааааааааааа
ааааааа movlwаа 0x02ааааааааааа ;U is the MSD
ааааа addwfаа espаааааааааааа
ааааааа movfааа H,0
ааааа movwfаа unita
ааааа movfааа D,0
ааааа movwfаа decimi
ааааа movfааа U,0
ааааа movwfаа cents
ааааааа gotoааа esci
mnzаааа movlwаа 0x03ааааааааааа ;M is the MSD
ааааа addwfаа espаааааааааааа
ааааа movfааа M,0
ааааа movwfаа unita
ааааааа movfааа H,0
ааааа movwfаа decimi
ааааа movfааа D,0
ааааа movwfаа cents
ааааааа gotoааа esci
dmnzааа movlwаа 0x04ааааааааааа ;DM is the MSD
ааааа addwfаа espаааааааааааа
ааааа movfааа DM,0
ааааа movwfаа unita
ааааа movfааа M,0
ааааа movwfа аdecimi
ааааааа movfааа H,0
ааааа movwfаа cents
ааааааа gotoааа esci
cmnzааа movlwаа 0x05ааааааааааа ;CM is the MSD
ааааа addwfаа espаааааааааааа
ааааа movfааа CM,0
ааааа movwfаа unita
ааааа movfааа DM,0
ааааа movwfаа decimi
ааааа movfааа M,0
ааааа movwfаа cents
esciааа return
; ****************************** carry subroutine
riporti movfааа U,0
ааааа movwfаа N
ripuааа movfааа N,0аааааааааааа ;check if units>10
ааааа movwfаа U
ааааа incfааа D
ааааа movlwаа 0x0A
ааааа subwfаа N
ааааааа btfscаа status,0
ааааа gotoааа ripu
ааааа decfааа D
ааааа movfааа D,0
ааааа movwfаа N
ripdааа movfааа N,0 аааааааааааа;check if tens>10
ааааа movwfаа D
ааааааа incfааа H
ааааа movlwаа 0x0A
ааааа subwfаа N
ааааааа btfscаа status,0
ааааа gotoааа ripd
ааааааа decfааа H
ааааааа movfааа H,0
ааааа movwfаа N
ripcааа movfааа N,0аааааааааааа ;check if hundreds>10
ааааааа movwfаа H
ааааа incfааа M
ааааа movlwаа 0x0A
ааааа subwfаа N
ааааааа btfscаа status,0
ааааа gotoааа ripc
ааааа decfааа M
ааааа movfааа M,0
ааааа movwfаа N
ripmааа movfааа N,0аааааааааааа ;check if thousands>10
ааааа movwfаа M
ааааа incfааа DM
ааааа movlwаа 0x0A
ааааа subwfаа N
ааааааа btfscаа status,0
ааааа gotoааа ripm
ааааа decfааа DM
ааааа movfааа DM,0
ааааа movwfаа N
ripdmаа movfааа N,0аааааааааааа ;check if tens of thousands>10
ааааа movwfаа DM
ааааа incfааа CM
ааааа movlwаа 0x0A
ааааа subwfаа N
ааааааа btfscаа status,0
ааааа gotoааа ripdm
ааааа decfааа CM
ааааа return
; ****************************** subroutine to add 64K
sessant movlwаа 0x06
ааааа addwfаа DM
ааааа movlwаа 0x05
ааааа addwfаа M
ааааа movlwаа 0x05
ааааааа addwfаа H
ааааа movlwаа 0x03
ааааа addwfаа D
ааааа movlwаа 0x06
ааааааа addwfаа Uаааааааааааааа ;add 65536
ааааа return
аааа END
;----------------
╧хЁхщЄш:
/├ыртэр /
CBuild/
JavaScript 1.2-5.6/
Delphi6/
I2C ъюэЄЁюыыхЁ√/
AVR ъюэЄЁюыыхЁ√/
╧╦╚╤/
AHDL/
VHDL/
LPT EPP/ LPT ECP/ PCI/ COM port/ I2C/ RS-232/ Используются технологии uCoz
|