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. Gruß Steffen
Vielleicht ist mir die Frage nicht klar. Du möchtest an einem Port ein Nibble ausgeben. Dann löscht du doch eigentlich dieses Nibble und veroderst mit dem Nibble aus der 12bit Zahl. Dann schreibst du in den 8bit Port. Das ändert doch die anderen bits nicht. Oder verstehe ich das Problem nicht richtig?
@Steffen Brüssel: In 'C': PORTx = PORTx & 0xf0 | daten & 0x0f;
Wenn ich noch wüsste wasn nibble ist ;) Richtig ich könnte vor dem Schreiben den Pin löschen...und dann den Wert in der zahl mit dem pin 'verodern' <-- schönes wort :) Portb&=~(1<<PB4); portb|=(1<<PB4); statt der 1 könnte ich dann das bit aus der zahl nehmen? Ich werd das mal probieren. aber zunächst muss ich dann noch die zahl in ihre bits trennen oder geht das auch wenn ich einfach die zahl durchschiebe. also fürs erste bit zahl>>0 fürs zweite zahl>>1 und so weiter?
Jau und wenn du das nicht bitweise machst, sondern direkt z.B die unteren 4bits, das untere Nibble ;-), benutzt hast du das Beispiel von Michael. Müsste klappen und keinen Ärger machen
void wr12bit(unsigned int val) { /* write bits 0..7 to PORTB: */ PORTB = (val & 0xFF); /* write bits 8..11 to PC0..PC3 */ PORTC = (PORTC & 0xF0) | ((val & 0x0F00) >> 8); } ungetestet weil wenig Zeit, aber sollte so stimmen... Falls nicht, wird wenigstens das Prinzip sichtbar! :-)
Jo, die Funktion tut, was sie soll, nur bin ich nicht so sicher, ob es das ist, was der Frager will.(?) Er sagt ja "und 4 Pins eines anderen Ports beschreiben" Meines Erachtens will er einen 8Bit-Wert teilen (2 Nibble) und diese getrennt auf 2 Ports geben. Im Prinizp sthet alles oben, man muss nur die Vorhandenen BIts eines Ports retten, die neu zu Setzenden zu Null maskieren und mit dem zu schreibenden Bits (nach Positionskorrektur) verordern. Ganz esay.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.