mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verstreute Portpins zu einem Port zusammenlegen


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gar nicht.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja klar,

zusammenschieben, probier ich mal.

Danke

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Baumann wrote:
> In BASCOM kann man zum Beispiel eine Subroutine vereinbaren:

In C geht das schließlich nicht ;) Okay, stimmt. Es heißt dort Funktion.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.