Code while()
Receive-Routine inner Timer-ISR:Code:while(1) { if (bRxFlag & RX_M_RECEIVE) { if ( ( PIND & (1<<PD2)) ^ (bOld & (1<<PD2))) // any Flanke ? { if (bCnt & 0x08) { bRxFlag &= ~RX_M_RECEIVE; bRxFlag |= RX_M_DATA; } else { bOld = PIND; bCnt++; bRxByte >>= 1; } } if ( PIND & (1<<PD2)) { PORTD |=(1<<PD4); bRxByte |=0x80; } else { PORTD &= ~(1<<PD4); } } if (bRxFlag & RX_M_DATA) { bRxFlag &= ~RX_M_DATA; send_one_byte(bRxCount + 0x30); } }
und INT0Code:if (bRxFlag & RX_M_RECEIVE) // receive ? { if (bRxCount & 0x08) // is this the stop-Bit (9th) { //bRxFlag &= ~RX_M_RECEIVE; // receiving sequence done //bRxFlag |= RX_M_DATA; // signal data GICR |= 1<<INT0; // re-enable int0 for next } else { bRxByte >>= 1; // Shift right data bRxCount++; /* if(PIND&(1<<PD2)) //set bit or leave it { bRxByte |=0x80; bRxCount++; } */ } }
so wie ichs jetzt hab kommen nur U's (UUUUUUUU usw.)Code:if(!(bRxFlag & RX_M_RECEIVE)) { GICR = 0; // Disable external interrupt // bTxFlag &= ~TX_M_SEND; // Deactivate Transmit-Mode TCNT0 = INT0_PRELOAD; // Set timer reload-value (to 1.5 bit len). 29 = time delay that // have already been used in this // interrupt plus the time // that will be used by the time // delay between timer interrupt request // and the actual sampling of the first // data bit. TIFR |= (1<<TOV0); // clear T/C0 overflow flag TIMSK |= (1<<TOIE0); // enable T/C0 overflow interrupt bRxCount = 0; // Clear Receive Counter bOld = 0; bCnt = 0; bRxFlag |= RX_M_RECEIVE; // Activate Receive-Mode }







Zitieren

Lesezeichen