Tmers i C

Tags:    programmering

hvordan er det at jeg initialisere en timer i c jeg har en clock på 2 Mhz og den skal køre i 32 mS, endvidre skal den startes med et kald.




5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Her skal du lave en interrupt rutine, og skrive adressen på denne ind på en af de første adresser. Der findes noget der hedder interrupt vektore og disse er reelt blot en pege ping der peger på den funktion der skal kaldes når der kommer et interrupt. Jeg har selv laved en del kode til 8051, men kan ikke lige finde det nu. (Skal nok sende det når jeg finder det)....

Men kort sagt skal du gøre følgende :
1. Lave interrupt rutine. (Det der skal ske når der kommer interrupt).
2. Sætte interrupt vektor. mener man bruger @ eller sådan noget.
3. Tænde for timer interrupt et (samme)
4. Intalisere timer register således at det autoreloader start værdien (og sætter deleren)..
5. Start interruptet for timeren (f.eks. timer 1).
6. Tænde for hoved interruptet (Gøre ved at sætte et register højt eller lavt)

Jeg skal nok skrive koden når jeg lige finder den, hvis koden nedden for ikke kan bruges.

Jeg fandt lige noget kode på nette.... se http://www.keil.com/download/c51.asp

#include <reg52.h>
#include <stdio.h>

/*------------------------------------------------
Timer 0 Interrupt Service Routine.

Set a breakpoint on 'overflow_count++' and run the
program in the debugger. You will see this line
executes every 65536 clock cycles.
------------------------------------------------*/
static unsigned long overflow_count = 0;

void timer0_ISR (void) interrupt 1
{
overflow_count++; /* Increment the overflow count */
}

/*------------------------------------------------
MAIN C function
------------------------------------------------*/
void main (void)
{
/*--------------------------------------
Set Timer0 for 16-bit timer mode. The
timer counts to 65535, overflows, and
generates an interrupt.

Set the Timer0 Run control bit.
--------------------------------------*/
TMOD = (TMOD & 0xF0) | 0x01; /* Set T/C0 Mode */
ET0 = 1; /* Enable Timer 0 Interrupts */
TR0 = 1; /* Start Timer 0 Running */
EA = 1; /* Global Interrupt Enable */

/*--------------------------------------
Do Nothing. Actually, the timer 0
interrupt will occur every 65536 clocks.
--------------------------------------*/
while (1)
{
}
}

Håber du kan bruge det ellers skriv lige så ser jeg om jeg kan finde mit program...

Best Regaards
Janus S. Andersen

* Life is a dream in a programmers heaven *

[Redigeret d. 18/07-03 16:04:52 af Janus S. Andersen]



hvordan er det at jeg initialisere en timer i c jeg har en clock på 2 Mhz og den skal køre i 32 mS, endvidre skal den startes med et kald.


Hvor præcis skal den være, for vis den skal MEGET MEGET præcis
skal du lave den i Assembler.

MH.

The-Freak

Livet er for kort til at kede sig.



hvordan er det at jeg initialisere en timer i c jeg har en clock på 2 Mhz og den skal køre i 32 mS, endvidre skal den startes med et kald.


Hvor præcis skal den være, for vis den skal MEGET MEGET præcis
skal du lave den i Assembler.

MH.

The-Freak

Livet er for kort til at kede sig.



det behøver ikke at være særlig præcis om den er 32 eller 33 eller 34 mS er lige meget bare den er mindst 32 mS og hels ikke meget over



Hay
Nu ved jeg ikke om det er på et CPU- board eller i Windows, men gætter på det er på et CPU - board. På en måde er det samme metode om det er et CPU- board eller i Windows. Du kan oprette et interrupt enten via en Timer i Windows vha. et API-kald SetTimer(). Hvis du programmere et CPU-board skal du opsætte interrupt vektore. Altså sætte den adresse der skal kaldes når interruptet kaldes. DEt lyder måske svært men se hjælp her om......

Det kan være det hedder noget med _INT eller sådan noget. Husk du i C/C++ kan bruge asm inlinie..... Håber dette kunne bruges til noget.....

Ellers skriv noget mere omkring hvilk system du anvender.... kompiler mm....

Best Regaards
Janus S. Andersen

* Life is a dream in a programmers heaven *



det er til et cpu board med en 8051 8 bit cpu på monteret og udviklingssoftware er keil cx51 compiler



t