enkelt intensivering tilvækst en 16bit Timer

H

hhhsssmmm

Guest
Hej

Jeg har PIC18F2420 kører via 4MHz keramisk resonator .... og compiler anvendes C18.

Jeg kan enkelt skridt tilvækst TMR0 (8bit tilstand) bare ved at ændre TMR0L regsiter værdi fra 00 - FF.Så lader ....

TMR0L = 0;

Så jeg kan ændre TMR0 afbryde hvert eneste skridt blot ved kommandoen TMR0L ...(, der er fra 256us hele vejen til 1us).

Nu mit spørgsmål er, hvordan kan jeg udføre lignende enkelt intensivering til 16bit timer?Im forvirrede og derfor im beder siden 16bit timeren har to registre, der initiallize .... for eksempel for timer1 er initiallized fra 5ms, og du ønsker at enkelt skridt det ved øger den til 10ms .... vi har ...

5ms intiallized TMR1
-----------------------
TMR1L = 78;
TMR1H = EF;

..... det fra her, hvordan ville du, i en lignende 8bit mode, enkelt skridt i en 16bit timerindstilling hele vejen til 10ms?Please kan nogle en hjælpe mig her?

tak
Haseeb

 
Jeg tror du har misforstået det faktiske punkt i Timer.Du behøver ikke at øge det selv, det sker automatisk.Hvis du har indstillet timeren som en tæller, det vil tilvækst selv om hver CPU instruktion cyklus.

Så hvis du har:TMR0L = 0;
NOP
NOP
NOP
NOP

Værdien af TMR0L vil nu blive 4, fordi du
har gjort 4 instruktioner.

Du kan prescale timerlisten så det tæller hver andet, fjerde, 8., ....64. ....256th instruktion.Når den går over toppen (og starte på ny) at det genererer en Interrupt.

Med PIC18Fs Du har også CCP modul, som rent faktisk kan generere en afbryder, når Timer værdi er lig med den præ-valgte værdi i CCP særlige funktion registre.Så i stedet for at have en afbryder på
65.535 instruktion cykler, kan du gøre det generere en afbryder på en hyggelig runde tal på 50.000 instruktioner cykler,
hvilket gør timingen meget lettere

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smile" border="0" />
 
Tak for besvarelse.

ok jeg forstår din pointe.

Men formoder jeg havde brug for at øge 16bit timer efter hver 10ms INT .... hvordan ville du gøre dette ?.... lad mig forklare nærmere ...

formoder jeg havde et interrupt genereres på INT0 på hver 10ms.Så i INT0 ISR, vil jeg gerne igen initialisere 16bit timeren og få den tilvækst fra 5ms .... derefter på næste INT0 tilvækst fra 6ms .... derefter på næste INT0 tilvækst fra 7ms etc. .. hele vejen til 10ms ... derefter nulstille tilbage til 5ms igen på næste INT0 ..... betydning skiftende timeroptagelsen initiallization værdi på alle INT0 afbryder kun én gang.

Jeg ved, hvordan dette kan gøres ved bare masser af, hvis andre udtalelser, og jeg kan skrive det ønskede timerindstilling værdier i disse erklæringer .... men jeg ønsker det således, at det er den samme i operationen som gør det med og en 8bit timerindstilling .. ..

for 8bit timer, formoder jeg tilvækst en variabel pære på alle 10ms (INT0)
I INT0 ISR jeg derefter tildele pære variable variable til timer0 som .....

TMR0L = pære;

dette vil reinitiallize de timer0 til den nye værdi i stedet for mig at skulle beregne og skrive den ønskede værdi i TMR0L mig selv.

Så vil du følge mig ?....... i 8-bit timer lignende måde jeg ønsker at øge en 16bit timeren også.

Hvordan kan det ske?

Haseeb

 
Hvis du kun har brug for at øge en 16 bit værdi, hvorfor så ikke erklære en variabel (ikke bruger timer på alle) og tilvækst at variable, hver gang den ønskede begivenhed indtræffer?Du kan også oprette timeren så det tæller pulser på en bestemt bens, i stedet for at tælle instruktion cykelserier.

 
bruge auto reload af timeren.
ellers skrive ans ISR som vil genindlæse den ønskede værdi ved udgangen af downcount.
BTW tidstællere er designet til downcount.så dine reload værdi skal FF-count og FFFF-tæller.Du kan også angive det med et-tegn.

hcokTilføjet efter 3 minutter:nyder godt af dette program.

rhinskvin
Beklager, men du skal login for at se denne tilslutningskrav

 

Welcome to EDABoard.com

Sponsor

Back
Top