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