PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit int1...



taike
22.05.2005, 20:47
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


$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

PicNick
23.05.2005, 07:32
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.

taike
23.05.2005, 13:23
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?)

PicNick
23.05.2005, 13:31
Hängen nicht zusammen, alles geht
Aber zum Testen laß das "nosave" mal weg, das bringt Chaos

taike
23.05.2005, 13:55
jep mach ich :
hab hier mal den code nochmal und ohne anderes zeug

$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

23.05.2005, 14:00
Na ja, eigentlich sollt' er das tun.
Frage ist nur, wie kontrollierst du das ?

23.05.2005, 14:06
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

taike
23.05.2005, 14:13
ups, war nicht eingelogt ^^

PicNick
23.05.2005, 14:40
Hast du auf deinem Board eine Möglichkeit, irgendeine LED zu bedienen ?

23.05.2005, 14:57
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