Array auf PIN Register schieben

Gast #2919789
Lesenswert?
• ▲
▼
Hallo,

ich hab einen bool Array der 15 Elemente hat und jetzt möchte ich das 
Element 0-7 auf PINB geschoben wird und Element 8-15 auf PINC.

also
1
bool testArray [15]
2

3
int main(void)
4
{
5
 PINB = testArray[0],testArray[1],testArray[2],...
6
 PINC = testArray[8],testArray[9],testArray[10],...
7
}

Tim
Gast #2919802
Lesenswert?
• ▲
▼
Schön.

Warum nimmst du bool Arrays? Ein Bitmuster auf PIN geht doch auch und 
ist nichts anderes als dein bool Array nur zusammengesetzt.

Falls du da AVRs nutzt solltest du anstatt PINx lieber PORTx benutzen 
falls du das auf einem Port ausgeben willst.
Gast #2919850
Lesenswert?
• ▲
▼
Danke für die schnelle Antwort

mr. mo schrieb:
> Falls du da AVRs nutzt solltest du anstatt PINx lieber PORTx benutzen
>
> falls du das auf einem Port ausgeben willst.
Hab ich gemacht :D

mr. mo schrieb:
> Warum nimmst du bool Arrays? Ein Bitmuster auf PIN geht doch auch und
>
> ist nichts anderes als dein bool Array nur zusammengesetzt.
Weil ich sonst später bei der USB-Übertragung Probleme bekomme.

Hmm schrieb:
> Mach doch!

Ja, hab ich gemacht aber er setzt nur Bit0 die restlichen Bits ignoriert 
er!?
#2919882
Lesenswert?
• ▲
▼
Hallo,

wenn man das Problem wirklich so angehen will, wie wäre es mit etwas in 
der Art:
1
PORTB = (array[0]<<0) | (array[1]<<1) | (array[2]<<2) | (array[3] << 3) |
2
        (array[4]<<4) | (array[5]<<5) | (array[6]<<6) | (array[7] << 7);

Wie das für PORTC aussieht, darfst Du Dir selbst ausdenken :-)

Für ein eigenes Programm würde ich mir das in eine Funktion packen, die 
einen Teil des Arrays in ein Byte packt und zurück gibt:
1
uint8_t array_range_to_byte(bool* array, size_t at_index);

Man müsste noch Fehlerbehandlung und Plausibilitätsprüfung betrachten: 
Liegt at_index im Array? Was passiert, wenn ab at_index weniger als 8 
Elemente vorhanden sind? Akzeptiert die Funktion besser nur Vielfache 
von 8 (minus 1) als Index? Wie erhält der Aufrufer einen Fehler 
rückgemeldet? Der Rückgabewert der Funktion ist ja schon in Benutzung . 
Hmm, würde doch noch ein wenig anders aussehen ;-) Aber mal als Ansatz, 
wenn das oben mal funktioniert...

Ansonsten schließe ich mich meinen Vorrednern an:

Walter S. schrieb:
> Ich empfehle ein C-Buch um Grundlagen zu lernen

mr. mo schrieb:
> Warum nimmst du bool Arrays?


Viele Grüsse,
Dirk
Gast #2919885
Lesenswert?
• ▲
▼
Tim schrieb:
> mr. mo schrieb:
>> Warum nimmst du bool Arrays? Ein Bitmuster auf PIN geht doch auch und
>>
>> ist nichts anderes als dein bool Array nur zusammengesetzt.
> Weil ich sonst später bei der USB-Übertragung Probleme bekomme.

Ich verstehe nicht den Zusammenhang zwischen einem bool-Array und einer 
USB-Übertragung.
Außerdem hat dieses Array natürlich einen recht großen Overhead.

> Hmm schrieb:
>> Mach doch!
>
> Ja, hab ich gemacht aber er setzt nur Bit0 die restlichen Bits ignoriert
> er!?

Ein bool hat ja auch nur ein genutztes Bit, und der Komma-Operator macht 
was völlig anderes, als du denkst.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.