Hallo, ich habe ein kleines problem mit meinem programm und zwar schaltet bei mir der pind.0 nie durch. wenn ich modus 2 auswähle tut sich nix. irgendwie glaub ich da stimmt was mit der oder funktion nicht. kann mir jemand helfen? $regfile = "m8def.dat" $crystal = 1000000 $baud = 9600 $hwstack = 32 $swstack = 10 $framesize = 40 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Lcdbus = 4 Cursor Off Ddrb = &B11111111 Ddrd = &B00000000 Portd.0 = 1 Portd.1 = 1 Portd.2 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 Portd.7 = 1 Enable Interrupts Config Clock = Soft Declare Sub Stunde Declare Sub Minute Declare Sub Menue Declare Sub Stundew Declare Sub Minutew Declare Sub Onoff Declare Sub Stellenmenue Dim Modus As Byte Dim Stellenstunde As Byte Dim Stellenminute As Byte Dim Konfiguration As Byte Dim Anaus As Byte Cls Time$ = "00:00:00" Do Locate 1 , 1 Lcd Time$ ; " " ; Locate 1 , 12 If Stellenstunde < 10 Then Lcd "0" Lcd Stellenstunde ; ":" If Stellenminute < 10 Then Lcd "0" Lcd Stellenminute Debounce Pind.0 , 0 , Menue , Sub If Modus = 0 Then Locate 2 , 1 Lcd "aus " End If If Modus = 1 Then Locate 2 , 1 Lcd "MP3 " Portb.1 = 1 Else Portb.1 = 0 End If If Modus = 2 Then Locate 2 , 1 Lcd "Radio" End If If Modus = 3 Then Locate 2 , 1 Lcd "AUX " Portb.2 = 1 Else Portb.2 = 0 End If Debounce Pind.1 , 0 , Stellenmenue , Sub If Konfiguration = 1 Then 'Wecker stellen Debounce Pind.2 , 0 , Stundew , Sub Debounce Pind.3 , 0 , Minutew , Sub End If If Konfiguration = 2 Then 'Uhr stellen Debounce Pind.2 , 0 , Stunde , Sub Debounce Pind.3 , 0 , Minute , Sub End If Debounce Pind.4 , 0 , Onoff , Sub If Konfiguration = 0 Then 'Wecker an/aus If Anaus = 0 Then Locate 2 , 11 Lcd " aus" End If If Anaus = 1 Then Locate 2 , 11 Lcd " an" End If End If If Modus = 2 Or Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And Modus = 0 Then Portb.0 = 1 Else Portb.0 = 0 End If Loop 'Stellenmenü 'Menü zum einstellen Wecker/Uhr Stellenmenue: Incr Konfiguration If Konfiguration = 3 Then Konfiguration = 0 Locate 2 , 11 If Konfiguration = 0 Then Locate 2 , 11 End If If Konfiguration = 1 Then Locate 2 , 11 Lcd "Wecker" End If If Konfiguration = 2 Then Locate 2 , 11 Lcd " Uhr" End If Return 'Menü 'Menü MP3, Radio, Aux Menue: Incr Modus If Modus = 4 Then Modus = 0 Return 'Stunde 'Hier wird die Stunde der Uhr hochgezählt Stunde: Incr _hour If _hour > 23 Then _hour = 00 End If Return 'Minute 'Hier wird die Minute der Uhr hochgezählt Minute: Incr _min If _min > 59 Then _min = 00 End If Return 'MinuteW 'Hier wird die Minute des Weckers hochgezählt Minutew: Incr Stellenminute If Stellenminute > 59 Then Stellenminute = 0 End If Return 'Stundew 'Hier wird die Stunde des Weckers hochgezählt Stundew: Incr Stellenstunde If Stellenstunde > 23 Then Stellenstunde = 0 End If Return 'onoff 'Hier wird der Wecker ein- und ausgeschaltet Onoff: Incr Anaus If Anaus = 2 Then Anaus = 0 Return
PinD.0 is der RX-Pin am Mega8. Wenn du irgendwo im Programm einen Befehl benutzt, der den UART verwenden will, dann wird BASCOM automatisch die Funktion von PinD.0 auf Input für den UART setzen. Dies passiert auch, wenn du nur die $baud Direktive verwendest. Kommentier ide mal aus, dann wird es funktionieren. Prints hast du ja scheinbar keine drin.
hab baud raus gemacht geht trotzdem nicht. noch jemand ne idee? bin für jede hilfe dankbar.
Offenbar funktioniert der Taster an Pind.0, denn sonst kämst Du ja nicht in das Menü. Im Menüpunkt 2 steht aber nur: If Modus = 2 Then Locate 2 , 1 Lcd "Radio" End If Da ist aber nichts, was Dein Radio einschalten könnte. MfG Paul
ohh tut mir leid ich vertippe mich hier die ganze zeit ich meinte dass portb.0 nicht kommt.
> If Modus = 2 Or Stellenstunde = _hour And Stellenminute = _min And >Anaus = 1 And Modus = 0 Then Kann man bei Bascom auch Klammern setzen?
holger schrieb:
> Kann man bei Bascom auch Klammern setzen?
habs probiert dann spuckt er unmengen an fehlern aus.
Versuche mal, die Bedingung auseinanderzunehmen: If Modus = 2 Then Portb.0 = 1 Else Portb.0 = 0 End If If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And Modus = 0 Then Portb.0 = 1 Else Portb.0 = 0 End If MfG Paul
dann bleibt er immer auf 0 eigentlich logisch wenn der letzte befehl immer else portb0 = 0 ist.
BASCOM geht die Bedingungsteile immer von links nach rechts durch, ohne Vorrang Regelung. Wenn du also so schreibst If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And Modus = 0 Or Modus = 2 Then Portb.0 = 1 Else Portb.0 = 0 End If sollte es funktionieren.
Das müßte auch gehen: If Modus = 2 Then Portb.0 = 1 Elseif Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And Modus = 0 Then Portb.0 = 1 Else Portb.0 = 0 End If MfG Paul
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.