Om tussen 2 cerebot bordjes een RS 232 verbinding te maken gebruik ik volgende procedures:


void initU1(void) {

U1BRG=BRATE;
U1MODE=U_ENABLE;
U1STA=U_TX;
TRTS=0;
RTS=1;
}

int putU1(int c) {

//while (CTS);
//while (U1STAbits.UTXBF);
U1TXREG=c;
return c;
}

char getU1(void) {
 
RTS=0;
while ( (!U1STAbits.URXDA)) );
RTS=1;
return U1RXREG;
}

Om te debuggen heb ik zoals hier boven de zaken in comment gezet. Op het ene bordje ga ik in een oneindige while loop karakters putten en op het andere in een oneindige while loop karakters opvragen.
Op mijn scoop zie ik de karakters vertrekken van het ene bordje maar op het andere komen ze nooit aan.
Ik geraak nooit voorbij de while ( (!U1STAbits.URXDA)) ); in de get procedure?
Hoe zou dit komen? Iemand enig idee? Groeten.

Wat doet deze regel precies?

while ( (!U1STAbits.URXDA)) );

Wachten op een nieuw karakter.

Dat begreep ik al :)

Dus als het betekent:

Zolang deze voorwaarde waar is:
bit URXDA van register U1STAbits is gelijk aan nul.

dat is dus while ( (!U1STAbits.URXDA)) );

Het valt me inene op dat er links 2 haakjes staan, en rechts 3.
Dat zou een foutmelding moeten geven.

Wat doen de registers precies:
U1STAbits
U1RXREG

Dat bit: URXDA, is dat een flag-bit?

Het is ook wel handig om je register / bitdeclareringen even te laten zien.

dat is dus while ( (!U1STAbits.URXDA)) );
Het valt me inene op dat er links 2 haakjes staan, en rechts 3.
Dat zou een foutmelding moeten geven.

yup dat is fout dat was met het copy pasten.

Het is ook wel handig om je register / bitdeclareringen even te laten zien.

klopt daar zit de fout in, het was voorbeeld code om te communiceren met een terminal kortom een computer er stond:


#define U_Tx 0x0400 //enable tx, clear all flags 

als ik in de datasheet ga kijken dan zie ik idd dat TX gestart wordt maar niet RX dus op één van de twee bordjes moet ik een RX enable zetten.
en dat wordt dan:


#define U_Tx 0x1000 //enable rx, clear all flags 

Bedankt voor de hulp.