- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: Register übergeben

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    25.03.2006
    Ort
    nahe Tulln (Niederösterreich)
    Alter
    33
    Beiträge
    460

    Register übergeben

    Anzeige

    Praxistest und DIY Projekte
    Hallo!
    Wie kann ich ein ein Register (PIN oder PORT) in ein Unterprogramm übergeben.
    Ich weiß dass es mit Pointern geht, aber da brauche ich einen Cast, das will ich vermeiden.

    bei den Funktionen:

    Code:
    bit_is_set(PINB, 5)
    bit_is_clear(PINC, 2)
    Geht das ja auch.

    Ich habe nach ihnen in den Include datein gesucht, aber nichts gefunden, was ich verstanden habe, die includedatein schaun gar nicht wie C aus, ich checks überhaupt nicht.

    Diese Funktion will ich schreiben (ohne Cast beim Aufruf):

    Code:
    void wait_for_key (uint8_t *inputreg, uint8_t inputbit)		// Pin Register über Pointer einlesen
    {	do{}
    	while(bit_is_set(*inputreg, inputbit));					// Auf Tastendruck warten
    	_delay_ms(50);											// Entprellung
    
    	do{}
    	while(bit_is_clear(*inputreg, inputbit));				// Aufs loslassen warten
    	_delay_ms(50);											// Entprellung
    }
    
    Aufruf:
    
    int main(void)
    {  ...
       wait_for_key((uint8_t*)&PINC, 0);
       ...
    }
    lg Christoph

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    38
    Beiträge
    246
    Also,

    bei der bit_is_set() wird der WERT des registers übergeben und daraus dann ermittelt, ob das entsprechende Bit gesetzt ist.

    Für deine Funktionen reicht das übrigens auch voll aus!
    Also einfach uint8_t inputreg verwenden...

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    avr-libc-Doku FAQ Punkt 12.

    PS: und zum Entprellen sollte man einen Timer-Interrupt verwenden, statt mit einer Warteschleife den Betrieb aufzuhalten! Warteschleifen sind in den meisten Fällen schlechter Programmierstil. Außerdem ist _delay_ms nur für kurze Verzögerungen gedacht, 50ms sind zb mit 16MHz nicht mehr möglich.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    38
    Beiträge
    246
    Oh, ja ich sehe grad, dass zweinmal auf das Register in der Funktion zugegriffen wird, dann würde das nicht klappen, wenn du nur den Wert übergibst. Dann lass es so wie es oben steht und übergebe die Adresse des Ports einfach wie uwegw geschrieben hat.

    Also Aufruf mit
    wait_for_key(&PINC, 0);

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad