#include #include #define SIMULATE #ifdef SIMULATE #define TEILER10MS (65535-1000) #else #define TEILER10MS (65535-10000) #endif #define STELLEN 8 unsigned char stelle=0; unsigned char text[STELLEN]; unsigned char test; /* Timer-Interrupt-Routine */ void ISR_timer0 (void) interrupt 1 { TH0=TEILER10MS / 256; TL0=TEILER10MS % 256; P1=(text[stelle]<<4) + stelle; text[stelle]++; /* <<<<<<<<<< im Ernstfall raus */ stelle= ++stelle % STELLEN; TR0=1; } bit rxs(void) { return RI; } char _getkey(void) { while(rxs()==0) { } RI=0; return SBUF; } void main() { unsigned char zustand = 0; unsigned char i = 0; /* Zeichenz„hler, 0..7 */ unsigned char zeichen; /*Timer einstellen*/ EA=1; ET0=1; TMOD=0x01; TH0=TEILER10MS / 256; TL0=TEILER10MS % 256; TR0=1; /* Serielle Schnittstelle */ /* SCON */ SM0=0;SM1=1; /* Modus 1, 8 Bit, Timer 1 */ SM2=0; /* Multi-Controller aus */ REN=1; /* Empfänger einschalten */ TB8=0;RB8=0; /* kein 9-tes Bit */ TI=1; /* PCON */ PCON |= 0x80; /* Division durch 2 */ /* TMOD */ TMOD &= 0x0F; /* T1 auf Modus 2, Reload */ TMOD |= 0x20; TH1 = 0xf3; /* Reload-Wert für 2400 Baud */ /* TCON */ TR1 = 1; /* T1 einschalten */ for(;;) { while(rxs()==0) { } zeichen=_getkey(); switch (zustand) { case 0: /* warten auf # */ if (zeichen=='#') { zustand = 1; i = 0; } break; case 1: /* irgendein Zeichen */ test=zeichen; zustand = 2; break; case 2: /* Empfang von Zeichen */ if (isdigit(zeichen)) { text[i] = zeichen; i++; if (i==8) { zustand = 0; } } else { zustand = 0; } break; } } }