Guest
Hallo Zusammen
Ich habe wieder mal eine Frage betreffend der Programmierung des UART0
meines Boards
Mein Code sieht so aus:
_interrupt(18) void
se_int_receive( void )
{
x = U0RBL;
switch ( x )
{
case stoppbit: //Auswertroutine
result rxbuffer[1]+
rxbuffer[2]+
rxbuffer[3]+
rxbuffer[4]+
rxbuffer[5]+
rxbuffer[6]+
rxbuffer[7]
;
break;
case startbit: //startbit
u = 0; //zähler auf 0 setzten
break;
default:
rxbuffer = x; //buffer füllen
u++; //U0RBL nach rxbuffer schreiben
//zähler um 1 erhöhen für nächste
//U0RBL nach rxbuffer schreiben
Meine Überlegung dahinter ist:
es kommt ein startbit wert - der zähler u wird auf 0 gesetzt
es kommt ein defaultwert - die Stelle "u" wird beschrieben mit dem wert
U0RBL (x)
der wert u wird um 1 erhöht um die nächste stelle zu beschreiben,
beim nächsten defaultwert beschreibt man die nächste stelle
es kommt das stoppbit
die auswertung wird ausgeführt. Alle werte zusammenzählen um ein
result zu erhalten
Das Startbit spricht an, das ist OK.
Das Stoppbit spricht auch an auch OK.
Nun also meine Frage an Euch.
Wenn ich das Resultat aber anschaue, habe ich jedesmal wenn ich einen
neuen Lesevorgang mache ein anderes Resultat
Auch die Einzelnen Werte im rxbuffer[1].....usw. sind jedesmal anders.
Was kann das Problem sein. hat jemand eine Ahnung.
Ich habe noch meine Initialisierung des UART angehängt. vielleicht ist
hier noch ein unentdeckter fehler versteckt.
U0BRG = 103; /* baudrate 9600 */ //67
U0MR = 0x05;
U0C0 = 0x10; /* no cts/rts, prescaler = F1 */
U0C1 = 0x05; /* enable receiver and transmitter 0x5*/
UCON = 0x04;
S0TIC = 0x6; /* Set UART0 transmit interrupt priority */
S0RIC = 0x6; /* Set UART0 transmit interrupt priority */
PD6_3 = 1;
PD6_2 = 0;
Vielen Dank für Euren Einsatz
Oli
Ich habe wieder mal eine Frage betreffend der Programmierung des UART0
meines Boards
Mein Code sieht so aus:
_interrupt(18) void
se_int_receive( void )
{
x = U0RBL;
switch ( x )
{
case stoppbit: //Auswertroutine
result rxbuffer[1]+
rxbuffer[2]+
rxbuffer[3]+
rxbuffer[4]+
rxbuffer[5]+
rxbuffer[6]+
rxbuffer[7]
;
break;
case startbit: //startbit
u = 0; //zähler auf 0 setzten
break;
default:
rxbuffer = x; //buffer füllen
u++; //U0RBL nach rxbuffer schreiben
//zähler um 1 erhöhen für nächste
//U0RBL nach rxbuffer schreiben
Meine Überlegung dahinter ist:
es kommt ein startbit wert - der zähler u wird auf 0 gesetzt
es kommt ein defaultwert - die Stelle "u" wird beschrieben mit dem wert
U0RBL (x)
der wert u wird um 1 erhöht um die nächste stelle zu beschreiben,
beim nächsten defaultwert beschreibt man die nächste stelle
es kommt das stoppbit
die auswertung wird ausgeführt. Alle werte zusammenzählen um ein
result zu erhalten
Das Startbit spricht an, das ist OK.
Das Stoppbit spricht auch an auch OK.
Nun also meine Frage an Euch.
Wenn ich das Resultat aber anschaue, habe ich jedesmal wenn ich einen
neuen Lesevorgang mache ein anderes Resultat
Auch die Einzelnen Werte im rxbuffer[1].....usw. sind jedesmal anders.
Was kann das Problem sein. hat jemand eine Ahnung.
Ich habe noch meine Initialisierung des UART angehängt. vielleicht ist
hier noch ein unentdeckter fehler versteckt.
U0BRG = 103; /* baudrate 9600 */ //67
U0MR = 0x05;
U0C0 = 0x10; /* no cts/rts, prescaler = F1 */
U0C1 = 0x05; /* enable receiver and transmitter 0x5*/
UCON = 0x04;
S0TIC = 0x6; /* Set UART0 transmit interrupt priority */
S0RIC = 0x6; /* Set UART0 transmit interrupt priority */
PD6_3 = 1;
PD6_2 = 0;
Vielen Dank für Euren Einsatz
Oli