Hallo m.a.r.v.i.n,
das funktioniert nicht:
Das ist das Assemblerlisting dazu:Code:PORTB |= (1 << PB3); /* setzt Port B.3 auf HIGH */ PORTB &= (1 << PB3); /* setzt Port B.3 auf LOW */
So ist es richtig:Code:PORTB |= (1 << PB3); /* setzt Port B.3 auf HIGH */ 9a: c3 9a sbi 0x18, 3 ; 24 PORTB &= (1 << PB3); /* setzt Port B.3 auf LOW */ 9c: 88 b3 in r24, 0x18 ; 24 9e: 88 70 andi r24, 0x08 ; 8 a0: 88 bb out 0x18, r24 ; 24
Das Assemblerlisting dazu:Code:PORTB |= (1 << PB3); /* setzt Port B.3 auf HIGH */ PORTB = (PINB & (~(1 << PB3))); /* setzt Port B.3 auf LOW */
Du musst das Pinregister lesen und den geänderten Wert zum Portregister schreiben!Code:PORTB |= (1 << PB3); /* setzt Port B.3 auf HIGH */ 9a: c3 9a sbi 0x18, 3 ; 24 PORTB = (PINB & (~(1 << PB3))); /* setzt Port B.3 auf LOW */ 9c: 86 b3 in r24, 0x16 ; 22 9e: 87 7f andi r24, 0xF7 ; 247 a0: 88 bb out 0x18, r24 ; 24
Oder du benutzt zum Setzen und Rücksetzen der Bits gleich die alten GCC-Macros:
Ronny10Code:#define sbi(p,b) p|=(1<<(b)) #define cbi(p,b) p&=(~(1<<(b))) sbi( PORTB, PB3 ); // setze bit3 portb cbi( PORTB, PB3 ); // rücksetze bit3 portb






Zitieren

Lesezeichen