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
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
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 ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.