Ich m=F6chte Euch um Rat fragen betreffend der Programmierung des UART0 auf meinem Glyn Board EVBM16C/62P Zum schreiben des Codes verwende ich den Tasking Compiler.
Hier mal ein Auszug aus dem Code: #define startbit 002 #define stoppbit 004
unsigned char rxchar; int result; int u; char rxbuffer[10];
unsigned char x; char size;
_interrupt(18) void se_int_receive( void ) { x =3D U0RBL; switch ( x ) { case startbit: u =3D 0; //u ist ein Z=E4hler - z=E4hler auf 0 setzten break; case stoppbit: //kommt das stoppbit, alle rxbuffer addieren result =3D rxbuffer[0]+ rxbuffer[1]+ rxbuffer[2]+ rxbuffer[3]; break; default: u =3D 0; // rxbuffer[u] =3D x;//byte um byte in den rxbuffer u++;
************************************************************** Die Initialisierung der Schnittstelle sieht so aus:
Die Daten welche ich empfangen m=F6chte mit 9600 baud sind: [Byte1] [Byte2] [Byte3] [Byte4]
******************************************************************* Nun meine Problem ist, dass ich immer nur das erste Byte empfangen kann und die anderen 3 nicht. Das Start- und das Stoppbit spricht =FCberhaubt nicht an.
Hat jemand ein L=F6sungsvorschlag f=FCr dieses Problem? wie ich auch die anderen Bytes auswerten kann. Stimmt die Initialisierung? Evt. mache ich einen Grunds=E4tzlichen Fehler, welchen ich mir gerne erkl=E4ren lasse.
oder Hat jemand eine lauff=E4hige Routine um diese eingehenden Daten aus
4 Bytes abfragen zu k=F6nnen?
Besten Dank jetzt schon
Oli
Didn't find your answer? Ask the community — no account required.
D
Dirk Ruth
huber snipped-for-privacy@freesurf.chschrieb: "
^^^^^^^^------- Das wird so nix!
Hier wird dann immer in rxbuffer[0] geschrieben!
^^^^^^^^^^^^-- in der doc steht "Must always be "0""
^^^^^^^^^^^^-- was ist das???
Ich hab mal einen Ausschnitt angehängt der läuft, allerdings auf UART2 mit 9 Datenbits, 2 Stopbits und 2400baud.
***
****** Funktion : initCAN
****** Description: init system for CAN function
****** Input : non
****** Output : non
******
********************************************************************************/ void initCAN( void) { unsigned char err;
u2smr = 0x00; // X010 XXXX // |||| |||| // |||| |||| // |||| |||| // |||| |||| // |||| |||+- Must always be "0" // |||| ||+-- Must always be "0" // |||| |+--- Must always be "0" // |||| +---- Must always be "0" // |||+------ 0: Rising edge of transfer clock // ||| 1: Underflow signal of timer A0 // ||+------- 0: No auto clear function // || 1: Auto clear at occurrence of bus collision // |+-------- 0: Ordinary // | 1: Falling edge of RxD2 // +--------- Must always be "0"
also wennn das Startbit kommt, Zähler auf Null setzen. wenn das erste Nutzbit kommt, u auf null setzen und in den Buffer mit dem Index u schreiben wenn das zweite Nutzbit kommt, u=0 setzen und in buffer mit dem Index u schreiben Wenn das Stoppbit kommt, alles addieren.
Merkst du, was hier schiefläuft??
Robert
'Vom Standpunkt eines Beamtenrechtlers aus betrachtet ist der Tod die
schärfstwirkenste aller bekannten, langfristig wirkenden Formen der
vollständigen Dienstunfähigkeit.'
aus: Kommentar zum Beamtenrecht.
H
huber_oliver
Ja Danke f=FCr den Tipp.
Nat=FCrlich funktioniert das so nicht: default: u =3D 0; // rxbuffer[u] =3D x;//byte um byte in den rxbuffer u++;
[u] darf nat=FCrlich hier nicht 0 gesetzt werden. sonst wird ja immer wieder die gleiche Stelle im Char[] beschrieben.
Also ich habs korrigiert und es funktioniert
Ist ja sch=F6n, wenns nur das ist. Kleine Ursache, grosse Wirkung.
Danke nochmal f=FCr Eure Hilfe
Oli
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.