hvordan måle frekvens i 89c51?

E

ehsanelahimirza

Guest
hallo

Jeg vil vite hvordan du kan måle frekvensen bruker 89c51.
min frequecy serien er nesten 6 kHz til 7khz.
Jeg trenger litt hjelp angående koden.

Tusen takk

 
Kan du forklare hva som er kravet.Som er den frekvens generere kilde.Er du genererer gjennom programvare eller ext kilde.

 
Jeg genererer frequecny gjennom fuktighet sensor.som er acatually generere firkant pulser bruker RC.luftfuktighet sensoren er en variabel C, slik at eventuelle endringer i luftfuktighet vil resultere i endring av sin Capacitance.hva du skal gjøre nå?

 
Hei,
Å måle frekvensen bruker 89C51 du kan bruke counter 0 eller teller 1 telle nember av pulser i miliseconds.Du bør bruke krystall til 24 MHz.

 
tvthang wrote:

Hei,

Å måle frekvensen bruker 89C51 du kan bruke counter 0 eller teller 1 telle nember av pulser i miliseconds.
Du bør bruke krystall til 24 MHz.
 
Slik mearsure bør du koble signalet til INT0 (for eksempel), bruker Tidtaker 0 i 89C51 å telle bredden på pulsen plikt:
- TMOD = 00001001b = 09h (GATE bits = 1, tidtaker kontrolleres av INT0 og TR)
- TR0 = 1
- Signal (= INT0) = 0: ingen klokke fra interne OSC
- Signal = 1: intern bryter tett, klokke gå i timer0 (XTAL = 24Mhz, så Tclock = 0.5uS, mindre T desto mindre feil)
- Bruk av avbruddsordrelinje av fallende kanten å lese time0 (TH0, TL0) viser frekvensen av signal (f = 1000000 / (TH0 * 256 TL0) Hz)
LJMP MAIN
Org 0003H
LJMP READ_TIMER0
MAIN:
MOV TMOD, # 09H
SETB TR0
BEGIN:
; MAIN PROGRAM
; DISPLAY ENDRET TH0 OG TL0 ON LED 7 SEGS.
LJMP BEGIN
;------------------------------
READ_TIMER0:
; LEST TH0 OG TL0
RETI
;--------------------------------

 
Jeg kan ikke forstå koden.så jeg har ikke gjort avbryter før dette.

hvordan jeg kan noen numeriske verdien av frekvens ut av det, jeg vil sende den til seriell eller lagre i "A".

plz hjelpe meg i denne saken som jeg virkelig har ikke brukt avbryter og tidtakere før.

takk

 
Hva er frekvens?Det er totalt antall pulser per second.Set timer i 1 sekund og telle antall pulser på andre pin.Numerical verdi av pulsene er ønsket frekvens.

 
frekvensen 6khz til 8khz.hvordan jeg kan dette neumeric verdi i et register eller en port

 
Du kan bruke divisjon logikk.
Øke din counter register når det er 200 pulses.So for 8-bits register du kan telle 50 kB pulser.

 
Nimish wrote:

Du kan bruke divisjon logikk.

Øke din counter register når det er 200 pulses.So for 8-bits register du kan telle 50 kB pulser.
 
Prøv å vite mer om avbryter og tidtakere,
så vil du ha stort omfang av tenkning hvis du brukte avbruddsordrelinje.

Hvis vi tenker sammen må du telle antall høyt nivå (de) i bestemt periode (1 sekund, eller tilsvarende antall ticks av systemet) "avhenger av din krystall"

Men det er maskinvare begrensninger hvis det er noen glitches i inngangssignal som du kan telle feil nummer.

Du kan definere avbruddsordrelinje pin slik at når skriving slå høyt det øker telleren (du kan bruke målingen på visse pin stedet for å avbryte, men du må ta den
1. høy av hver syklus ikke å telle når alle signal høy)

tidtaker vil hjelpe deg å gjøre avbrudd når du kommer visst antall ticks (= ett sekund), slik at nummeret på telleren vil være freq.og du kan gjøre gjennomsnittet for dette nummeret med forrige å glatte du resultatet.

 
ehsanelahimirza wrote:in assembly.
Jeg trenger noen kode
i forsamlingen.

takk
 

Welcome to EDABoard.com

Sponsor

Back
Top