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.