Hi
setze bitte deinen Code in die Code Tags (code nicht c) so tut man sich schwer beim lesen.
Meines Wissens kommt der Wert der mit Return zurückgeliefert wird in ().
Arbeitest Du mit Interrupt? - oder warum das sei() und cli() ?
Code:
/* geht leider nicht
PORTB= (0b01110111 | (PORTB & (1<<PB7)));
*/
Das setzt da es eine ODER-Verknüpfung ist den PORTB immer auf 0b1111x111
x kann nur auf 1 gesetzt werden aber icht auf 0 da es hier nur eine ODER-Verknüpfung ist.
Habe ich das richtig Verstanden das du an PortB glecihzeitig lesen und schreiben willst, wenn ja dann musst du auch ständig die DDR von PortB ändern:
Code:
//DDRB= 0b11111000;
....
....
C=234;
C|=0xDD;
C= PINB | 0b11111000;
Du kannst nichts lesen (PINB) wenn Du sie vorher als Ausgänge definiert hast.
Code:
PORTB=(0b00111111 | (PORTB & (1<<PB7)));
Wieder das Problem das es eine ODER-Verknüpfung ist. Die Anweisung bewirkt:
Auf Null setzen kannste PB6 mit dieser Anweisung nicht, PB6 wird durch diese Anweisung nicht verändert.
So ich hoffe dir geht nun ein Licht auf 
mfg
Benny
mfg
Benny
Lesezeichen