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