/* Project: Robotik-Praktikum - "Rug Warrior" */
/* File : "SERIAL.C" */
/* Author : Lars Ferner, Uni Kaiserslautern */
/* Date : 96-06-12 / 96-02-22 */
/* Notes : Kommunikation mit dem Mac ueber die serielle Schnittstelle */
/* Functions (definitions) */
void InitSerial( void )
/* Initialisieren der seriellen Schnittstelle zum Senden an den Mac */
{
poke( 0x102B, 0b00110000 ); /* 'BAUD'-Reg. : Baudrate auf 9600 setzen */
poke( 0x102C, 0b00000000 ); /* 'SCCR1'-Reg.: 1 Startbit, 8 Datenbits, 1 Stoppbit */
poke( 0x102D, 0b00001100 ); /* 'SCCR2'-Reg.: ... */
poke( 0x102F, 32 ); /* ein dummy byte schicken, weil das erste Byte verloren geht */
msleep( 10L ); /* warten, bis Byte gesendet (eigentlich ueber Interrupt) */
}
void SendByte( int Byte )
/* Senden eines Bytes an den Mac ueber die serielle Schnittstelle */
/* Note: Der Parameter 'Byte' muß als 'int' deklariert werden, weil in "IC" keine einzelnen 'char's zur Verfuegung stehen; */
/* da nur das untere Byte von 'Byte' gesendet wird, ist also auf einen gueltigen Wert von 'Byte' zu achten */
{
poke( 0x102F, Byte );
msleep( 5L ); /* warten, bis Byte gesendet (eigentlich ueber Interrupt) */
}
void SendIntByByte( int n )
/* Senden von 'int'-Zahlen Byte-weise an den Mac ueber die serielle Schnittstelle */
{
SendByte( n / 256 );
SendByte( n % 256 );
msleep( 5L ); /* warten, bis Byte gesendet (eigentlich ueber Interrupt) */
}
void SendInt( int n )
/* Senden von 'int'-Zahlen (ziffernweise) ueber die serielle Schnittstelle */
{
/* Local variables */
int i, nlz = FALSE, c, b = 10000;
if ( n < 0 )
{
SendByte( '-' );
n *= -1;
}
if ( n == 0 )
SendByte( '0' );
else
{
for ( i = 0; i < 5; i++ )
{
c = n / b;
if ( ( c > 0 ) || nlz )
{
nlz = TRUE;
SendByte( 48 + c );
n -= c * b;
}
b /= 10;
}
}
}
void SendFloat( float x )
/* Senden von 'float'-Zahlen (ziffernweise) ueber die serielle Schnittstelle */
{
/* Local variables */
int i, nlz = FALSE, c;
float b = 100000.0;
if ( x < 0.0 )
{
SendByte( '-' );
x *= -1.0;
}
if ( ( x > -1.0 ) && ( x < 1.0 ) )
SendByte( '0' );
else
{
for ( i = 0; i < 6; i++ )
{
c = (int) ( x / b );
if ( ( c > 0 ) || nlz )
{
nlz = TRUE;
SendByte( 48 + c );
x -= (float) c * b;
}
b *= 0.1;
}
}
SendByte( '.' );
for ( i = 0; i < 3; i++ )
{
x *= 10.0;
c = (int) x;
SendByte( 48 + c );
x -= (float) c;
}
}
void SendString( char string[] )
/* Senden eines nullterminierten Strings ueber die serielle Schnittstelle an den Mac */
{
/* Local variables */
int i = 0;
while ( string[i] != 0 )
SendByte( (int) string[i++] );
}
void SendCRLF( void )
{
SendByte( 13 );
SendByte( 10 );
}
Zurück zu den Hardware-Erweiterungen