Ich meinte nicht die INT-IRQ, sondern andere aktive IRQs (UART, Timer, ADC, AC, etc)
Ich habs auch schon runtergestrickt, bei der die ISR nur noch eine LED toggelte ==> dasselbe Resultat, die Software ist es nicht.
Bevor der nächste Int-IRQ kommt, ist der Timerinterrupt schon lange wieder ausgeschaltet.
Ich meinte nicht die INT-IRQ, sondern andere aktive IRQs (UART, Timer, ADC, AC, etc)
Disclaimer: none. Sue me.
Eben net... Nach dem Ext. Interrupt wird der Timer angeworfen, der lange voro dem nächsten Ext. Interrupt wieder ausgeschaltet wird. Das sind alle Interrupts.
Ich zitiere mich hier mal frecherweise selber, da das was hier im Moment läuft irgendwie an Sackhüpfen im Minenfeld erinnert ....Zitat von Hanni
Grundregeln des Forenpostings:
1. Nutze niemals die Suchfunktion!
2. Überprüfe niemals die Topics nach Ähnlichkeiten!
3. Schreibe alles in hellgelb!
Ich habe auch schon angeboten das Programm mit meinem M16 zu testen. Aber man kann nur dem helfen der sich auch helfen lassen will.
Hubert
Hier der Code:
$regfile = "m16def.dat"
$crystal = 6000000
Dim I As Byte
ddra.3=1
Porta.3=0
Ddrd.3 = 0
Portd.3 = 1
On Int1 Lichtschranke
Mcucr.2 = 1
Mcucr.3 = 1
Enable Interrupts
Config Timer0 = Timer , Prescale = 8
Enable Timer0
On Timer0 Zeit
Stop Timer0
I = 0
Enable Int1
Do
If I = 10 Then
Stop Timer0
I=0
End If
Loop
Lichtschranke:
Start Timer0
Timer1 = 0
Return
Zeit:
Toggle porta.3
Incr I
Return
Es ist nun so, dass der Lichtschranken-Interrupt nicht immer ausgeführt wird, manchmal aber schon ==> auch wenn ich den Draht langsam durch die Lichtschranke bewege, wird er zum Teil ausgelöst (flache Flanke). Normalerweise läuft er schnell durch (innert 300 Mikrosekunden ist der LS-Spalt vollständig abgedeckt), aber auch dann wird nicht immer ausgelöst.
1. finde ich den Code trotz seiner kürze sehr unübersichtlich.
2. wofür soll das gut sein: Timer1 = 0
3. wonach verifizierst du, das der Interupt ausgelöst wurde ?
Grundregeln des Forenpostings:
1. Nutze niemals die Suchfunktion!
2. Überprüfe niemals die Topics nach Ähnlichkeiten!
3. Schreibe alles in hellgelb!
Timer1=0 stellt ihn auf einen definierten Wert ein.
Ich seh ja, falls etwas blinkt ==> Interrupt, falls nicht ==> kein Interrupt.
Lesezeichen