-
Problem mit int1...
hi
hab folgendes problem:
möchte wie viele vor mir schon einen drehzahlmesser machen
jetzt hab ich auch ein prog geschrieben und zum teil geht es auch (sagt zumindest der simulator bei bascom).
da ich jedoch nicht nur einen interrupt verwenden möchte sondern auch nen zweiten (int0 und int1) hab ich jetzt dieses problem dass der zweite interrupt gar nicht geht (k.a.wieso??? :-k )
sieht jemand den fehler?
CU
Code:
$regfile = "M32def.dat"
$crystal = 8000000
'Timer Configuration
Config Timer0 = Timer , Prescale = 256
Timer0 = 0
Start Timer0
'Interrupts
Enable Interrupts
Enable Int0
Enable Int1
Config Pind.2 = 1
Config Pind.3 = 1
On Ovf0 Timerinterrupt Nosave
On Int1 Motorl_interrupt Nosave
On Int0 Motorr_interrupt Nosave
Timerinterrupt:
Drehzahl1 = Intcounter0
Drehzahl2 = Intcounter1
Intcounter1 = 0
Intcounter0 = 0
Timer0 = 1
Return
Do
---------
Loop
Motorr_interrupt:
Intcounter1 = Intcounter1 + 1
Return
Motorl_interrupt:
Intcounter0 = Intcounter0 + 1
Return
-
Hi, Beim Bascom kannst du deine Funktionen nicht irgendwie passend verteilen, so schlau is der nicht.
DO..LOOP muß nach vor, gleich nach den on.. Anweisungen.
-
hi,
ja habs falsch kopiert do...loop ist bei mir schon nach : on int0...
das komische ist wie gesagt im simulator beachtet es nur den interrupt von int0 alle anderen werden nicht beachtet (also int1 und int2)
kann es vielleicht daran liegen, dass ein fusebit falsch gesetzt ist?
oder gibt´s eine priorität bei den interrupts, die da dazwischen geht?
so wie ich das irgenwo gelesen hab, haben interrupts mit der kleineren zahl (also int0) eine höhere priorität als int1. aber das müsste eigentlich egal sein.
und noch eine andere frage: hängen interrupts und die timer irgendwie zusammen? also so, dass man entweder int0 oder timer0 benutzen kann?
(wahrscheinlich nicht oder?)
-
Hängen nicht zusammen, alles geht
Aber zum Testen laß das "nosave" mal weg, das bringt Chaos
-
jep mach ich :
hab hier mal den code nochmal und ohne anderes zeug
Code:
$regfile = "M32def.dat"
$crystal = 8000000
Dim A As Integer
Dim B As Integer
Dim Intanzeige0 As Integer
Dim Intanzeige1 As Integer
Config Timer0 = Timer , Prescale = 256
Enable Interrupts
Enable Int0
Enable Int1
A = 0
B = 0
On Timer0 Anzeige
On Int0 Interrupt0
On Int1 Interrupt1
'----------------------------
Do
nop
Loop
End
'----------------------------
Interrupt0:
A = A + 1
Return
Interrupt1:
B = B + 1
Return
Anzeige:
Intanzeige0 = A
Intanzeige1 = B
A = 0
B = 0
Return
-
Na ja, eigentlich sollt' er das tun.
Frage ist nur, wie kontrollierst du das ?
-
ja....
also momentan probier ichs eigentlich nur im simulator. da kann man ja einen interrupt auch auslösen.
habs zwar schon auf den proz überspielt aber dort klappt es auch nicht.
kann jemand es mal bei sich in bascom probieren? vielleicht stimmt bei mir was nichr(obwohl ich auch schon neu installiert hab)
CU
-
ups, war nicht eingelogt ^^
-
Hast du auf deinem Board eine Möglichkeit, irgendeine LED zu bedienen ?
-
hi,
also leds nicht aber lcd.
aber so wie ich das sehe gibt es bei bascom einen bug, wenn man den simulator verwendet, denn als ich das program auf dem m32 draufmachte ging es und das lcd hat auch normal was angezeigt und gezählt
ich denke/hoffe , dass das problem somit gelöst ist
(mercí für die hilfe)
CU