int BAUD = 0x102b; int SCCR1 = 0x102c; int SCCR2 = 0x102d; int SCSR = 0x102e; int SCDR = 0x102f; int mon_proc; int i; int serin; void main() { i = 1; disable_pcode_serial(); poke(SCCR2, 44); motor(3, 100); set_baud(600); while (1) { serin = get_sci(); if (serin > 0) { serial_putchar(serin); printf("\nsent: %d", serin); } } } int data; void monitor_sci() { while (1) { data = get_sci(); if (data > 0) printf("\nsci: %d", data); } } int get_sci() { if (sci_new_data > 0) { sci_new_data--; return sci_data; } else return -1; } void go() { while (1) { start_press(); disable_pcode_serial(); bit_set(0x102d, 0b00100000); mon_proc = start_process(monitor_sci()); } } void stop() { while (1) { stop_press(); enable_pcode_serial(); bit_clear(0x102d, 0b00100000); kill_process(mon_proc); } } void serial_putchar(int c) { while (!(peek(0x102e) & 0x80)); /* wait until serial transmit empty */ poke(0x102f, c); /* send character */ } /* necessary to receive characters using serial_getchar */ void disable_pcode_serial() { poke(0x3c, 1); } /* necessary for IC to interact with board again */ void enable_pcode_serial() { poke(0x3c, 0); } int serial_getchar(int c) { while (!(peek(0x102e) & 0x20)); /* wait for received character */ return peek(0x102f); } void set_baud(int baudrate) { if (baudrate == 300) poke(BAUD, 53); else if (baudrate == 600) poke(BAUD, 52); else if (baudrate == 1200) poke(BAUD, 51); else if (baudrate == 2400) poke(BAUD, 50); else if (baudrate == 9600) poke(BAUD, 48); }