also hab ein Terminalprogramm für den 2051er, Quarz: 11,0592Mhz Init Code: void Init_Serial() { EA = 0; TI = 0; /* clear transmit interrupt */ TR1 = 0; /* stop timer 1 */ ET1 = 0; /* disable timer 1 interrupt */ // PCON |= 0x80; /* 0x80=SMOD: set serial baudrate TMOD &= ~0xF0; /* clear timer 1 mode bits */ TMOD |= 0x20; /* put timer 1 into MODE 2 */ TH1 = 0xFD; // FD° TR1 = 1; /* start timer 1 */ EA = 1; /* Enable Interrupts */ SM0 = 0; SM1 = 1; /* serial port MODE 1 */ SM2 = 0; REN = 1; /* enable serial receiver*/ TI = 0; /* clear transmit interrupt */ RI = 0; /* clear receiver interrupt */ ES = 1; /* enable serial interrupts */ EA = 1; /* Enable Interrupts */ } void Send_Serial(unsigned char value) { SBUF = value; SCON &= 0xFD; // Byte Zurück Senden } void Comm_Serial() interrupt 4 { if (TI != 0) /* Received data interrupt */ { TI = 0; return; } if (RI != 0) /* Received data interrupt */ { RI = 0; Send_Serial( SBUF ); } SCON &= 0xFC; // Clear S0 of IRF } So kann mir jedmand erklären warum das ding nicht Sauber das zurückschickt was es empfängt??? 0xFD sollte doch für 11,059 passen ...
"0xFD sollte doch für 11,059 passen ..." Weiß ich nicht, warum läßt Du das nicht den Compiler ausrechnen ? TH1 = -(unsigned char)(XTAL BAUD 12 / 16 + 0.5); Das SCON hat in den Interrupts nichts zu suchen, das wird nur einmal beim Init gesetzt und dann in Ruhe gelassen. Ich nehme mal an, die UART spielt verrückt, wenn man ihr mitten im Senden oder Empfangen die Modi durcheinander bringt. Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.