Problem Bascom Uhr

Gast #1622796
Lesenswert?

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
#1622897
Lesenswert?

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.
Gast #1622936
Lesenswert?

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
#1623023
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren