1-Wire Delay Routinen

Gast #178242
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 )
Gast
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.