Ich verzweifel da noch dran, hab jetzt Stunden mit ausprobieren verbracht aber ich komme auf keinen grünen Zweig...
Bei dem Code unten bekomme ich immer eine 17-stellige Zahl, dabei sollen einfach nur alle Bits in die Variable rc5.gesamt kopiert werden...
Code:#include <avr/io.h> #include <avr/interrupt.h> #include <math.h> #include <inttypes.h> #include <compat/deprecated.h> struct rc5_parts { volatile char s_bit; volatile uint8_t addresse; volatile uint8_t code; volatile char rdy; volatile uint16_t gesamt; } volatile rc5; volatile uint8_t bitnummer = 0; void init_rc5() { MCUCR |= (1<<ISC11); //wait falling edge GICR |= (1<<INT1); //enable INT1 TCCR0 |= (1<<CS02); //Prescaler 256 cbi(DDRD,PD3); } //****************************************************USART****************************** void init_usart(void) { UBRRL |= 0b01100111; UCSRB = (1<<TXEN) | (1<<RXEN); UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); } void send_char(unsigned char s) { while (!(UCSRA & (1<<UDRE))); UDR = s; } void send_string(char *s) { while(*s != '\0') { send_char(*s); s++; } } //**********************************************************USART-ENDE******************** SIGNAL(SIG_OVERFLOW0) { bitnummer++; if(rc5.s_bit == 1 && bitnummer < 14) { if((PIND & (1<<PD3)) != 0) { rc5.gesamt |= (1<<(14-bitnummer)); TCNT0 = 228; } else { rc5.gesamt &= ~(1<<(14-bitnummer)); TCNT0 = 228; } } if(rc5.s_bit == 1 && bitnummer == 14) { cbi(TIMSK,TOIE0); TCNT0 = 0; rc5.rdy = 1; } } SIGNAL(SIG_INTERRUPT1) { if(rc5.s_bit==0) { TCNT0 = 228; rc5.s_bit = 1; sbi(TIMSK,TOIE0); cbi(GICR,INT1); } } int main(void) { init_usart(); init_rc5(); sei(); char result[10]; for(;;) { if(rc5.rdy == 1) { itoa(rc5.gesamt,result,10); char hello2[15] = "RC5-Code: "; send_string(result); rc5.rdy = 0; rc5.gesamt = 0; rc5.s_bit = 0; bitnummer = 0; sbi(GICR,INT1); } } }







Zitieren

Lesezeichen