Forum: Mikrocontroller und Digitale Elektronik Bascom Ausgänge binär schalten?


von Matze (Gast)


Lesenswert?

hi all,

ich programiere jetzt schon eine ganze weile mit Bascom.

Ich habe z.b. eine ausgang so aktiviert:

Portd.6 = 1

Ich weiß aber das man da auch binär machen kann ... ich guggel jetzt 
schon ne weile aber so eine wirklich anleitung habe ich noch nicht 
gefunden...

könnte mich da mal jemand aufklären wie das geht (habe leider keinen µC 
da sonnst würds ich einfach mal ausprobieren)
so:

Portd = &B00100000 ??? (port D 6 ist jetzt auf High)
PortD = &B01001001     (jetzt sind 1, 4 und 7 auf high, oder????)

hatte das vor längeren mal versucht und da hatten die led willd 
ducheinander geblinkt!


gruß
Matthias

von oldmax (Gast)


Lesenswert?

Hi
Ich kenne Bascom nicht, denke aber, das auch Bascom bei 0 anfängt mit 
dem Zählen der Bit's
Portd = &B00100000      port D .5 ist jetzt auf high
PortD = &B01001001      Port D .0, .3 und .6 auf high
Übrigends, auch eine Zuweisung PortD.6=1 ist binär, weil ein Pin nur 
eine 1 oder eine 0 sehen kann, also 2 Zustände haben kann. Es sei denn, 
es ist eine Analogbeschaltung, aber die kann nur eine x-beliebige 
Spannung zwischen 0V und ~VCC verarbeiten. Dazu bedarf es anderen 
Programmaufrufen.
Gruß oldmax

von H.Joachim S. (crazyhorse)


Lesenswert?

Portd = &B00100000     port D .5 ist jetzt auf high

Das wird zwar das gewünschte Verhalten an PD5 haben (falls Syntax 
stimmt), aber gleichzeitig alle anderen auf 0 setzen. Gibt Anwendungen, 
wo das Sinn macht (z.B. eine LED-Matrix, die am gesamten Port 
angeschlossen ist), meist ist es jedoch sinnvoller mit
-or  (zum setzen bestimmter Pins)
-and (zum löschen bestimmter Pins)
-xor (zum invertieren bestimmter Pins)
zu arbeiten.

von oldmax (Gast)


Lesenswert?

Hi
Ich glaub, das muß etwas erklärt werden. Richtig ist, die Zuweisung 
PortD.5=1 setzt nur Pin 5 vom PortD.
Wenn mit Bytes gearbeitet wird und man nur 1 Bit setzen will, die 
anderen aber sollen bleiben, wie sie sind, mußt du dir eine Variable 
einfallen lassen, die den Zustand der Portpins abspeichert und über 
diese setzt du dann den gesamten Port.
In Assembler sieht's so aus:
1
LDS R8, Port_D_Var  ; Register 8 mit Portvariable laden
2
ORI R8, 0b00100000  ; Register 8 mit Bytemuster 00100000 verodern
3
                    ; Bit 5 wird zu 1, alle anderen bleiben wie sie sind
4
STS Port_D_Var, R8  ; Portvariable wieder zurückschreiben und anschließend
5
                    den PortD mit Port_D_Var beschreiben.
Zum Ausschalten des Bits brauchst du eine Und-Funktion
1
LDS  R8, Port_D_Var  ; Register 8 mit Portvariable laden
2
ANDI R8, 0b11011111  ; Register 8 mit Bytemuster 11011111 verunden
3
                    ; Bit 5 wird zu 0, alle anderen bleiben wie sie sind
4
STS Port_D_Var, R8  ; Portvariable wieder zurückschreiben und anschließend
5
                    den PortD mit Port_D_Var beschreiben.
In Basic sollte es so aussehen
1
Port_D_Var=Port_D_Var Or &b00100000
für's setzen und
1
Port_D_Var=Port_D_Var AND &b11011111
für's löschen. Sollte der Syntax nicht stimmen, seht es mir nach, Basic 
ist sehr lange her....
Gruß oldmax

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
Noch kein Account? Hier anmelden.