Morgen, da sind wir wieder !
Zitat Zitat von schamp
Wenn du z.b. if(bRxCount & 0x09) oder 0x07 machst dann ist Bit-Kopie nicht mehr ok und y kommen immer noch.....
ist klar, das ist der Unterschied "&" und "==". Egal
Ein neues Spiel, ein neues Glück:
Wir machen die Counterei zu Fuß, vergleichen dann mit dem Timer-ISR Ergebnis und erhoffen Weisheiten.
Dazu senden wir immer nur das Zeichen 0x55, das ergibt mit start und stop genau das Muster 0 10101010 1, dadurch kriegen wir die Bitwechsel auch ohne Time genau mit. die erste Flanke zum Startbit kriegt ja der INT0, der setzt RX_M_RECEIVE, und dann geht's los
(dabei läuft die Timer0-ISR ganz normal, nur
RX_M_DATA setzt er NICHT und
RX_M_RECEIVE löscht er NICHT, das machen wir jetzt extra)
Code:
unsigned char bOld = 0;                // wegen den Flanken 
unsigned char bCnt = 0;              // vergleichszähler

// in der  INT0 ISR zusätzlich
         bOld = 0;                
         bCnt = 0;               

// in der  while(1) -schleife

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);     
}
send_one_byte(bRxCount + 0x30);
Wir senden den Byte-Zähler, den die Timer0-ISR zu diesem Zeitpunkt gerade hat. Der sollte ja eigentlich auch ca 8 oder 9 sein. Ist er weiter weg, können wir abschätzen, wo die Differenz liegt
( + 0x30) --> damit das ein druckbares zeichen wird und wir es lesen können.
0x30 ---> "0"

wie gesagt, kann nur funzen, wenn 0x55 = "U" geschickt wird, wegen des Bit musters

Verständlich ?