Serielle Übertragung zum Host-Computer



/* 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 );
}



© Michael Kasper, Letzte Änderung: 09.07.97

Zurück zu den Hardware-Erweiterungen