www.mikrocontroller.net

Forum: Compiler & IDEs 1-Wire Delay Routinen


Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ist der unten eingefügten Code für die Programmierung der verlangten
Verzögerungen beim 1-Wire Protokoll (in us Bereich) geeignet ?

Vielen Dank für die Hilfe

Toni

---------------------------------------------------------------------
Code aus lcd.c von Peter Fleury

/*********************************************************************** 
**
 delay loop for small accurate delays: 16-bit counter, 4 cycles/loop
************************************************************************ 
*/
static inline void _delayFourCycles(unsigned int __count)
{
    if ( __count == 0 )
        _asm_ __volatile__( "rjmp 1f\n 1:" );    // 2 cycles
    else
        _asm__ __volatile_ (
          "1: sbiw %0,1" "\n\t"
          "brne 1b"                              // 4 cycles/loop
          : "=w" (__count)
          : "0" (__count)
         );
}


/*********************************************************************** 
**

delay for a minimum of <us> microseconds
the number of loops is calculated at compile-time from MCU clock
frequency
************************************************************************ 
*/
#define delay(us)  _delayFourCycles( ( ( 1*(XTAL/4000) )*us)/1000 )

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die sollten schon funktionieren, wenn sie Peter veröffentlicht hat.
Alternativ kann man auch einfach einen Timer verwenden. Diesen startet
man ohne oder mit Prescaler (je nach gewünschter Zeit) und fragt dann
ständig den Zählerstand ab. Hat der Zähler einen bestimmten Wert
erreicht, bricht man eine Schleife ab und geht weiter im
Programmablauf. Für Zeiten ab dem us-Bereich ist das eigentlich je nach
verwendetem Oszillator auch praktikabel.

Alex

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.