Hilfe Delay function?

Gast #927556
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
#927654
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren