/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
PIC interrupt?
Fra : Ukendt


Dato : 20-02-04 14:07

Hey

Kan nogen komme med lidt hjælp til hvordan jeg skal skrive C koden til en
PIC16F873 når den skal generere en interrupt hver 20 mS (hele tiden)?
Hvordan skal man programmere timeren til at lave interrupt hver gang der er
gået 20 ms?

Starten er noget med:

void interrupt send(void)
{
-------------- min kode --------------
}

void main(void)
{
GIE = 1; // Global interrupt enable
}

--
Tom




 
 
Mikkel Sandberg Ande~ (21-02-2004)
Kommentar
Fra : Mikkel Sandberg Ande~


Dato : 21-02-04 17:55

Tom wrote:
> Hey

Hej

> Kan nogen komme med lidt hjælp til hvordan jeg skal skrive C koden til en
> PIC16F873 når den skal generere en interrupt hver 20 mS (hele tiden)?
> Hvordan skal man programmere timeren til at lave interrupt hver gang der
er
> gået 20 ms?

Jeg har lidt kode fra en 16F870, skrevet til HI-TECH C compileren.

Jeg bruger timer0, som er en 8-bit timer med prescaler på op til 1:256.
Du skal være opmærksom på, at den timer ikke kan klare et større delay
end 13,1ms ved 20MHz krystal. Hvis du kører med 20 MHz og vil have
større delay kan du lave en toggle bit i interruptrutinen, så kun hvert
andet interrupt udløser en handling.

Her har du noget at samle inspiration fra:

void interrupt
timer0_isr(void) @ 0x10
{
if(T0IF) // Int from timer0?
{
GIE = 0; // Disable int while processing the current

// Do ISR stuff here (consider saving status reg if ISR changes it)

T0IF = 0; //Reset int flag
TMR0 = -preload; // the number tmr0 increments from
GIE = 1; // Enable int
}
}

void main(void)
{
preload = 255;

T0CS = 0; // select internal clock
PSA = 0; // Prescaler for timer0
PS0 = 1; // Prescaler size (here 1:256)
PS1 = 1;
PS2 = 1;
TMR0 = -preload; // preload timer
T0IE = 1; // enable timer interrupt
GIE = 1; // enable global interrupts

// Do main stuff here
}


Mvh.
Mikkel


Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste