/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
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
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177549
Tips :
31968
Nyheder :
719565
Indlæg :
6408820
Brugere :
218887
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.