PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Geziehlt 0 oder 1 in Pin schreiben



BomberD
16.12.2004, 11:51
Hallo,

ich möchte eine Zahl parallel an Ports ausgeben. Da aber lediglich 12
bit benötigt werden und die anderen Pins schon belegt sind muss ich
einen kompletten Port und 4 Pins eines anderen Ports beschreiben.
Ich stelle mit das so vor, dass ich einer Methode den Zahlenwert
vorgebe und diese dann entsprechend die Pins aktiviert bzw deaktiviert,
je nachdem ob in der binären Schreibweise der Zahl grad ne 0 oder 1 ist.
An einen ganzen Port kann ich ja die erten 8 Bit direkt übergeben. Mein
Problem sind die 4 Einzelpins. Ich kenne zwar Befehle zum Setzen und
Rücksetzten, bin aber der Meinung, dass es einfacher gehen müsste. Kann
ich Pins evtl zu einer Gruppe zusammenfassen ähnlich wie bei Ports und
dann einfach die fehlenden 4 Bit einfach reinschreiben?

Danke für eure Hilfe.

16.12.2004, 13:07
ich wüsste nicht, was an einer einfach UND- oder ODER-Verknüpfung so kompliziert ist
wenn du eine 1 setzen willst, verknüpf das Register per ODER mit einem 8-bit-Wert, bei dem alles 0 ist, bis auf die Bits, die gesetzt werden sollen
wenn du eine 0 setzen willst, brauchst du eine UND-Verknüpfung mit einem 8-bit-Wert, bei dem alles 1 ist, nur bei den zu löschenden steht eine 0
mit diesen Befehlen kannst du die 4 Pins also ändern, wie du willst

BomberD
16.12.2004, 13:13
Danke ich bin da grad bei. Hab den gleichen Tipp auch bei Mikrocontroller.net bekommen ;).
Hoffendlich klappts so...

PORTD = (PORTD & 0xC3) | ((gcode<<8) & 0x3C);

mit dem verschieben mus sich nochmal nachsehen. ich bin mir nie sicher in welche richtung ich schiebe *lol*
C3 sind die inneren 4 pins.
gcode istn 16 bit integer mit der zahl drin.

BomberD
16.12.2004, 13:18
ja ich schiebe in die falsche richtung ;)--> gcode>> 8