Long tidsforsinkelse ved hjælp af timeren

J

Jack / / ani

Guest
Hej alle,

Nogen idé om, hvordan man skaber lang tid forsinkelse hjælp 16f628a timer overflow interrupt, således at CPU er fri til at gøre andre opgaver?Jeg har brug for nogle funktion skrevet i CCS PIC for det samme?

Tak

 
Programmere timere til at afbryde på sin længste reload værdier, så på interrupt service rutine, forhøjelse af en variabel, hvis den variable matcher din ønskede tidsforsinkelse, så excute ønskede subroutine.

 
Boolean Timeout; / / Flag.Hvis det er sandt, gøre hvad du vil efter timeout.
statisk int8 gtimer0_overflow;

# int_timer0
timer0_isr ()
(
if (- gtimer0_overflow == 0)
Timeout = TRUE;
)I din primære kode, har du til at opsætte timer0, initialisere de globale variable gtimer0_overflow.For eksempel,setup_timer0 (RTCC_INTERNAL | RTCC_DIV_256)
Timeout = FALSE;
gtimer0_overflow = 3; / / Variable til kontrol timeout længde
enable_interrupts (int_timer0)
enable_interrupts (globale)

while (! timeout); / / gør noget, hvis Timeout = FALSEOvenstående eksempel sætte en 10 sek forsinkelse PIC18 MCU, 20MHz oscillator.Bemærk, at Timer0 er 16 bit PIC18.

 
Tak alle, jeg vil en af de output port pin til at gå højt til 10SEK og derefter gå lav 10secs og holde ved med at gentage på denne måde.

Enhver form for hjælp .....

 
# int_timer0
timer0_isr ()
(
if (- gtimer0_overflow == 0)
(
Timeout = TRUE;
output_toggle (PIN_D1);

)Dette vil igen PIN_D1 on / off i 10 sek.

 
Hi lguancho,

Tusind tak for dit brugbare svar.Output_toggle meget nyttig funktion her, men det er desværre ikke nævnt i CCS PIC hjælpe fil!Jeg ve tvivl tilbage,

Vil produktionen være højt eller lavt for første gang, når du bruger output_toggle () funktion, og hvordan kan jeg ændre det?

Hvordan har du beregne tidsforsinkelse for en enkelt timer overflow cyklus?

Tak igen

 
For det første kan du initialisere output pin til høj eller lav
såsom

output_high (PIN_D1), så du aktivere timer1 afbryder.Når timer1 overløb, vil PIN_D1 være lav.

Delay Beregning:

20MHz/4/256 = 19531.25Hz => Timer1 spring hver 1/19531.25 sek = 51.2us

Timer1 overflow hvis det reachs 65.536 => 65536X51.2us = 3.3sec

Sæt overløbet variabel til 3, dvs delay = 3x3.3 ~ 10 sek.

 

Welcome to EDABoard.com

Sponsor

Back
Top