PIC 16 instruction set
Syntax key
| Field |
Description
|
| b |
Bit address within an 8 bit register
|
| d |
Destination select, d=0 store results in W, d=1 store register in f
|
| f |
Register file address 0x00-0xFF
|
| k |
Literal field (Constant)
|
| W |
Working register (accumulator)
|
Instruction set
| Instruction |
Description |
Flags affected
|
| ADDLW k |
Add Literal and W |
C,DC,Z
|
| ADDWF f,d |
Add W and f |
C,DC,Z
|
| ANDLW k |
And Literal with W |
Z
|
| ANDWF f,d |
AND W with f |
Z
|
| BCF f,b |
Bit Clear f |
-
|
| BSF f,b |
Bit Set f |
-
|
| BTFSC f,b |
Bit Test, Skip if Clear |
-
|
| BTFSS f,b |
Bit Test f, Skip if Set |
-
|
| CALL k |
Call Subroutine |
-
|
| CLRF f |
Clear f |
Z
|
| CLRW |
Clear W |
Z
|
| CLRWDT |
Clear Watchdog Timer |
/TO,/PD
|
| COMF f |
Complement f |
Z
|
| DECF f,d |
Decrement f |
Z
|
| DECFSZ f,d |
Decrement f, Skip if 0 |
-
|
| GOTO k |
Unconditional Branch |
-
|
| INCF f,d |
Increment f |
Z
|
| INCFSZ f,d |
Increment f, Skip if 0 |
-
|
| IORLW k |
Inclusive OR Literal with W |
Z
|
| IORWF f,d |
Inclusive OR W with f |
Z
|
| MOVLW k |
Move Literal to W |
-
|
| MOVF f,d |
Move f |
Z
|
| MOVWF f |
Move W to f |
-
|
| NOP |
No Operation |
-
|
| RETFIE |
Return from Interrupt |
-
|
| RETLW k |
Return with Literal in W |
-
|
| RETURN |
Return from Subroutine |
-
|
| RLF f,d |
Rotate Left f through Carry |
C
|
| RRF f,d |
Rotate Right f through Carry |
C
|
| SLEEP |
Enter SLEEP mode, stop oscillator |
/TO,/PD
|
| SUBLW k |
Subtract W from Literal |
C,DC,Z
|
| SUBWF f,d |
Subtract W from f |
C,DC,Z
|
| SWAPF f,d |
Swap Nibbles in f |
-
|
| XORLW k |
Exclusive OR Literal with W |
Z
|
| XORWF f,d |
Exclusive OR W with f |
Z
|
Deprecated instructions
These instructions still work on most models and are useful for optimizations.
| Instruction |
Description |
Flags affected
|
| OPTION |
Load the OPTION register with the contents of W |
-
|
| TRIS f |
Load a TRIS register with the contents of W |
-
|
PIC 17 instruction set
| Instruction |
Description |
Flags affected
|
| ADDWF f,d |
ADD WREG to f |
OV,C,DC,Z
|
| ADDWFC f,d |
ADD WREG and Carry bit to f |
OV,C,DC,Z
|
| ANDWF f,d |
AND WREG with f |
Z
|
| CLRF f,s |
Clear f, or Clear f and Clear WREG |
-
|
| COMF f,d |
Complement f |
Z
|
| CPFSEQ f |
Compare f with WREG, skip if f = WREG |
-
|
| CPFSGT f |
Compare f with WREG, skip if f > WREG |
-
|
| CPFSLT f |
Compare f with WREG, skip if f < WREG |
-
|
| DAW f,s |
Decimal Adjust WREG Register |
C
|
| DECF f,d |
Decrement f |
OV,C,DC,Z
|
| DECFSZ f,d |
Decrement f, skip if 0 |
-
|
| DCFSNZ f,d |
Decrement f, skip if not 0 |
-
|
| INCF f,d |
Increment f |
OV,C,DC,Z
|
| INCFSZ f,d |
Increment f, skip if 0 |
-
|
| INFSNZ f,d |
Increment f, skip if not 0 |
-
|
| IORWF f,d |
Inclusive OR WREG with f |
Z
|
| MOVFP f,p |
Move f to p |
-
|
| MOVPF p,f |
Move p to f |
Z
|
| MOVWF f |
Move WREG to f |
-
|
| MULWF f |
Multiply WREG with f |
-
|
| NEGW f,s |
Negate WREG |
OV,C,DC,Z
|
| NOP |
No Operation |
-
|
| RLCF f,d |
Rotate left f through Carry |
C
|
| RLNCF f,d |
Rotate left f (no carry) |
-
|
| RRCF f,d |
Rotate right f through Carry |
C
|
| RRNCF f,d |
Rotate right f (no carry) |
-
|
| SETF f,s |
Set f |
-
|
| SUBWF f,d |
Subtract WREG from f |
OV,C,DC,Z
|
| SUBWFB f,d |
Subtract WREG from f with Borrow |
OV,C,DC,Z
|
| SWAPF f,d |
Swap f |
-
|
| TABLRD t,i,f |
Table Read |
-
|
| TABLWT t,i,f |
Table Write |
-
|
| TLRD t,f |
Table Latch Read |
-
|
| TLWT t,f |
Table Latch Write |
-
|
| TSTFSZ f |
Test f, skip if 0 |
Z
|
| XORWF f,d |
Exclusive OR WREG with f |
Z
|
| BCF f,b |
Bit Clear f |
-
|
| BSF f,b |
Bit Set f |
-
|
| BTFSC f,b |
Bit test, skip if clear |
-
|
| BTFSS f,b |
Bit test, skip if set |
-
|
| BTG f,b |
Bit Toggle f |
-
|
| ADDLW k |
ADD literal to WREG |
OV,C,DC,Z
|
| ANDLW k |
AND literal with WREG |
Z
|
| CALL k |
Subroutine Call |
-
|
| CLRWDT |
Clear Watchdog Timer |
/TO,/PD
|
| GOTO k |
Unconditional Branch |
-
|
| IORLW k |
Inclusive OR literal with WREG |
Z
|
| LCALL k |
Long Call |
-
|
| MOVLB k |
Move literal to low nibble in BSR |
-
|
| MOVLR k |
Move literal to high nibble in BSR |
-
|
| MOVLW k |
Move literal to WREG |
-
|
| MULLW k |
Multiply literal with WREG |
-
|
| RETFIE |
Return from interrupt (and enable interrupts) |
GLINTD
|
| RETLW k |
Return literal to WREG |
-
|
| RETURN |
Return from subroutine |
-
|
| SLEEP |
Enter SLEEP Mode |
/TO,/PD
|
| SUBLW k |
Subtract WREG from literal |
OV,C,DC,Z
|
| XORLW k |
Exclusive OR literal with WREG |
Z
|
PIC 18 instruction set
| Instruction |
Description |
Flags affected
|
| ADDWF f, d, a |
Add WREG and f |
C, DC, Z, OV, N
|
| ADDWFC f, d, a |
Add WREG and Carry bit to f |
C, DC, Z, OV, N
|
| ANDWF f, d, a |
AND WREG with f |
Z, N
|
| CLRF f, a |
Clear f |
Z
|
| COMF f, d, a |
Complement f |
Z, N
|
| CPFSEQ f, a |
Compare f with WREG, skip = |
None
|
| CPFSGT f, a |
Compare f with WREG, skip > |
None
|
| CPFSLT f, a |
Compare f with WREG, skip < |
None
|
| DECF f, d, a |
Decrement f |
C, DC, Z, OV, N
|
| DECFSZ f, d, a |
Decrement f, Skip if 0 |
None
|
| DCFSNZ f, d, a |
Decrement f, Skip if Not 0 |
None
|
| INCF f, d, a |
Increment f |
C, DC, Z, OV, N
|
| INCFSZ f, d, a |
Increment f, Skip if 0 |
None
|
| INFSNZ f, d, a |
Increment f, Skip if Not 0 |
None
|
| IORWF f, d, a |
Inclusive OR WREG with f |
Z, N
|
| MOVF f, d, a |
Move f |
Z, N
|
| MOVFF fs, fd |
Move fs to fd |
None
|
| MOVWF f, a |
Move WREG to f |
None
|
| MULWF f, a |
Multiply WREG with f |
None
|
| NEGF f, a |
Negate f |
C, DC, Z, OV, N
|
| RLCF f, d, a |
Rotate Left f through Carry |
C, Z, N
|
| RLNCF f, d, a |
Rotate Left f (No Carry) |
Z, N
|
| RRCF f, d, a |
Rotate Right f through Carry |
C, Z, N
|
| RRNCF f, d, a |
Rotate Right f (No Carry) |
Z, N
|
| SETF f, a |
Set f |
None
|
| SUBFWB f, d, a |
Subtract f from WREG with borrow |
C, DC, Z, OV, N
|
| SUBWF f, d, a |
Subtract WREG from f |
C, DC, Z, OV, N
|
| SUBWFB f, d, a |
Subtract WREG from f with borrow |
C, DC, Z, OV, N
|
| SWAPF f, d, a |
Swap nibbles in f |
None
|
| TSTFSZ f, a |
Test f, skip if 0 |
None
|
| XORWF f, d, a |
Exclusive OR WREG with f |
Z, N
|
| BCF f, b, a |
Bit Clear f |
None
|
| BSF f, b, a |
Bit Set f |
None
|
| BTFSC f, b, a |
Bit Test f, Skip if Clear |
None
|
| BTFSS f, b, a |
Bit Test f, Skip if Set |
None
|
| BTG f, d, a |
Bit Toggle f |
None
|
| BC n |
Branch if Carry |
None
|
| BN n |
Branch if Negative |
None
|
| BNC n |
Branch if Not Carry |
None
|
| BNN n |
Branch if Not Negative |
None
|
| BNOV n |
Branch if Not Overflow |
None
|
| BNZ n |
Branch if Not Zero |
None
|
| BOV n |
Branch if Overflow |
None
|
| BRA n |
Branch Unconditionally |
None
|
| BZ n |
Branch if Zero |
None
|
| CALL n, s |
Call subroutine |
None
|
| CLRWDT |
Clear Watchdog Timer |
/TO, /PD
|
| DAW |
Decimal Adjust WREG |
C
|
| GOTO n |
Go to address |
None
|
| NOP |
No Operation |
None
|
| POP |
Pop top of return stack (TOS) |
None
|
| PUSH |
Push top of return stack (TOS) |
None
|
| RCALL n |
Relative Call |
None
|
| RESET |
Software device Reset |
All
|
| RETFIE s |
Return from interrupt enable |
GIE/GIEH,PEIE/GIEL
|
| RETLW k |
Return with literal in WREG |
None
|
| RETURN s |
Return from Subroutine |
None
|
| SLEEP |
Go into Standby mode |
TO, PD
|
| ADDLW k |
Add literal and WREG |
C, DC, Z, OV, N
|
| ANDLW k |
AND literal with WREG |
Z, N
|
| IORLW k |
Inclusive OR literal with WREG |
Z, N
|
| LFSR f, k |
Move literal (12-bit) to FSRx |
None
|
| MOVLB k |
Move literal to BSR<3:0> |
None
|
| MOVLW k |
Move literal to WREG |
None
|
| MULLW k |
Multiply literal with WREG |
None
|
| RETLW k |
Return with literal in WREG |
None
|
| SUBLW k |
Subtract WREG from literal |
C, DC, Z, OV, N
|
| XORLW k |
Exclusive OR literal with WREG |
Z, N
|
| TBLRD* |
Table Read |
None
|
| TBLRD*+ |
Table Read with post-increment |
None
|
| TBLRD*- |
Table Read with post-decrement |
None
|
| TBLRD+* |
Table Read with pre-increment |
None
|
| TBLWT* |
Table Write |
None
|
| TBLWT*+ |
Table Write with post-increment |
None
|
| TBLWT*- |
Table Write with post-decrement |
None
|
| TBLWT+* |
Table Write with pre-increment |
None
|