Hallo ich wolte schnell was programmieren mit dem 16 Bit Timer 1 . Ich möchte einen interrupt habe bei einem bestimmten Zählerstand (Copare Interrupt )aber der Timer 1 soll dabei weiterlaufen, da ich auch noch den Overflowinterrupt brauche, geht dass überhaupt oder wird der Timer automatisch zurückgesetzt ?? Danke
Mit dem 128er mach ich nix, aber bei den anderen ATmegas geht das. Ich nutze auch gelegentlich zwei OCR-Interrupts und den ICP-Interrupt gleichzeitig. Man darf dabei nur den CTC-Mode nicht aktivieren. In der ISR sieht das dann so aus:
1 | TIM1_COMPB: ;ISR für Timer1-Compare1B (alle Millisekunde) |
2 | in srsk,sreg ;SREG sichern |
3 | push xh ;temporäre Variablen |
4 | push xl ;beschaffen |
5 | push wh |
6 | in xl,ocr1bl ;Zeitstempel dieses Interrupts |
7 | in xh,ocr1bh ;einlesen |
8 | subi xl,low(-oc1binterval) ;Intervall zum nächsten |
9 | sbci xh,high(-oc1binterval);Interrupt addieren |
10 | out ocr1bh,xh ;und in Referenzregister |
11 | out ocr1bl,xl ;zurückschreiben |
12 | ;der 'Termin' für den nächsten Interrupt ist nun gesetzt |
13 | |
14 | ;eigentliche Arbeit des Interrupts... |
15 | |
16 | pop wh |
17 | pop xl ;temporäre Variablen |
18 | pop xh ;entsorgen |
19 | out sreg,srsk ;SREG wiederherstellen |
20 | reti ;fertig... |
...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.