void reset_serial(void) //serielle Schnittstelle initialisieren { T2CON |= 0x30; // TIMER 2 für Send- Empfangstakt RCAP2H=0xFF; // RCAP2-Werte für 4800 RCAP2L=0xB8; TH2=0xFF; // TIMER2 hat als Baudrate-Generator Probleme, TL2=0xB8; // siehe ATMEL-Errata PCON = 0x00; SCON &=0x00; SCON |=0x50; // 8bit UART TR2=1; // Timer2 einschalten RI=1; // Empfangs-Interrupt setzen TI=1; // Sende-Interrupt setzen EA=1; REN = 1; //Empfangsbereitschaft freischalten } unsigned char write_serial(unsigned char ch) //Zeichen auf ser. Schnittstelle ausgeben { unsigned char tout=0; while(P0_7); //Warten, bis RTS low => Empfänger ist bereit EA=0; //Interrupts sperren tout=0; while(!TI) //Warten, bis Sendebuffer bereit { tout++; //TIMEOUT-Zähler hochzählen if(tout>200) return 1; //TIMEOUT-Error } TI = 0; //Sende-Interrupt löschen SBUF = ch; // Zeichen senden EA=1; // Alle Interrupts freischalten return 0; } void init(void) //System initialisieren { BEEPER=OFF; P0_7=1; P1_0 = 1; P1_1 = 1; P1_2 = 1; P1_3 = 1; P3_0=1; P3_1=1; P3_6=0; // Trigger für Logikanalyser ET1= 1; EA = 1; //Interrupts freischalten AUXR |= 0x20; //BIT6 in AUXR-Register setzen} } void init_display(void) //Display initialisieren { unsigned char by; by=write_serial(0x43); //ASCII C: Display einschalten by=write_serial(0x01); by=write_serial(0x44); //ASCII D: Displayinhalt löschen by=write_serial(0x4C); //ASCII L by=write_serial(0x59); //ASCII Y: Grafikdisplay Ports auf HIGH by=write_serial(0x08); by=write_serial(0xFF); by=write_serial(0x54); //ASCII T: Verknüpfungsmodus für Text einstellen by=write_serial(0x52); //ASCII R: Schreibrichtung nach rechts by=write_serial(0x04); //Hintergrund löschen und schwarzen Pixel setzen by=write_serial(0x01); //Füllmuster = 1, schwarz solid } void main() { reset_serial(); // Schnittstelle initialisieren timer0_init(); // Timer0 initialisieren timer0_off(); // Timer0 abschalten timer1_init(); // Timer1 initialisieren timer1_off(); // Timer1 abschalten init(); // Ports initialisieren init_display(); // Display einschalten und löschen ebene=1; // 1. Menüebene while(1) { ... } }