Verstreute Portpins zu einem Port zusammenlegen

Gast #942721
Lesenswert?

Hallo,

ich programmiere einen ATtiny2313, und da dort die TWI Pins und die 
RS232 Pins  mitten in den Ports liegen kann ich keinen vollständigen 
Port benutzen. Außerdem sind es noch 9 Pins.
Wie kann ich am elegantesten z.B. die PINS PA1,PA2, PB0-3, PD3-5 über 
eine Variable setzen und rücksetzen, ähnlich PORTA = 0x05?

Vielen Dank

Michael
Gast #942746
Lesenswert?

Du schreibst in C?
Dann wohl noch am comfotabelsten (nicht unbedingt am elegantesten!) wenn 
du dir eine Funktion schreibst die das Aufspitten übernimmt.
Das wirst du aber wohl händisch machen müssen. Und bei dieser 
Bitschupserei sollte man fast über inline-Assambler nachdenken.

Sebastian
Gast #942765
Lesenswert?

Hallo,

ja ich programmiere in C, und hab auch schon eine Funktion.
Die Pins stehen in einer struct mit 9 einzelnen Bit's

struct S
{
  unsigned Bit0:1;
  unsigned Bit1:1;
  .....
  unsigned Bit8:1;
}s;

Die Ports setze ich in einer Funktion mit 9 if else abfragen.
Dauert mir aber zu lange.

Hätt ja sein können das es etwas einfacheres gibt:-(

Vielleicht hat ja jemand noch etwas.
Gast #942768
Lesenswert?

In BASCOM kann man zum Beispiel eine Subroutine vereinbaren:

Declare Sub Schreibe_Port (x as Byte)

und dann dort sagen:

Sub Schreibe_Port (x as Byte)

Portc.0=x.0
Portc.1=x.1
Portd.2=x.2
....
usw.
End sub

Das heißt, man kann so verschiedene Bits von verschidenen Ports in eine
Variable x einlesen.

MfG Paul
Gast #942779
Lesenswert?

Hätte einfach ein char übergeben und dann über schieben und ausmaskieren 
den rest gemacht.
Wenn man die Pins halbwegs intelligent in dem Char anordnet sollte das 
auch recht gut gehen.
Würde wohl so ordnen:

PA1,PD5,PD4,PD3,PB3,PB2,PB1,PB0

(PA2 dann hänisch ansprechen ;-)

PortB = Ausgabe & 0b00001111;

gibt dann den Teil für PortB aus.

PortD = (Ausgabe >> 1) & 0b00111000;

gibt den Teil für PortD aus.

PortA darfst du dir selbst überlegen ;-)

Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren