This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Problem with Serial I/O - S0BUF remains empty

Hello,

I'm trying to write a Function that reads a character from RS232 (trival?). I'm using 80c552, Serial_Mode=1.
I think the baudrate is set correct (I can transmit data to the PC).

The Problem is, S0BUF is allways empty.
I tried it on the simulator too.

I paste my code:

CLR RI
JNB RI,$ ; waiting for character
MOV R7, S0BUF ; <- here S0BUF is ALLWAYS 0x00
RET

Any ideas? I thought Serial i/o will be trival...

Parents Reply Children
  • The initialisation function:

    char rs232_ini(unsigned int br, unsigned char modus){
    	unsigned int th_tl;
    
    	//Initialisierung von Timer
    	if (modus%2){ //nur bei den Modis, wo Timer gebraucht wird
    		switch (br){ //nur bestimmte Werte möglich, sonst Fehler
    
    			case 2400: th_tl = 0xF400; break;
    			case 4800: th_tl = 0xFA00; break;
    			case 9600: th_tl = 0xFD00; break;
    			case 19200: th_tl = 0xFD00; PCON = PCON | 0x80; break;
    			default: return 1;
    		}
    		if (timer_ini(1,2,th_tl)!=0) return 3;
    	}
    	if (modus>4) return 2;
    	modus = modus << 6;
    
    	//Initialisierung der RS232 schnittstelle
    	S0CON = modus | 0x10; // modus + reciver enable
    
    	return 0;
    }
    

    I'm trying to debug this with the Keil Software-Simulator of 80c552.
    In "Logic Analyzer" RxD is allways 1, but S0IN changes (there I can see correct values of the characters).
    The character gets lost on the way to S0BUF...

    I changed it in the "erik malunds"-way, but it does not help.