Alles sehr sehr komisch....
Wenn ich alles aus der Timer-ISR rausschmeiss ausser dem bRxCount
Also so:
Code:
#pragma vector=TIMER0_OVF_vect
__interrupt void tim0_ovf(void)
{
TCNT0 = T0_PRELOAD; // Refresh preload
// ==========================================================================
// receive
// ==========================================================================
if (bRxFlag & RX_M_RECEIVE) // receive ?
{
DDRB |= (1<<PB2); // Status LED initialization
PORTB ^= (1<<PORTB2); // toggle status LED
/* 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++;
bRxFlag |= RX_M_MUHKUH;
/* if(PIND&(1<<PD2)) //set bit or leave it
{
bRxByte |=0x80;
bRxCount++;
} */
// }
}
}
while-Schleife:
Code:
while(1)
{
if(bRxFlag & RX_M_MUHKUH)
{
//bRxFlag &= ~RX_M_DATA;
bRxFlag &= ~RX_M_RECEIVE;
bRxFlag &= ~RX_M_MUHKUH;
hw_transmit_byte(bRxCount + 0x30);
}
}
wird kein INT0 ausgelöst. d.h. nur HW-Uart Echo, kein bRxCounter Stand.
Kommentiere ich aber bRxFlag &= ~RX_M_RECEIVE; und bRxFlag &= ~RX_M_MUHKUH; aus, wird INT0 ständig ausgelöst (ein Tastendruck reicht...)
Was dann gesendet wird:
!+5?IS]gq{…™£*·ÁËÕßéóýCMWaku‰“§±»ÅÏÙãí÷
)3=GQ[eoyƒ—¡«µ¿ÉÓÝçñû#-7AKU_is}‡‘›¥¯¹Ã
also nur Müll halt...
Lesezeichen