??? 08/05/11 12:20 Read: times |
#183216 - delayRS() Responding to: ???'s previous message |
how long is that delayRS?
If==halfbit( i suppose this from function rec_byte) , then Your sender produces too short start and stop bits. If==onebit , then Your receiver "rec_byte" is not very precise; See code for additional comments. regards void send_byte(unsigned char x) { unsigned char i; RCAP2L = TL833; RCAP2H = TH833; TL2 = TL833; TH2 = TH833; dat = x; TX = 0; ??????????? delayRS(); for(i=0;i<8;i++) { TX = out; delayRS(); dat = dat >> 1; } TX = 1; ????????????????? delayRS(); } // RX function void rec_byte(unsigned char *x) { unsigned char i; bit t=1; //T2CON = 0x00; RCAP2L = TL416; RCAP2H = TH416; TL2 = TL416; TH2 = TH416; din = 0; waitagain: //????????? while(RX == 1); // check in the middle of start bit!!!!!!! delayRS() ;//half bit if (RX==1) goto waitagain; //???????? ????????????? delayRS();delayRS();delayRS(); // 1.5 bit delay for(i=0;i<8;i++) { in = RX; //sample bit din = din << 1; delayRS();delayRS(); // 1 bit delay } *x = din; //????????? delayRS(); //here You can check validity of stop bit!!! } void main() { unsigned char i,send[]="SEND A CHARACTERn�15",rec[]="character recieved:"; unsigned char input='0'; TX = 1; T2CON = 0x00; RCAP2L = TL833; RCAP2H = TH833; TL2 = TL833; TH2 = TH833; while(1) { while(send[i]) { send_byte(send[i++]); //delay1us(400); } i=0; rec_byte(&input); while(rec[i]) { send_byte(rec[i++]); delay1us(50); //????????? too short pause // allowed, but too short // make delayRS() } send_byte(input); i=0; } } |