/* 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