Hallo, ich arbeite mit einem LPC2134 mit einer RS485-Schnittstelle. Habe Probleme mit void receive():Bei Emfang von Byte leuchtet die receive-Lämchen nicht, d.h. das Byte nicht empangen wird. void transmit(void) funktioniert. Ideen? Vielen Dank imm Voraus. Mit dieser Zuweisung wird doch aus dem UART Byte geholt und damit auch gelesen. Also das Lämchen muss doch kurz aufleuchten. (x = U0RBR); Auf dem Modul sind UARTS ich sende von einem zum anderem über RS485 /*************** System Initialization ***************/ void Initialize (void) { PINSEL0 = 0x00050005; /*Enable TxD1,TxD0,RxD1,RxD0*/ IODIR0 = 0x10400410; /*OUT: RTS0_P0.4, RTS1_P0.14, COM1_P0.22,COM0_P0.28*/ IOSET0 = 0x10400010; /*LOW auf 0 COM = 0(RS485), RTS0=0(Sender)*/ IOCLR0 = 0x00000000; /*HIGH auf 1 RTS1=1(Empfänger)*/ U1LCR = 0x83; /*8 bits, 1 stopbit, no Parity, enable DLAB*/ U1DLM = 0x01; /*9600 Baud Rate, 55.296.000 PCLK*/ U1DLL = 0x68; /*360dez=0x0168*/ U1LCR = 0x03; /*disable DLAB*/ U1FCR = 0x01; /*enable UART1-FIFO*/ U0LCR = 0x83; /*8 bits, 1 stopbit, no Parity, enable DLAB*/ U0DLM = 0x01; /*9600 Baud Rate, 55.296.000 PCLK*/ U0DLL = 0x68; /*360dez=0x0168*/ U0LCR = 0x03; /*disable DLAB*/ U0FCR = 0x01; /*enable UART1-FIFO*/ } /* Write character to Serial Port */ void transmit(void) /*while ist eine Warteschleife*/ { while (!(U1LSR & 0x20)); (U1THR = 0x89); } /* Read character from Serial Port */ unsigned char x; void receive(void) { while ((U0LSR & 0x01)); (x = U0RBR); }
Was soll "das Receive-Lämchen" sein? Warum verwendest du gleich zwei serielle Schnittstellen? Das solltest Du Dir nochmal ansehen:
1 | void transmit(void) /*while ist eine Warteschleife*/ |
2 | {
|
3 | while (!(U1LSR & 0x20)); |
4 | (U1THR = 0x89); |
5 | }
|
Diese Funktion gibt immer denselben Wert aus, ist das sinnvoll? Was sollen die Klammern um die Zeile mit der Zuweisung an U1THR? Deine "Empfangsroutine" ist auch merkwürdig; warum wird das empfangene Zeichen in einer globalen Variablen abgelegt und nicht als Rückgabewert zurückgegeben?
Danke für die schnelle Antwort Ich bin ein Anfänger und arbeite mich ein. Das Lämpchen leuchtet denke ich wenn was versand bzw. empfangen wird. Vielleicht ist auch irgendein Port falsche gesetzt. Ich fins nicht. Ich sende Zeichen von UART1 und empfange dieses Zeichen auf UART0. void transmit(void) { while (!(U1LSR & 0x20)); U1THR = 0x89; } so die Klammern sind weg. Ich will auch nur ein Zeichen senden und mit dem anderem UART empfangen. meinst du so? void receive(void) { while ((U0LSR & 0x01)); return (U0RBR); } allerdings bekomme ich von Keil uVersion folgende Meldung: Initialize.c(58): error: #118: a void function may not return a value
hat sich erledigt. ich habe die PINS falsch gesetzt: IOSET0 = 0x10400010; /*LOW auf 0 COM = 0(RS485), RTS0=0(Sender)*/ IOCLR0 = 0x00000000; /*HIGH auf 1 RTS1=1(Empfänger)*/ richtig wäre: IOCLR0 = 0x10400010; IOSET0 = 0x00000400;
I würde umbedingt mal ein C Tutorial lesen meinst du so? void receive(void) { while ((U0LSR & 0x01)); return (U0RBR); } allerdings bekomme ich von Keil uVersion folgende Meldung: Initialize.c(58): error: #118: a void function may not return a value dann wird das klar sein.
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.