Code while()
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);
}
}
Receive-Routine inner Timer-ISR:
Code:
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++;
} */
}
}
und INT0
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
}
so wie ichs jetzt hab kommen nur U's (UUUUUUUU usw.)
Lesezeichen