Welche Fehler sind das?
Poste die mal dann kann man dir sicher helfen. Ich hab hier grad kein Bascom.
Gruß Daniel
Hallo,
https://www.roboternetz.de/community...908#post519908
Das würde ich gerne anwenden, in Form einer binären Uhr...
Code ist folgender,
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 130
$swstack = 130
Config Portd = Output
Config Timer1 = Timer , Prescale = 1024
Enable Timer1
Dim minutes as Byte
Dim hours as Byte
Dim day as Integer
Dim tausender as Byte
Dim hunderter as Byte
Dim zehner as Byte
Dim einer as Byte
Dim i as Byte
DDRD=&B11111111
DDRC=&B11111111
DDRB=&B11111000
On Timer1 Isr_von_timer1
Enable Interrupts
Timer1 = 6942
Do ' Hauptprogramm
if hours=23 and minutes=50 ' Fehler: 'three parameters expected' in file C/.../Uhr.bas?
then ' Then als Fehler erkannt - unknown statement?
day=day+1
hours=0
end if
If Pinb.0 = 1 Then
minutes=minutes+1
End If
If Pinb.1 = 1 Then ' Taster, um die Uhr einzustellen
hours=hours+1
End If
If Pind.b = 1 Then
day=day+1
End If
If Pinb.3 = 1 Then
day=day+100
End If
If Pinb.4 = 1 Then ' gib die Anzahl der laufenden Tage an
tausender=day/1000
hunderter=(day-1000*tausender)/100
zehner=(day-1000*tausender-100*hunderter)/10
einer=(day-1000*tausender-100*hunderter-10*zehner)
for i=0 to i=tausender step 1 'jedes mal blinken gibt einen Tausender -> 5* blinken = 5000
Pinb.5=1
waitms 100
Pinb.5=0
waitms 100
Next
for i=0 to i=hunderter step 1
Pinb.6=1
waitms 100
Pinb.6=0
waitms 100
Next
for i=0 to i=zehner step 1
Pinb.7=1
waitms 100
Pinb.7=0
waitms 100
Next
for i=0 to i=einer step 1
Pind.7=1
waitms 100
Pind.7=0
waitms 100
Next
End If
PORTD=Bin(minutes)
PORTC=Bin(hours)
Loop
End
Isr_von_timer1:
Timer1 = 6942
minutes=minutes+1
if minutes=60
then minutes = 0
hours=hours+1
end if
PORTD=Bin(minutes)
PORTC=Bin(hours)
Return
'Line 0 Loop expected, in file: <- leer, keine Pfadangabe
Aber es werden leider 3 Fehler angezeigt beim Compilieren, die ich nicht beheben kann
Geändert von runner02 (04.08.2011 um 18:03 Uhr)
Welche Fehler sind das?
Poste die mal dann kann man dir sicher helfen. Ich hab hier grad kein Bascom.
Gruß Daniel
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Habe ich dort, wo sie aufgetreten sind, im Kommentar dazugeschrieben...
Sie lauten:
'Line 0 Loop expected, in file: <- leer, keine Pfadangabe
Then als Fehler erkannt - unknown statement?
' Fehler: 'three parameters expected' in file C/.../Uhr.bas?
if hours=23 and minutes=50 then ' in eine Zeile
Evtl verschwindet dann schon der letzte Fehler. Er findet den loop zu dem do nicht...
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Code:$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 130 $swstack = 130 Config Portd = Output Config Timer1 = Timer , Prescale = 1024 Enable Timer1 Dim minutes as Byte Dim hours as Byte Dim day as Integer Dim tausender as Byte Dim hunderter as Byte Dim zehner as Byte Dim einer as Byte Dim i as Byte DDRD=&B11111111 DDRC=&B11111111 DDRB=&B11111000 On Timer1 Isr_von_timer1 Enable Interrupts Timer1 = 6942 Do ' Hauptprogramm if hours=23 and minutes=50 then ' Fehler: 'three parameters expected' in file C/.../Uhr.bas? day=day+1 hours=0 end if If Pinb.0 = 1 Then minutes=minutes+1 End If If Pinb.1 = 1 Then ' Taster, um die Uhr einzustellen hours=hours+1 End If If Pind.b = 1 Then day=day+1 End If If Pinb.3 = 1 Then day=day+100 End If If Pinb.4 = 1 Then ' gib die Anzahl der laufenden Tage an tausender=day/1000 hunderter=(day-1000*tausender)/100 zehner=(day-1000*tausender-100*hunderter)/10 einer=(day-1000*tausender-100*hunderter-10*zehner) for i=0 to i=tausender step 1 'jedes mal blinken gibt einen Tausender -> 5* blinken = 5000 Pinb.5=1 waitms 100 Pinb.5=0 waitms 100 Next for i=0 to i=hunderter step 1 Pinb.6=1 waitms 100 Pinb.6=0 waitms 100 Next for i=0 to i=zehner step 1 Pinb.7=1 waitms 100 Pinb.7=0 waitms 100 Next for i=0 to i=einer step 1 Pind.7=1 waitms 100 Pind.7=0 waitms 100 Next End If PORTD=Bin(minutes) PORTC=Bin(hours) Loop End Isr_von_timer1: Timer1 = 6942 minutes=minutes+1 if minutes=60 then minutes = 0 hours=hours+1 end if PORTD=Bin(minutes) PORTC=Bin(hours) Return 'Line 0 Loop expected, in file: <- leer, keine Pfadangabe[/QUOTE]
Hm, wie kann ich die loop noch verändern??? klein schreiben wird das selbe sein, oder??
EDIT: Du meinst, wenn then oben steht geht es? Ich probiers mal und post es dann
Geändert von runner02 (04.08.2011 um 18:41 Uhr)
So hier ist der korrigierte Code. Bascom gibt keine Fehler mehr aus:
Code:$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 130 $swstack = 130 Config Portd = Output Config Timer1 = Timer , Prescale = 1024 Enable Timer1 Dim minutes as Byte Dim hours as Byte Dim day as Integer Dim tausender as Byte Dim hunderter as Byte Dim zehner as Byte Dim einer as Byte Dim i as Byte DDRD=&B11111111 DDRC=&B11111111 DDRB=&B11111000 On Timer1 Isr_von_timer1 Enable Interrupts Timer1 = 6942 Do ' Hauptprogramm If Hours = 23 And Minutes = 50 Then 'korrigiert Then hinter Minutes = 50 day=day+1 hours=0 end if If Pinb.0 = 1 Then minutes=minutes+1 End If If Pinb.1 = 1 Then ' Taster, um die Uhr einzustellen hours=hours+1 End If If Pind.2 = 1 Then 'korrigiert PIND.2 nicht PIND.b day=day+1 End If If Pinb.3 = 1 Then day=day+100 End If If Pinb.4 = 1 Then ' gib die Anzahl der laufenden Tage an 'tausender=day/1000 'hunderter=(day-1000*tausender)/100 'zehner=(day-1000*tausender-100*hunderter)/10 'einer=(day-1000*tausender-100*hunderter-10*zehner) For I = 0 To Tausender Step 1 'korrigiert I = Tausender weg Pinb.5=1 waitms 100 Pinb.5=0 waitms 100 Next I 'korrigiert Next I For I = 0 To Hunderter Step 1 'korrigiert I = hunderter weg Pinb.6=1 waitms 100 Pinb.6=0 waitms 100 Next For I = 0 To Zehner Step 1 'korrigiert I = zehner weg Pinb.7=1 waitms 100 Pinb.7=0 waitms 100 Next For I = 0 To Einer Step 1 'korrigiert I = einer weg Pind.7=1 waitms 100 Pind.7=0 waitms 100 Next End If PORTD=Bin(minutes) PORTC=Bin(hours) Loop End Isr_von_timer1: Timer1 = 6942 minutes=minutes+1 If Minutes = 60 Then Minutes = 0 'korrigiert Then hinter Minutes = 60 hours=hours+1 end if PORTD=Bin(minutes) PORTC=Bin(hours) Return
Toll, danke
werd mich dann gleich daran machen, die Schaltung aufzubauen
Auf der Steckplatine klappt es leider noch nicht...
sollte b2 sein.Code:If Pind.2 = 1 Then 'korrigiert PIND.2 nicht PIND.b
Aber nach 1 Minute leuchtet d1 noch nicht. Dafür leuchtet d4 nach 2 sek und hört nicht mehr auf...
Ich seh schon, da kommt noch was auf mich zu
Ich habe den Code nochmal vereinfacht bzw. habe ich mein erstes Exempel herausgepickt und will es schrittweise auf die Uhr erweitern - bis alles klappt.
Code:'############################ Definitionen ####### $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 130 $swstack = 130 Config Portd = Output Config Portc = Output Config Timer1 = Timer , Prescale = 64 Enable Timer1 Dim Sekunden As Byte On Timer1 Isr_von_timer1 Enable Interrupts Timer1 = 49910 '##################### Hauptprogramm ############ Do Portc.4 = 1 Waitms 200 Portc.4 = 0 Waitms 200 Loop End '############################ ISR ################ Isr_von_timer1: Timer1 = 49910 Portc.1 = 1 Waitms 40 Portc.1 = 0 Waitms 40 Sekunden = Sekunden + 1 If Sekunden = 60 Then Sekunden = 0 End If Portd = Bin(sekunden) Return
Portc.4 blinkt immer. Wie gedacht
Portc.1 blinkt nur einmal, dann nicht mehr -> Timer Interrupt wird nur einmal ausgeführt!!
Jemand zufällig ne Idee, woran dass liegen könnte?
Lesezeichen