-
-
Neuer Benutzer
Öfters hier
Datenregister an Funktion übergeben
hallo zusammen,
wie kann ich das datenregister an eine selbst geschriebene funktion übergeben? ich habe vor eine funktion zu schreiben, an die man das datenregister und den port übergeben kann und die dann den entsprechenden port auf HIGH bzw. LOW setzt. also so in etwa:
void mache_an(Datenregister, port, pin)
{
//datenregister setzen
//z.B. DDRA = 0xFF;
//ausgang schalten
//z.B. PORTA = (1 << PA1);
}
wie kann ich dies realsieren?
gruß
-
wenn ich mich nicht irre müsste das mithilfe von pointern realisierbar sein.
schau dir vielleicht mal die theorie zu diesem kapitel im internet an.
im endeffekt müsstest du die speicheradresse des Ports bzw Registers an die Funktion übergeben und diese in einem Pointer (ein Variablentyp für speicheradressen) speichern und damit weiterarbeiten.
im netz gibts da viel dazu (stichwort pointer)
mfg gamecounter
-
Erfahrener Benutzer
Fleißiges Mitglied
Was meinst du mit einem Datenregister?
Eines der Register r0 - r31 des Controllers,
oder einfach irgend ein Byte aus dem SFR?
Naja ein beliebiges Byte aus dem SFR übergibst du einfach wie einen "unsigned char".
also so z.B.:
void Funktion(unsigned char port);
-
Neuer Benutzer
Öfters hier
hi,
erstmal danke für die schnelle antwort, allerdings kenn ich mich schon relativ gut mit c und auch mit pointern etc aus. was ich jetzt nur benötige, wären die speicheradressen der Datenregister etc. aber ist das nicht irgendwie anders möglich? schließlich gab es ja auch mal in früheren versionen sbi und cbi an die man auch die entsprechenden ports und pins übergeben hat. weiß jetzt nicht ob das makros oder funktionen waren aber im prinzip muss das also möglich sein. habe auch schon einiges im internet durchsucht aber nichts zu diesem thema gefunden.
-
Neuer Benutzer
Öfters hier
hallo,
ich hatte mir gedacht, dass ich die funktion wie folgt aufrufen kann:
mache_an(DDRA, PORTA, PA6);
ich denke, daran kannst du erkennen, was ich mit datenregister usw meine.
-
Erfahrener Benutzer
Fleißiges Mitglied
Wenn du z.B.: das Register PORTB übergeben willst dann schreibst du einfach folgende Funktion:
void Funktion(unsigned char port);
und beim Aufruf:
Funktion(PORTB);
allerdings so wie ich es jetzt geschrieben habe kannst du den Wert in der Funktion nicht verändern(call by value).
um PORTB in der Funtion zu verändern müsstest du folgendes schreiben:
void Funktion(unsigned char* port);
und beim Aufruf:
Funktion(&PORTB);
mfg
-
genau das meinte ich mit pointern
-
Neuer Benutzer
Öfters hier
also weiß ich jetzt, wie ich PORTx übergeben kann. aber wie übergebe ich DDRx? kann man das auch als unsigned char übergeben? und wie ist das mit dem pin?
danke für die bisherigen antworten
-
Erfahrener Benutzer
Fleißiges Mitglied
Das DDRx Register ist auch ein 1-Byte Register wie fast alle anderen Register im AVR, also kannst du ihn genau so wie z.B.: PORTx an eine Funktion übergeben.
Ein PIN ist einfach ein Index(0...7) im entsprechenden Register, also kannst du ihn auch per "unsigned char" übergeben.
-
Neuer Benutzer
Öfters hier
danke für die schnellen antworten. ich glaube ich hab jetzt alles verstanden.
eigentlich ganz einfach, wenn man weiß, dass man alles per "unsigned char" übergeben kann. danke nochmal
ach-feld
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen