- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Datenregister an Funktion übergeben

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2005
    Beiträge
    20

    Datenregister an Funktion übergeben

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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ß

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    05.08.2004
    Beiträge
    93
    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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    35
    Beiträge
    194
    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);

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2005
    Beiträge
    20
    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.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2005
    Beiträge
    20
    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.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    35
    Beiträge
    194
    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

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    05.08.2004
    Beiträge
    93
    genau das meinte ich mit pointern

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2005
    Beiträge
    20
    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

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    35
    Beiträge
    194
    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.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    24.11.2005
    Beiträge
    20
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus