Nabend. Ich sitze nun schon seit vier Tagen vor diesem Dämlichen Programm hier: $regfile = "2313def.dat" 'AT90S2313-Deklarationen $crystal = 4000000 'Quarz: 4.0000 MHz Dim A As Byte Dim B As Byte Dim I As Byte Declare Sub Led1 Declare Sub Led2 Config Portb = Output Config Portd = Input On Timer1 Ontimer1 On Timer0 Ontimer0 Config Timer1 = Timer , Prescale = 8 Config Timer0 = Timer , Prescale = 1024 Enable Timer1 Enable Timer0 Enable Interrupts '--------------------------------------------------------- Do 'Hauptschleife If I = 15 Then B = 0 If I <= 15 Then A = 0 End If End If Debounce Pind.0 , 0 , Led1 , Sub Debounce Pind.1 , 1 , Led2 , Sub If I = 15 Then Stop Timer0 End If '--------------------------------------------------------- Lauflicht 1 If A = 1 Then Portb.0 = 1 End If If A = 10 Then Portb.0 = 0 Portb.1 = 1 End If If A = 20 Then Portb.1 = 0 Portb.3 = 1 End If If A = 30 Then Portb.3 = 0 A = 0 End If '--------------------------------------------------------- Lauflicht 2 If B = 1 Then Portb.0 = 1 End If If B = 10 Then Portb.1 = 1 End If If B = 20 Then Portb.0 = 0 Portb.1 = 0 B = 0 End If Loop '--------------------------------------------------------- Sub Taster Sub Led1 Start Timer0 End Sub Sub Led2 I = 0 End Sub '--------------------------------------------------------- Sub Taster Ontimer0: 'Interrupt-Routine Incr I Return Ontimer1: Incr A Incr B Return Pinb.0 und 1 sind miteinander verbunden und an einen Optokoppler angeschlossen! Der Optokoppler ist Wiederum an die Festplatte angeschlossen! Wenn die Festplatte arbeitet dann sollte Lauflicht1 angehen! Wenn die Festplatte nicht mehr Arbeitet dann sollte nach 1 - 2 sec. Lauflicht2 gestartet werden! Arbeitet sie Festplatte wieder geht alles von vorne los! Wäre echt nett wenn ihr mir helfen könntet!
Es ist immer sehr hilfreich Code einzurücken. Dann sieht man von wo bis wo eine Schleife/Abfrage läuft. Ich hab den Code nicht weiter überprüft, aber so wie das jetzt ist, wird A nie zu Null. Werner ---------------- Do 'Hauptschleife If I = 15 Then B = 0 If I <= 15 Then A = 0 End If End If Debounce Pind.0 , 0 , Led1 , Sub Debounce Pind.1 , 1 , Led2 , Sub If I = 15 Then Stop Timer0 End If --------
Wie Werner schon meinte: if I= 15 then B=0 if I<= 15 then ' das "<" kann man sich so schon mal sparen. A=0 endif endif drei Zeilen tiefer: if I=15 Then Stop Timer0 endif Warum so umständlich? Ich kenne Bähscom nun nicht, bin aber etwas basic-bewandert. Beim Aufruf von "Sub LED1" und "Sub LED2" wird I nie so verändert, dass I=15 sein könnte. Nach meinen Berechnungen wird I alle 0,256ms um 1 erhöht. Bei einer Teilung durch 15 kommt man auf 3,84ms. Da ist dein Lauflicht aber schon komplett durchgelaufen!? Dass Timer1 nie gestartet wird, macht nichts, oder? Und damit A und B nie verändert werden? Es wäre auch sinnreich, I vor der Hauptschleife irgendeinen vernüftigen Wert zuzuweisen (z.B. I=0). Kannst Du Dich jetzt vielleicht noch dazu äussern, warum Du zwei Portpins dafür als Eingang ver(sch)wenden mußt? Gruß Rahul
Weil es bei mir nicht anders funktioniert hat, leider! Ich habe versucht den timer über einen wechsel von low auf high auszulösen! Funktionierte leider nicht! Also kam ich nach langen hiun und her auf die Lösung und siehe da, es geht! Ausserdem reichen die Ports für meine Zwecke dicke! Gruß Bazic
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.