Problem bei Variablen vom Typ Bit in Bascom?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Problem bei Variablen vom Typ Bit in Bascom?

      Hallo zusammen,
      habe ein Verständnisproblem mit BASCOM (2.0.7.7). Ich habe mir eine Uhr mit LED-Anzeige programmiert, die jeden Tag ca. 1s
      vorgeht (Quarz schwingt fast 50Hz zu schnell). Hier der Auszug aus meinen kleinen Programm:

      If Stelle_4 = 1 And M1 = 0 Then 'Korrektur einer Sek. pro Tag
      Sekunde = Sekunde - 1
      M1 = 1
      End If


      If Stelle_4 = 0 Then
      M1 = 0
      End If

      Wenn die Uhr 10:00 erreicht (erste Stelle = 1) wird eine Sekunde abgezogen. Dies funktioniert auch so. Wird allerdings
      die 2. IF-Anweisung bearbeitet, wird alle Minute eine Sekunde abgezogen. Die Variable "Sekunde" ist ein Integer-Format
      und der Merker "M1" ist eine Bit-Variable. Nun habe ich einmal probehalber den Merker "M1" in eine Variable vom Typ Byte
      gewandelt und nun funktioniert es problemlos und auch der benötigte Flash-Speicher ist etwas weniger geworden. Deshalb
      meine Frage ob Bascom ein Problem mit Bit-Variablen hat. Übrigens übertrage ich das Hex-File über Studio 4.19 und einen
      MKII-Programmer in den Chip. Auf meinem PC ist Windows 7 professional.

      Danke und noch einen erholsamen Tag
      Jürgen
    • Nein, Bascom hat keine Probleme mit Bit Variablen.

      Allerdings wäre es einfacher für uns gewesen, wenn du dein Programm gepostet hättest.
      Es gibt da ein paar Stolperstellen, die geprüft werden sollten. (Stichwort Stack)
      Die einzeln abzufragen ist mühsam, deswegen bitte immer das ganze Programm posten.

      Normalerweise kannst du die Minutenvariable auf null prüfen und die Stundenvariable auf 10.
      Wenn du jede einzelne Stelle prüfen willst, brauchst du halt auch 4 Abfragen, du hast ja nur 2.
    • Hallo Jürgen,
      wieso verwendest du für die Variable "sekunde" das integer-format (-32,768...32,768) und nicht einfach ein byte(du brauchst doch nur den Zählbereich 0...59)?
      Außerdem würde ich die Zeitkorrektur nicht genau punkt 10:00 Uhr machen (->9:59:59) sondern 10:00:01 (->10:00), wenn du nur eine Sec abziehen willst. Ist doch einfacher.
    • Hallo Oscar,

      ich hatte erst eine Byte-Variable als Sekunde. Da ich aber bei Sekunde=0 gestellt hatte, konnte ich ja von 0 nichts abziehen.
      Und ich prüfe nicht jede einzelne Stelle sondern nur Stelle 4 auf eins! Das tritt genau bei 10:00 ein, da diese dann von 0 auf 1 wechselt.
      Dann setze ich gleichzeitig den Merker M1 und somit tritt das immer nur dann auf, wenn Stelle_4 von 0 auf 1 wechselt.
      Auch habe ich einen "leeren" Mega48 verwendet. Da ich jetzt den Merker M1 als Byte def. habe, ist das Problem Geschichte. Aber warum?

      Danke und noch einen schönen Tag
      Jürgen
      Dateien
      • Uhr_2.bas

        (4,5 kB, 12 mal heruntergeladen, zuletzt: )
    • HJH-MD schrieb:

      Da ich jetzt den Merker M1 als Byte def. habe, ist das Problem Geschichte. Aber warum?
      Es liegt oft an den fehlenden Stackwerten.
      Du hast einen Timerinterrupt und ein paar Subs, schreib doch bitte noch Stackwerte in dein Programm:

      $hwstack = 32 ' default use 32 for the hardware stack
      $swstack = 10 ' default use 10 for the SW stack
      $framesize = 40 ' default use 40 for the frame space

      Die Verwendung eines Merkers funktioniert ohne Probleme, Takt als Bit funktioniert ja auch und ist im gleichen Byte angesiedelt (Bascom managt das)