I have a strange problem in my code. I cannot receive characters via the serial port.
I've read up on the TI and RI interrupts and I think I am handling these correctly.
The program goes to the serial I/O isr, but just sits at the gets(comin,4) line. When I examine comin in the watch window and input chars via the SIN = xx (where xx is an ascii code), I can see the comin array remains empty.
Below is the serial I/O interrupt routine (my application does not need Tx)
pre void uart_rx_isr (void) interrupt 4 using 3 { signed char index=0; EA=0;
if (RI == 1) { gets(comin,4); command = atoi(comin); } RI=FALSE; /* finished isr - clear flag */ TI=FALSE; /* TI will not be used - always clear it*/ EA=1; }
/pre
Here is a fragment from main() - you can see that I set TI=1 initially to set the UART up
pre
TI=TRUE; /* always set TI=1 initially to allow serial printing */ RI=0;
loop: //RI=0; //IDLE
while ((1));
goto loop; } /pre
Appreciate some pointers here.
Jason
HI.
i have tidyed yo're code.
void uart_rx_isr (void) interrupt 4 using 3 { signed char index=0; EA=0; if (RI == 1) { gets(comin,4); command = atoi(comin); } RI=FALSE; /* finished isr - clear flag */ TI=FALSE; /* TI will not be used - always clear it*/ EA=1; }
TI=TRUE; /* always set TI=1 initially to allow serial printing */ RI=0; loop: // RI=0; //IDLE while ((1)) ; goto loop; }
they're a lot of things wrong.
the bigest i think is yo're interrupt. it gets called when they're is one char from uart. but you call 'gets" to get more char's. where do u think they will come from?
u must change yo're isr to collect the char's. one at a time.
also u must clear ri if it is set. not evry time.
r u using tx anywear? if u do not then u do not set ti.
Alway's yo're freind.
Zeusti.
Thanks Zeusti. Iwill try your recomendations tonite.
View all questions in Keil forum