Bascom BASCOM ; Erste Schritte zum Ausprobieren

Macht Sinn, allein schon weil jetzt ja auch noch Datum dazu kommt.
 
Aber nicht so

CodeBox BascomAVR
'____________________ Uhrenroutine __________________________
$external _soft_clock
Config Clock = User
Const _sectic = 0
Config Date = Dmy , Separator = .
'____________________ UHR (hier entsteht der Sekundentakt) __
Config Timer1 = Timer , Prescale = 256 , Clear Timer = 1
Const Ctc_value =(_xtal / 256) - 1
Compare1a = Ctc_value
Enable Compare1a
On Compare1a Timer1_clock_isr Nosave
Time$ = "23:59:55"
Date$ = "29.02.12"
Dim Curr_sec As Byte
Curr_sec = 255
sondern auf der Basis Timerkonfiguration und Isr wir bisher

CodeBox BascomAVR
'Sekundentakt für Uhr und 1/5tel Takt zum stellen der Uhr--------------------
Isr_oc2:
   Incr Count1
   If Count1 = 25 Then
      Count1 = 0
      Gosub Tick_200ms
   End If
   Incr Count2
   If Count2 = 125 Then
      Count2 = 0
      Gosub Tick_1s
   End If
Return
 
Hast du mir damit

CodeBox BascomAVR
Dim DayOv As Byte
Select Case Month
   Case 1, 3, 5, 7, 8, 10, 12
      DayOv = 32
   Case 4, 6, 9, 11
      DayOv = 31
   Case 2
      If Year And &b0000_0011 = 0 Then
         DayOv = 30
      Else
         DayOv = 29
      End If
End Select
If Day >= DayOv Then
   Incr Month
   ...
...
eine Denkaufgabe gestellt oder wie soll ich mir Zeile 4 und 6 sonst erklären. Wenn Tag größer/gleich DayOv dann Monat hochzählen. Wann ist der Tag 32 ?
 
Richtig, so wie jetzt geht es ja, nur das Stellen müsste man halt etwas anpassen.

Und zum Letzten, überleg doch mal was ich mir wohl dabei gedacht haben könnte und was passiert :)
 
Richtig, so wie jetzt geht es ja, nur das Stellen müsste man halt etwas anpassen.
Was meinst du damit "Richtig" ? Die vorhandene Konfiguration beibehalten und das stellen der Uhr mit Case, so wie in Beitrag.
Hier in Zeile 32 meckert Bascom


CodeBox BascomAVR
   End If
   If Minute = 60 Then
      Minute = 0
      Incr Hour
   End If
   If Hour = 24 Then
      Hour = 0
      Select Case Month
         Case 1
            Dayov = 32
         Case 3
            Dayov = 32
         Case 5
            Dayov = 32
         Case 7
            Dayov = 32
         Case 8
            Dayov = 32
         Case 10
            Dayov = 32
         Case 12
            Dayov = 32
         Case 4
            Dayov = 31
         Case 6
            Dayov = 31
         Case 9
            Dayov = 31
         Case 11
            Dayov = 31
         Case 2
            If Year And &B0000_0011 = 0 Then
               Dayov = 30
            Else
               DayOv = 29
            End If
      End Select
      If Day > Dayov Then
         Incr Month
      End If
   End If
   Irq.0 = 1
Return
Unbenannt.JPG
 
Das sollte laut Syntax aber richtig sein. @LotadaC?
 
Das ist jetzt ganz auf blauen Dunst geraten, aber probier mal:
If (Year AND &B0000_0011) = 0 Then
Sonst muss hier wirklich mal einer der Bascom Experten helfen. Basic-technisch ist die Syntax richtig.
 
Meldung:
Fehler: 46 Zeile: 153 Zuweisungsfehler, unbekannte Variable (DIM) [IF (YEAR AND & B0000_0011): 0 0 THEN: 0]
Fehler: 7 Zeile: 164 WENN DANN erwartet [ENDE WENN in Quelle 163

Zeilen haben sich inzwischen ein bisschen verändert.
 
Ähm ...Moment ... Ich bin es gewohnt ausschließlich in englischer Sprache zu programmieren (aus gutem Grund), du nutzt deutsch...
Du weißt schon dass du das von mir ggf. anpassen musst an deine Variablennamen, oder? Stichwort Year, Month und Day.
 
Das sollte laut Syntax aber richtig sein. @LotadaC?
Ihr wollt AND als bitweisen Operator verwenden. If schluckt aber nur logische Operatoren (also sowas wie "If A=5 AND B=7 then…" - da müssen beide Bedingungen wahr sein).
IF löst mMn keine Terme auf (d.h. "If A= 1+1 Then…" schägt auch fehl, da Bascom die Summe nicht berechnen läßt (nicht mal wie hier bei Konstanten, und erst recht nicht bei Laufzeit-Variablen - "blablub= 1 + 1" und "If A=blablub Then ..." hingegen geht).
Abgesehen davon gibt es in Bascom nur unäre und binäre Verknüpfungen (können die Controller selbst ja auch nur, und das wird hardwarenah umgesetzt) - alle komplexeren Verknüpfungen müssen aus simplen Verknüpfungen zusammengesetzt werden. Andere (Hoch-)Sprachen machen das automatisch, C z.B. - Bascom nicht.
 
8123

Seit wann ist Bascom noch mal aus der Alpha und Beta Phase heraus? Also laut offiziellen Angaben...
 
Nicht nur deswegen. Es wird von mehreren verstanden. Nichts ist schlimmer als wenn man mit Kollegen, z.B. aus China, zusammen arbeiten muss und alles in chinesisch kommentiert ist... Ist ja schön und gut, hilft nur überhaupt nicht ;)
Oder koreanische Debugnachrichten. Feine Sache. Alles schon erlebt. Quelltext ist englisch. Punkt. Ist eine Regel die ich aufgestellt habe. Wird sich auch anstandslos dran gehalten (zum Glück).

Da Bascom sich so anstellt und in der If partou nicht rechnen will brauchst du also noch eine Variable, nennen wir sie Temp. Die bekommt halt vor der If den Wert von Year AND &B0000_0011. Dann If Temp = 0 Then ...
 
Das Dayov As Byte dimensioniert. Dann habe ich Incr Second, Minute, Hour und dann kommt gleich das Select Case für Month.

CodeBox BascomAVR
   If Hour = 24 Then
      Hour = 0
   End If
   Select Case Month
      Case 1
         Dayov = 32
      Case 3
         Dayov = 32
      Case 5
         Dayov = 32
      Case 7
         Dayov = 32
      Case 8
         Dayov = 32
      Case 10
         Dayov = 32
      Case 12
         Dayov = 32
      Case 4
         Dayov = 31
      Case 6
         Dayov = 31
      Case 9
         Dayov = 31
      Case 11
         Dayov = 31
      Case 2
   End Select
   If Temp = 0 Then
      If(year And &B0000_0011) = 0 Then
         Dayov = 30
      Else
         Dayov = 29
      End If
      If Day > Dayov Then
         Incr Month
      End If
   End If
   Irq.0 = 1
Return

Error : 46 Line : 157 Assignment error, unknown variable (DIM) [IF(YEAR AND &B0000_0011): 0 0 THEN: 0]
Error : 28 Line : 165 IF THEN expected
Error : 7 Line : 165 IF THEN expected [END IF in source 164]
Könnte eventuell sein, dass der Day erst einmal aufgelistet werden muss, bevor Month und Year kommt.
 
Da Bascom sich so anstellt und in der If partou nicht rechnen will brauchst du also noch eine Variable, nennen wir sie Temp. Die bekommt halt vor der If den Wert von Year AND &B0000_0011. Dann If Temp = 0 Then ...
 
@LotadaC Btw, grade getestet. LunaAVR frisst es. Das ist nicht Bayrisch.


CodeBox BascomAVR
' Called by ISR_Timer2_OV each 1000ms (=1s).
' Still in ISR mode, hence the prefix.
Procedure ISR_Tick_1s()
 
  Incr Second
  If Second >= 60 Then
    Second = 0
    Incr Minute
  End If
 
  If Minute >= 60 Then
    Minute = 0
    Incr Hour
  End If
 
  If Hour >= 24 Then
    Hour = 0
    Incr Day
  End If
 
  Dim DayOv As Byte                            ' Day overflow
  Select Case Month
      Case 1, 3, 5, 7, 8, 10, 12
        DayOv = 32
      Case 4, 6, 9, 11
        DayOv = 31
      Case 2
        If Year And 0b00000011 = 0 Then
              DayOv = 30
        Else
              DayOv = 29
        End If
  End Select
  If Day >= DayOv Then
    Day = 1
    Incr Month
  End If
 
  If Month >= 13 Then
    Month = 1
    Incr Year
  End If
 
EndProc

Dafür klaut es beim Copy&Paste die Indention weg ^^'

Btw#2 @Dirk: Was issn eigentlich mit dem Bascom Brush in letzter Zeit los?
Er erfüllt die ihm zugetragenen Arbeiten nach seiner vollsten Zufriedenheit.?
oh.gif
 
Glaub ich. Aber hatte ja schon geschrieben wie du das Problem umgehst
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)