Använda Pic 18 med avbrott i c, tips?
Använda Pic 18 med avbrott i c, tips?
Förut har jag använt Pic 16 och 18
med avbrott i assembler. Det vet jag
hur man gör. Tar register som finns i
alla banker för att spara vissa register
när man går in i avbrottet, och återställer
dom när man går ur.
Inne i avbrottet tittar man vilken bit
det är som har skapat avbrottet, och
gör det man ska.
Nu har ju Pic 18 dubbla avbrott, men
ungefär så går det ju till.
Hur gör man om man vill programmera i c
och använda avbrott?
Kompilator = någon som man kan hämta gratis.
Man har ju lite sämre koll på vad det skapas
för instruktioner när programmet kompileras
mot om man skriver det i assembler direkt.
Men är det ändå användbart?
Om programmet inte är så tidskritiskt.
Finns det någon bra sida som någon kan
peka på? Kanske lite tips?
med avbrott i assembler. Det vet jag
hur man gör. Tar register som finns i
alla banker för att spara vissa register
när man går in i avbrottet, och återställer
dom när man går ur.
Inne i avbrottet tittar man vilken bit
det är som har skapat avbrottet, och
gör det man ska.
Nu har ju Pic 18 dubbla avbrott, men
ungefär så går det ju till.
Hur gör man om man vill programmera i c
och använda avbrott?
Kompilator = någon som man kan hämta gratis.
Man har ju lite sämre koll på vad det skapas
för instruktioner när programmet kompileras
mot om man skriver det i assembler direkt.
Men är det ändå användbart?
Om programmet inte är så tidskritiskt.
Finns det någon bra sida som någon kan
peka på? Kanske lite tips?
Re: Använda Pic 18 med avbrott i c, tips?
Tja, som jag skrev tidigare, MPLABX och dess tillhörande kompilatorer, gratis på hobbynivå.
Re: Använda Pic 18 med avbrott i c, tips?
Jag använder MPLAB X och XC8, fungerar helt OK. Kompilern tar hand om att spara de nödvendiga bits & bytes.
Re: Använda Pic 18 med avbrott i c, tips?
Håller med tidigare talare. Finns massvis med exempel i dokumentationen.
Re: Använda Pic 18 med avbrott i c, tips?
Ett exempel, saxat från ett fungerande program:
Såklart kräver detta att det ska vara en PIC med ställbar high/low priority interrupt.
Använder man bara en enkel prioritet ser ISR-deklarationen ut såhär:
Context-Switching fixar kompilern men man ska fortfarande själv ta hand om att kolla vilket interruptflag som är orsaken till interrupten.
Kod: Markera allt
void interrupt high_priority HIGH_ISR(void)
{ // High Priority interrupt
}
void interrupt low_priority ISR(void)
{ // Low Priority interrupt
}
Använder man bara en enkel prioritet ser ISR-deklarationen ut såhär:
Kod: Markera allt
void interrupt ISR(void)
{ // Interrupt
}