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!
Dass ist der selbe falsche Code wie zuvor. Lies Dir meinen Post nochmal genau durch. Kopiere meinen Teil in Dein Programm und kommentiere Deins aus, dann wird es auch gehn.
Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
Der von mir vorgeschlagene Code steht im Post #59 unter Quellcode, nicht im Zitat (das ist Deiner), ist strukturiert und enthält eine verschachtelte IF-Konstruktion.
Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
Da sollte der Compiler eigentlich einen Fehler auswerfen, um es wie Mitch64 sagt, zu sagen.
Eingang wird normal dimensioniert und ist damit eine Speicherstelle im Ram (wird vom Compiler vergeben), Pinc ist ein im Regfile vordefiniertes Symbol, das zu einer bestimmten Speicherzelle verweist, nämlich dem Pinc-Register.
Was soll der Alias hier genau bewirken? In der Schleife wird nirgends der Inhalt vom Pinc-Register in Eingang geschrieben.
So herum könnte es funktionieren:
Quellcode
Eingang_0 Alias Pinc.0
Eingang_1 Alias Pinc.1
Eingang_2 Alias Pinc.2
If Eingang_0 = 1 And Eingang_1 = 1 And Eingang_2 = 1 Then
eine Frage: wenn ich das richtig verstehe, ziehst du einen Eingang mit einem Taster gegen "0". Welcher Pegel liegt an den Eingängen, wenn der Taster nicht betätigt ist? Möglicherweise fehlt der Pull-Up Widerstand an den Eingängen.
Im AVR kann man dazu interne Pull-Ups aktivieren, mit "PortC.0=1". Vielleicht kannst du nach den "Config PinC.0= Input" das Kommando "PortC.0=1" auch für alle Eingänge entsprechend einfügen.
PinC.0 ist ein Port der als Eingang definiert ist. Dessen Wert setzt das Bit0 in der Variable Eingang. Nix mit Register.
Und die Kontrolle ob sich die Eingänge geändert haben hast Du ignoriert.
Im Datenblatt auf S. 291 sehe ich aber ein Register PINC mit der Adresse 0x06. Wenn ich aus dem Bascom-Ordner das "m88def.dat"-File aufmache, finde ich darin eine Definition für PINC=$06 (Zeile 337).
Wie soll die CPU sonst zu dem Wert kommen?
Dass eine Änderung des Werts von Register PINC (zb. Bit 0) automatisch auch das Bit 0 im Ram, wo die Variable Eingang steht, ändert, ist mal eine von dir getroffene Annahme.
In der Bascom - Hilfe zu Alias steht, dass man damit z.b. Port/Pin-Zugriff einen sinnvolleren Namen geben kann, zb. Relais1 Alias Portb.1
Dass magisch Code erzeugt wird, der das Bit aus dem Pin-Register in eine Variable kopiert, steht dort nicht.
Nachdem sich Eingang nicht ändert, hat die Kontrolle auch keinen Effekt.
Ein Alias zu vergeben bedeutet nur, dass der Kompiler (wann immer er auf dieses Alias trifft) dieses durch die vorgegebene Angabe ersetzt. Wenn Du z.B. schreibst
BASCOM-Quellcode
Eingang1 Alias PINC.0
Do
If Eingang1 =1thengosub LED1
Loop
dann macht der Kompiler das daraus:
BASCOM-Quellcode
Do
If PINC.0=1thengosub LED1
Loop
Nicht mehr und auch nicht weniger. Anstelle von "Eingang1" könnte dort auch "Venus17", "Jupiter8" oder sonst ein alphanumerischer Begriff stehen, solange es sich nicht um reservierte Begriffe handelt. Was der Kompiler allerdings macht, wenn man "Eingang.1" verwendet (was in Deinem Programm ganz klar ein Bit der Variable "Eingang" benennt), weiss ich leider auch nicht.
Wenn bei dem Code mit Bit-Abfragen gearbeitet werden soll, dann streich die ganze Alias-Geschichte raus und setz vor die ganze If-Abfrage folgendes ein:
BASCOM-Quellcode
Do
Eingang.0= Pinc.0
Eingang.1= Pinc.1
Eingang.2= Pinc.2
.
hier die If-Abfragen
.
Loop
End
Denn nur so werden die Zustände Deiner Eingangspins auch regelmäßig in den entsprechenden Bits der Variable "Eingang" gesetzt.