So ich hab nun alle möglichkeiten durchgetestet und im Code dokumentiert, ich würde mich sehr freuen wenn du mir anhand dieser Information Näheres sagen könntest:
Code:
#if (RC5_INT == RC5_INT0)
ISR(INT0_vect)
#elif (RC5_INT == RC5_INT1)
ISR(INT1_vect)
#endif /* RC5_INT */
{
// Hier impuls sync mit tastendruck
code_t _code = code;
uint8_t _nint = nint;
uint8_t tcnt0 = TCNT0;
TCNT0 = 0;
if (0 == _nint)
{
// Hier impulse mit erster fallender Flanke
/* INTx on both edges */
#if (RC5_INT == RC5_INT0)
// Hier impulse mit erster fallender Flanke
MCUCR = (MCUCR | (1 << ISC00)) & ~ (1 << ISC01);
#elif (RC5_INT == RC5_INT1)
//Hier geht er nicht rein, wegen nutzung von INT0
MCUCR = (MCUCR | (1 << ISC10)) & ~ (1 << ISC11);
#endif /* RC5_INT */
TIFR = (1 << TOV0);
TIMSK |= (1 << TOIE0);
_code.w = 0;
// Hier impulse mit erster fallender Flanke
}
else
{
// Hier impulse mit erster steigender Flanke
/* Number of bits of the just elapsed period */
uint8_t n = 1;
/* Bits received so far */
uint8_t _nbits = nbits;
/* is TCNT0 close to RC5_TICKS or RC5_TICKS/2 ? */
if (tcnt0 > RC5_TICKS + RC5_DELTA)
goto invalid;
else if (tcnt0 < RC5_TICKS/2 - RC5_DELTA){
// Hier impulse mit erster steigender Flanke
goto invalid;}
else if (tcnt0 > RC5_TICKS - RC5_DELTA){
// Hier geht er nicht rein!!
n = 2;}
else if (tcnt0 > RC5_TICKS/2 + RC5_DELTA){
// Hier geht er nicht rein!!
goto invalid;}
/* store the just received 1 or 2 bits */
do
{
// Hier geht er nicht rein!!!
_nbits++;
if (_nbits & 1)
{
_code.w <<= 1;
_code.b[0] |= _nint & 1;
}
}
while (--n);
if (0)
{
// Hier geht er nicht rein!!
invalid:
/* disable INTx, run into Overflow0 */
#if (RC5_INT == RC5_INT0)
// Hier geht er mit erster steigenden Flanke rein
GICR &= ~(1 << INT0);
#elif (RC5_INT == RC5_INT1)
GICR &= ~(1 << INT1);
#endif /* RC5_INT */
// Hier geht er mit erster steigenden Flanke rein
_nbits = 0;
}
// Hier geht er mit erster steigenden Flanke rein
nbits = _nbits;
}
// Hier geht er mit erster fallenden Flanke rein
code = _code;
nint = 1+_nint;
}
Lesezeichen