www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Port Pin an Funktion übergeben??


Autor: S. K. (theodrin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich hab grad die Nuss vor mir, mit drei Sensoren zu reden.
Also alle drei die gleichen, kein Problem.
Hab auch schon funktionen geschrieben um mit denen zu reden. 
Funktioniert auch alles schön.

Also im Grunde genommen so, dass ich sage:
#define D   LATAbits.LATA0
#define SCK LATAbits.LATA1

Also Präprozessor damit ich im .h File meine Pins nur einmal schreiben 
muss. Nur hab ich jetzt 3 Sensoren und will eigentlich nicht jede 
Funktion drei mal schreiben/kopieren müssen. Finde ich braucht mehr 
Platz und ist nicht schön!
Deswegen hab ich gedacht, wärs toll wenn ich nur mit D und SCK arbeite 
aber eben während des Programm der Funktion eben meine zwei Pins 
übergebe mit denen ich grad was tun will - also welcher Sensor.
Und ich mein ich könnt nen Parameter "Sensor_ID" mitgeben der von 1-3 
reicht und dann mit if-Abfragen weiter gehen aber im grunde genommen ist 
das auch drei mal die Funktion schreiben.
dann hab ich halt:
void funkion(sruct sensordaten sensor, int sensor_id)
{
   if(sensor_id == 1)
   {
   .... arbeite mit Pins D1 und SCK1
   }
   if(sensor_id == 2)
   {
   das selbe wie oben nur steht statt D1 D2 und statt SCK1 SCK2
   }
   .... 3. Sensor

}

Also im grunde genommen wieder drei mal selbe Funktion.

ich hätt halt gern so was in der art wie:
void funktion(struct sensordaten sensor, PORT D, PORT SCK)
{
.... nur einmal mit D und SCK arbeiten
}

geht das irgendwie???

Aja arbeite mit PIC18F2550!!!!

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äh, AVR oder was?

Da kann man Ports über ihre Adresse an eine Funktion übergeben,
also etwas so:
void f( uint8_t *p_port, uint8_t bitnummer )
{
  (*p_port) |= 1<<bitnummer;
}

...
   f( &PORTD, 1 ); // setzt PORTD.1
   f( &PORTA, 5 ); // setzt PORTA.5
...

Oder war was anderes gemeint?

[Edit: lese gerade was von PIC...; war das vorhin auch schon?]

Autor: whitenoise (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du kannst die adresse eines pins nicht an eine funktion übergeben, da er 
keine hat, das gilt für avr wie für die pics, das register in dem der 
pin liegt, hat eine adresse und die kannst du an eine funktion 
übergeben.

denkbar wäre eine verteilung wie:

8bit port:
7  6    5    4    3  2  1  0
NC/SCK2/SCK1/SCK0/NC/D2/D1/D0

dann mit shift operator wert maske 0x11 um id schiften und damit in der 
funktion arbeiten...

gruß w

Autor: Daniel R. (zerrome)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß sowas ist immer lästig, aber machs doch anders ^^
Die Port Pins sind doch global definiert über eine *.h Datei wo die 
Defines für die Pins drin stehen...Also kann man doch von überall darauf 
zugreifen.
Oder speicher den Wert des Ports und übergib diese Variable...

Autor: S. K. (theodrin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, ganz hab ichs noch nicht kapiert...
Also ich hab die Senosren am Port A hängen. Jeweils 0,1; 2,3; 4,5; an 
den letzten zwei hängt mein Quarz.
Aber hmm, so wies dann aussieht kann ich nicht mit meinen 
Präprozessor-konstanten bzw, freiwillig gewählten Namen im Programm was 
tun sondern muss direkt immer wieder den Port ansprechen, also genau 
wissen welchen Port ich hab wo meine Sensoren hängen, ... also wenn ich 
da nur einen Pin umändern sollte sind die ganzen Funktionen nicht mehr 
zu verwenden ohne umarbeiten der Funktion??
Na dann lass ich das und schreib einfach drei mal die selbe Funktion. 
Was solls.
Dann kann ich mir wenigstens aussuchen im .h File wo ich meine Sensoren 
hängen hab..

Oder hab ich was falsch verstanden?

und tschuldige hab das mit dem PIC vergessen und nachträglich schnell 
dazu geschrieben.

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.