PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer0: "ISR already defined"? (gelöst)



x8r
22.12.2007, 12:46
Hi,
ich habe ein komisches Problem. Ich möchte den Timer0 meines Mega8 benutzen, um eine Variabel hochzuzählen:


$regfile = "m8def.dat"
$crystal = 8000000
.
.
.
Config Timer0 = Timer , Prescale = 8
On Timer0 Isr_von_timer0
.
.
.
Isr_von_timer0:
Zaehler = Zaehler + 1
Return


Allerdings gibt Bascom bei "On Timer0 Isr_von_timer0" den Fehler
"Isr already defined" aus.
Wodran kann das liegen? Ich habe schon mehrere Beispiele gesehen, in denen das genau so verwendet wird.
Schonmal Danke für eure Hilfe!
Gruß
Jan

Dirk
22.12.2007, 12:54
... nimm 'mal das "Timer0:" in der ISR raus!

Gruß Dirk

x8r
22.12.2007, 13:03
ist immernoch der gleiche Fehler...den "timer0:" hatte ich noch vom rumprobieren drin.
Gruß
Jan

Dirk
22.12.2007, 13:06
... musste gucken, ob in deinem restlichen Prog irgendwo noch Timer0-Definitionen auftauchen oder das Label "Isr_von_timer0" sonstwo verwendet wird.

Gruß Dirk

Bluesmash
22.12.2007, 13:09
oder benutzt du z.b. den getrc5 befehl? dieser benutzt auch den timer0...


gruss bluesmash

x8r
22.12.2007, 13:14
ne, den benutze ich nicht. Ansonsten benutze ich nur Servos, Int0 , den ADC und eben den Timer0.
Hier mal das ganze Programm:


$regfile = "m8def.dat"
$crystal = 8000000

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Config Timer0 = Timer , Prescale = 8
On Timer0 Isr_von_timer0
Config Int0 = Rising
On Int0 Einedrehung
Config Portb = Output
Config Portc = Input
Config Portd = Input
Dim Zaehler As Word
Dim Geschwindigkeit As Word
Dim Zeit As Long
Dim Servoposition As Byte
Dim Potiposition As Byte
Dim Temp As Byte
Const Umfang = 80000000 'umfang in mm*100000
Const Vmax = 312
Start Adc 'maximalgeschwindigkeit in cm/s




Do
Servo(1) = 50
Zaehler = 0
Waitms 3000
Enable Interrupts
Enable Int0


Do
Gosub Holepotipos
If Geschwindigkeit > Vmax Then
Servoposition = 0.9 * Servoposition
End If
If Geschwindigkeit < Vmax Then
Servoposition = Potiposition
End If
Temp = 50 + Servoposition
Servo(1) = Temp
Loop


Loop



Einedrehung:
Disable Interrupts
Disable Timer0
If Zaehler > 10 Then
Zeit = Zaehler * 256
Geschwindigkeit = Umfang / Zeit 'in cm/s
End If
Zaehler = 0
Enable Timer0
Enable Interrupts

Return


Isr_von_timer0:
Zaehler = Zaehler + 1
If Zaehler > 65530 Then
Disable Timer0
Zaehler = 0
End If

Return


Holepotipos:
Potiposition = Getadc(0)
Potiposition = Potiposition / 10
Return





End


Gruß
Jan

x8r
22.12.2007, 13:17
hmmm... ich bin doof... Servos scheint auch timer0 zu benutzen. Ohne Servos gehts jetzt^^
Danke für eure Hilfe!
Schöne Weihnachten!
Gruß
Jan

roboterheld
22.12.2007, 15:00
scheint nicht so, es ist so :

Resources used

TIMER0 is used to create the ISR.