Schwierigkeiten mit UART0 Programmierung M16C/62P

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 =3D U0RBL;

switch ( x ) { case stoppbit: //Auswertroutine result =3D rxbuffer[1]+ rxbuffer[2]+ rxbuffer[3]+ rxbuffer[4]+ rxbuffer[5]+ rxbuffer[6]+ rxbuffer[7] ; break;

case startbit: //startbit u =3D 0; //z=E4hler auf 0 setzten

break;

default:

rxbuffer[u] =3D x; //buffer f=FCllen u++; //U0RBL nach rxbuffer schreiben //z=E4hler um 1 erh=F6hen f=FCr n=E4chste //U0RBL nach rxbuffer schreiben

Meine =DCberlegung dahinter ist: es kommt ein startbit wert - der z=E4hler 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=F6ht um die n=E4chste stelle zu beschreiben, beim n=E4chsten defaultwert beschreibt man die n=E4chste stelle

es kommt das stoppbit die auswertung wird ausgef=FChrt. Alle werte zusammenz=E4hlen 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=E4ngt. vielleicht ist hier noch ein unentdeckter fehler versteckt.

U0BRG =3D 103; /* baudrate 9600 */ //67 U0MR =3D 0x05; U0C0 =3D 0x10; /* no cts/rts, prescaler =3D F1 */ U0C1 =3D 0x05; /* enable receiver and transmitter 0x5*/ UCON =3D 0x04;

S0TIC =3D 0x6; /* Set UART0 transmit interrupt priority */ S0RIC =3D 0x6; /* Set UART0 transmit interrupt priority */

PD6_3 =3D 1; PD6_2 =3D 0;

Vielen Dank f=FCr Euren Einsatz

Oli

Reply to
huber_oliver
Loading thread data ...

Hallo,

Irgendwie fehlen alle Variablendeklarationen.

BYTE x; static BYTE u; static BYTE rxbuffer[8]; short unsigned int result;

Ist es beabsichtigt, dass rxbuffer[0] zwar empfangen und gespeichert, aber nicht addiert wird? Werden zwischen "startbit" und "stopbit" tatsaechlich 8 Byte empfangen?

Was soll "startbit" und "stopbit" eigentlich genau sein - soll das ein framing werden (also eher "startbyte" und "stopbyte")?

t

Der Prozessor l=E4uft also mit 16 MHz?

Das halte ich fuer bedenklich. Probiere mal UCON =3D 0x00;

Das kann entfallen.

Setzt du vielleicht irgendwo PCLK1 im PCLKR auf 0 (beliebter Fehler)? Zur Sicherheit kannst du mal folgendes einfuegen: PRC0 =3D 1; PCLK1 =3D 1; PRC0 =3D 0;

HTH, bye Thomas

Reply to
Thomas Matern

Hallo Oliver,

Wertet dieser UART nicht Start- und Stopbits selbst aus und liefert den Bytewert bereits fertig in einem Register?

Der Code sieht mir etwas nach einem Mischmasch zwischen "Ansteuerung eines fertigen UARTS" und "Software-UART, bei dem die Datenbits einzeln eingelesen werden sollen" aus...

Tom

--

------------------------------------------------------
Bitte beachten - AntiSpam-Filter: *.com, *.cn, *.br, *.kr, *.net, *.pl, 
*.ro, *.ru
Reply to
Thomas Langhammer

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.