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

&= 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.