******************* ISR ******************************** void main (void) { SCON = 0x50; // UART mode 1, 8 BIT, Reception ENable REN=1 TMOD |= 0x20; // Timer 1 in mode 2 TH1 = 0xFD; // 19200 Baud @ 22,118 MHz PCON |= 0x80; // Double BR BIT => 38400 Baud TR1 = 1; // Timer starten ES = 1; // Enable Serial Interrupt EA = 1; // Enable All while (1); // endless loop wait for UART ISR } void uart_isr (void) interrupt 4 { if (RI) { // Prüfe auf Receive Interrupt Flag RI = 0; // Zeichen empfangen, lösche RI Flag SBUF = SBUF; // local echo zum Terminal } while (!TI); // Transmit ready/busy ? TI = 0; // clear Transmit Interrupt Flag } ********************** Polling Mode ******************** void main (void) { SCON = 0x52; // 8 BIT UART, TI=1, REN=1 TMOD |= 0x20; // Timer 1, mode 2, 8-bit reload TH1 = 0xFD; // 19200 Baud @ 22,118 MHz PCON |= 0x80; // Double BR BIT => 38400 Baud TR1 = 1; // Timer 1 Runbit = 1, 38400 Baud @ 22,118 MHz LCD_puts ("UART 38400 BAUD"); // Display Text while (1) // endless loop { putchar (getchar ()); // Terminal abfragen, Polling mode } // echo an Terminal und Display } /* ---- putchar ------------------------------------------------------------------------------------ */ void putchar (char c) { while (!TI); // Transmitter ready/busy ? TI = 0; // TI Flag löschen SBUF = c; // Ausgabe an UART display_data_out (c); // echo an Display } /* ---- getchar ------------------------------------------------------------------------------------ */ char getchar (void) { while (!RI); // Receiver ready/busy ? RI = 0; // Zeichen empfangen, clear RI Flag return SBUF; // }