Hallo,
ik probeer het volgende stukje code te begrijpen:
static void LcdWrtNibble( uns8 nibble)
{
uns8 temp;
nibble &= 0x0F; //strip higher bits
temp = PORTC & 0xF0; //keep original High nibble
temp |= nibble;
PORTC= temp; //write nibble and original higher nibble
EN=1;
Delay_ms(3);
EN=0;
}
De waarde die nibble krijgt is als volgt:
LcdWrtNibble(0b0000.0011);
Nu snap ik niet goed wat &= en |= doen.
Ik heb ze geprobeerd op te zoeken, en heb resp. de volgende definitie's gevonden:
Assignment by bitwise AND
Assignment by bitwise OR
Maar wat er nu precies gebeurt snap ik niet..
Wie kan mij hiermee helpen?
edit, voor dit stuk code wordt RS op 0 gezet
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
&= doet eerst een and, en dan een toekenning.
nible &= 0x0F doet dus nible = nible&0x0F (ofwel bit 7-4 worden 0, en de rest blijft zoals ze waren)
&= gebruik je om bits op 0 te forceren: je AND (bitwise) met een waarde waar 1-en staan waar je de oorspronkelijke waarde wilt houden, en een 0 waar je een bitje 0 wilt krijgen.
|= werkt op dezelfde manier: Dat doet eerst een OR en dan een toekenning:
temp |= nible doet dus temp = temp|nible.
|= gebruik je om bits op 1 te forceren, je OR-ed (bitwise) met een waarde waar 0-en staan waar je de oorspronkelijke waarde wilt houden, en een 1 waar je een bitje 1 wilt krijgen.
a = 0b10001011 & 0x0F levert als resultaat dat er 0b00001011 in a komt te staan
Zou je daarna a |= 0b10010000 doen, dan staat vervolgens 0b10011011 in a.
Op 12 oktober 2011 15:33:21 schreef twente:
ik probeer het volgende stukje code te begrijpen:nibble &= 0x0F; temp |= nibble;
Het zou al makkelijker zijn als het voluit geschreven was:
nibble = nibble & 0x0F;
temp = temp | nibble;
De oorspronkelijke code is syntactisch juist, maar niet altijd even goed leesbaar.