För att lära mig interrupt så har jag gjort ett MikroBasic-program som gör detta:
*Knapp "RUN" ska köra igång en loop som tonar en lysdiod (kopplad till en DAC och styrd med SPI) upp och ner, om och om igen.
*Knapp "STOP", tja den släcker lysdioden och så händer inget mer förrän man trycker "RUN".
Knapparna läses av med ADC. Interruptet ska köra igång kollen av vilken knapp som trycktes ner. Det lämpligaste interruptet jag har hittat är ADIF (bit 6 i PIR1.) Den interrupt-flaggan sätts när en A/D-omvandling är klar.
*Här kommer frågetecken nr 1: Den omvandlingen görs väl bara när jag läser av ADC? Men med vad ska jag starta ADC? Hade tänkt att interruptet skulle starta detta.
Jag är helt "lost" här...
Jag vet att en interrupt ska vara så kort och snabb som möjligt, utan massa delay och sådant. Åtminstone i MikroBasic är det så att man inte ska starta en procedur i en interrupt-rutin. Därför är det bättre att bara sätta flaggor/variablar som man sedan läser av i en annan procedur.
*Här kommer frågetecken nr2: För att läsa av dessa flaggor behöver jag då en loop (i 'main' eller en annan procedur t.ex DAC-uppdateringen) som ständigt kollar om variablerna har ändrats. Kan man inte då lika gärna läsa av ADC'n i denna loop?
Jag hänger inte med alls.
Kortfattat så är programbeskrivningen denna:
1. Ingenting händer förrän man trycker RUN-knappen.
2. När RUN har tryckts så ska lysdioden tona upp/ner om och om igen.
3. Trycker man STOP så ska lysdioden släckas och förbli släckt tills man trycker RUN.
Detta test är en nedbantad version av ett större projekt. Det är därför som jag vill använda interrupt. Jag är alltså inte ute efter något annat än att lära mig hur jag ska lägga upp procedurerna och interrupt-kollen på ett bra sätt.
Det "större" projektet skrev jag om här.
Heeelp!

edit: Rubriken...