AND, OR, XOR och... lilla ADD.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Erik M
Inlägg: 1380
Blev medlem: 23 februari 2012, 18:34:39
Ort: Göteborg

AND, OR, XOR och... lilla ADD.

Inlägg av Erik M »

Kod: Markera allt

	MOVF		 GPIO,W	     ; uuRRuuRR / u: undesired bit /  R: desired bit
	MOVWF		ModeMSB
	ANDLW		b'00000011'	; 000000pp / 0: clear bit     /  p: preserv bit 
	MOVWF		Mode		    ; 000000WW / 0: cleared bit   /  W: desired bit written as when read
	RRF		  ModeMSB
	RRF		  ModeMSB,W	  ; wwuuRRuu / u: undesired bit /  R: desired bit / w: previosly written bit
	ANDLW		b'00001100'	; 0000pp00 / 0: clear bit     /  p: preserv bit 
	ADDWF		Mode		    ; 0000WWww / 0: cleared bit   /  W: desired bit written as when read
Blev detta rätt?
Värdena som är intressanta är GP5, GP4, GP1 och GP0.
Helst lagda så de bildar sin egen kompletta låga nibble.
Dvs att de möjliga 16 utfallen ligger i följd 0-15.

Först läses GPIO av och kopieras in i både Mode och ModeMSB.
Börjar alltså med att spara undan GP1 och GP0 i Mode som b1 och b0..
Sedan flyttas GP5 och GP4 till sina blivande positioner, dvs två åt höger.
Åsså rensas det rent just dem.
Sist plussas GP5 och GP4 in till att bli b3 och b2, bredvid GP1/b1 och GP0/b0 i Mode.

Detta kan enkelt kollas av i ex PicSim, men det är roligare att testa teoretiskt först.
Och lättare finna ut var det blev skillnad mellan förväntat och erhållet resultat.