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
What about : JNB RI,$ ; waiting for character CLR RI MOV R7, S0BUF ; <- here S0BUF is ALLWAYS 0x00 RET
1. Thank you for all the answers! 2. RxD is allways 1 3. The complete code of the function
char rs232_getChar(){ #pragma asm CLR RI JNB RI,$ #pragma endasm return S0BUF; }
3. The complete code of the function how about the initialize code? BTW pragma asm CLR RI JNB RI,$ #pragma endasm woul, if I did it, be RI = 0; while (!RI); Erik
RxD is allways 1 So there is no signal at the receive pin ?
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; }