www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe Delay function?


Autor: cela (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute
Ich habe diesen Code gefunden, aber ich könnte es nicht richtig 
verstehen.
Was ich nicht verstanden habe. Wie kann man auf 104 kommen bzw. wie hat 
man es gerechnet. Bzw. 156

/* delay one bit 104 usec at 4 MHz (5+30*3-1+1+9=104) */

Und
/* delay 1,5 bit 156 usec at 4 MHz ( 5+47*3-1+2+9=156) */



Funktionen putchar() 9600 Baud @ 4 MHz ( Cc5x- kompilatorn )

bit putchar( char d_out ) /* sends one char */
{
char bitCount, ti;
/* One start bit, one stop bit, 8 data bit, no parity = 10 bit. */
/* Baudrate: 9600 baud => 104.167 usec. per bit. */
if(d_out == '\0') return 0; /* refuse to send "end of string" */
PORTB.0 = 0; /* set startbit */
for ( bitCount = 10; bitCount > 0 ; bitCount-- )
{
/* delay one bit 104 usec at 4 MHz (5+30*3-1+1+9=104) */

ti = 30; do ; while( --ti > 0); nop();
Carry = 1; /* stopbit */
d_out = rr( d_out ); /* Rotate Right through Carry */
PORTB.0 = Carry;
}
Return 1; /* all done */
}





Funktionen getchar() 9600 Baud @ 4 MHz ( Cc5x- kompilatorn )
char getchar( void ) /* recieves one char */
{
/* One start bit, one stop bit, 8 data bit, no parity = 10 bit. */
/* Baudrate: 9600 baud => 104.167 usec. per bit. */
char d_in, bitCount, ti;
while( PORTB.1 == 1 ) /* wait for startbit */ ;
/* delay 1,5 bit 156 usec at 4 MHz ( 5+47*3-1+2+9=156) */
ti = 47; do ; while( --ti > 0); nop2();
for( bitCount = 8; bitCount > 0 ; bitCount--)
{
Carry = PORTB.1;
d_in = rr( d_in); /* rotate carry */
/* delay one bit 104 usec at 4 MHz (5+30*3-1+1+9=104) */
ti = 30; do ; while( --ti > 0); nop();
}
return d_in;
}


Dank schön

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cela wrote:
> /* delay one bit 104 usec at 4 MHz (5+30*3-1+1+9=104) */
> /* delay 1,5 bit 156 usec at 4 MHz ( 5+47*3-1+2+9=156) */

Hallo cela,

wie du richtig erkannt hast, gibt es eine "DELAY-Funktion".
Diese hat, wie alle Funktionen eine gewisse Anzahl an Instruktionen.
Ohne diese Delay-Funktion zu kennen würde ich folgendes annehmen.

Die 5, sowie der Term "-1+1+9" ist in beiden Kommentaren identisch.
Also kannst du davon ausgehen, dass die Funktion
vorm eigentlich Delay (angenommen eine Zählschleife), 5 Taktzyklen 
braucht (z.B. push), dann wird n-mal (also 30 bzw.47) die Zählschleife 
bearbeitet und anschließend kommen noch paar Taktzyklen hinzu (z.B. für 
pop und Rücksprung).

Es sieht also bildlich so aus:

5          Vor-Zyklen
n*3        Zählzyklen
9-1+1 = 9  Nach-Zyklen

Wenn du selber Zeiten definieren willst, musst du nur die obige Formel 
nach meinem 'n' umstellen. Die Vor- und Nachzyklen bleiben identisch.

Gruß
Micha

Autor: cela (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke schön  Micha R.

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
cela wrote:
> danke schön  Micha R.

So wünscht man sich ein Thread-Ende.
Es gibt genug Fälle, wo der Ersteller nach Beantwortung seiner Frage 
keinen Laut mehr von sich gibt.

Sehr vorbildlich ;-)

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.