Assignment |
W=0 |
|
CLRW |
|
M=0 |
|
CLRF M |
W=a |
|
MOVLW a |
M=a |
W=a
M=W |
MOVLW a
MOVWF M |
M=W |
|
MOVWF M |
W=M |
|
MOVF M,W |
M1=M2 |
W=M2
M1=W |
MOVF M2,W
MOVWF M1 |
|
|
|
Addition |
W=W+1 |
|
ADDLW 1 |
|
M=W+1 |
W=W+1
M=W |
ADDLW 1
MOVWF M |
W=M+1 |
|
INCF M,W |
M=M+1 |
|
INCF M,F |
W=W+a |
|
ADDLW a |
M=W+a |
W=W+a
M=W |
ADDLW a
MOVWF M |
W=M+a |
W=a
W=W+M |
MOVLW a
ADDWF M,W |
M=M+a |
W=a
M=W+M |
MOVLW a
ADDWF M,F |
W=W+M |
|
ADDWF M,W |
M=W+M |
|
ADDWF M,F |
W=M1+M2 |
W=M2
W=W+M1 |
MOVF M2,W
ADDWF M1,W |
M1=M1+M2 |
W=M2
M1=W+M1 |
MOVF M2,W
ADDWF M1,F |
|
|
|
Subtraction |
W=-W |
|
SUBLW 0 |
|
M=-W |
W=-W
M=W |
SUBLW 0
MOVWF M |
W=-M |
W=M
W=-W |
MOVF M,W
SUBLW 0 |
M1=-M2 |
W=M2
W=-W
M1=W |
MOVF M2,W
SUBLW 0
MOVWF M1 |
W=W-1 |
W=W+ (-1) |
ADDLW 0xFF |
M=W-1 |
W=W+ (-1)
M=W |
ADDLW 0xFF
MOVWF M |
W=M-1 |
|
DECF M,W |
M=M-1 |
|
DECF M,F |
W=W-a |
W=W+ (-a) |
ADDLW -a |
M=W-a |
W=W+ (-a)
M=W |
ADDLW -a
MOVWF M |
W=a-W |
|
SUBLW a |
M=a-W |
W=a-W
M=W |
SUBLW a
MOVWF M |
W=M-a |
W=a
W=M-W |
MOVLW a
SUBWF M,W |
M=M-a |
W=a
M=M-W |
MOVLW a
SUBWF M,F |
W=a-M |
W=M
W=a-W |
MOVF M,W
SUBLW a |
M=a-M |
W=M
W=a-W
M=W |
MOVF M,W
SUBLW a
MOVWF M |
W=W-M |
W=M-W
W=-W |
SUBWF M,W
SUBLW 0 |
M=W-M |
W=M-W
W=-W
M=W |
SUBWF M,W
SUBLW 0
MOVWF M |
W=M-W |
|
SUBWF M,W |
M=M-W |
|
SUBWF M,F |
W=M1-M2 |
W=M2
W=M1-W |
MOVF M2,W
SUBWF M1,W |
M1=M1-M2 |
W=M2
M1=M1-W |
MOVF M2,W
SUBWF M1,F |
M2=M1-M2 |
W=M2
W=M1-W
M2=W |
MOVF M2,W
SUBWF M1,W
MOVWF M2 |
|
|
|
Logical Operation OR |
W=W OR a |
|
IORLW a |
Truth table of
OR function :
E1 |
E2 |
|
S |
0 |
0 |
|
0 |
0 |
1 |
|
1 |
1 |
0 |
|
1 |
1 |
1 |
|
1 |
It is also used to change bits to 1.
if E2=1 then S always equals 1
if E2=0 then S is unchanged. |
M=W OR a |
W=W OR a
M=W |
IORLW a
MOVWF M |
W=M OR a |
W=M
W=W OR a |
MOVF M,W
IORLW a |
M=M OR a |
W=a
M=M OR W |
MOVLW a
IORWF M,F |
W=W OR M |
|
IORWF M,W |
M=W OR M |
|
IORWF M,F |
W=M1 OR M2 |
W=M2
W=W OR M1 |
MOVF M2,W
IORWF M1,W |
M1=M1 OR M2 |
W=M2
M1=W OR M1 |
MOVF M2,W
IORWF M1,F |
|
|
|
Logical Operation AND |
W=W AND a |
|
ANDLW a |
Truth table of
AND function :
E1 |
E2 |
|
S |
0 |
0 |
|
0 |
0 |
1 |
|
0 |
1 |
0 |
|
0 |
1 |
1 |
|
1 |
It is also used to change bits to 0.
if E2=0 then S always equals 0
if E2=1 then S is unchanged. |
M=W AND a |
W=W AND a
M=W |
ANDLW a
MOVWF M |
W=M AND a |
W=M
W=W AND a |
MOVF M,W
ANDLW a |
M=M AND a |
W=a
M=M AND W |
MOVLW a
ANDWF M,F |
W=W AND M |
|
ANDWF M,W |
M=W AND M |
|
ANDWF M,F |
W=M1 AND M2 |
W=M2
W=W AND M1 |
MOVF M2,W
ANDWF M1,W |
M1=M1 AND M2 |
W=M2
M1=W AND M1 |
MOVF M2,W
ANDWF M1,F |
|
|
|
Logical Operation Exclusive OR (
XOR ) |
W=W XOR a |
|
XORLW a |
Truth table of
XOR function :
E1 |
E2 |
|
S |
0 |
0 |
|
0 |
0 |
1 |
|
1 |
1 |
0 |
|
0 |
1 |
1 |
|
1 |
It is also used to permute bits.
if E2=1 then S=NOT S
if E2=0 then S is unchanged. |
M=W XOR a |
W=W XOR a
M=W |
XORLW a
MOVWF M |
W=M XOR a |
W=M
W=W XOR a |
MOVF M,W
XORLW a |
M=M XOR a |
W=a
M=M XOR W |
MOVLW a
XORWF M,F |
W=W XOR M |
|
XORWF M,W |
M=W XOR M |
|
XORWF M,F |
W=M1 XOR M2 |
W=M2
W=W XOR M1 |
MOVF M2,W
XORWF M1,W |
M1=M1 XOR M2 |
W=M2
M1=W XOR M1 |
MOVF M2,W
XORWF M1,F |
|
|
|
Logical Operation NOT |
W=NOT W |
|
XORLW 0xFF |
Truth table
of NOT function :
It is also used to permute bits. |
M=NOT W |
W=NOT W
M=W |
XORLW 0xFF
MOVWF M |
W=NOT M |
|
COMF M,W |
M=NOT M |
|
COMF M,F |
M1=NOT M2 |
W=NOT M2
M1=W |
COMF M,W
MOVWF M1 |
|
|
|
Bits assignement with b
the bit number from 0 to 7 |
W(b)=0 |
|
ANDLW B'11111111'
with bit b equals 0 |
If you have to modify many bits
it is better to use to OR or AND functions. |
M(b)=0 |
|
BCF M,b |
W(b)=1 |
|
IORLW B'00000000'
with bit b equals 1 |
M(b)=1 |
|
BSF M,b |
|
Jump |
Jump to a Label |
|
GOTO Label |
|
Call of the function Label |
|
CALL Label |
Returns of a function |
|
RETURN |
Returns of the result of a function |
W=a
RETURN |
RETLW a |
|
Conditionnal jump |
Note : To simplify the table, when
the condition is true, a jump is made ( GOTO ) but you can replace it
by a function call ( CALL ) or by a line of code and only one. |
if M(b) = 1 goto Label |
|
BTFSC M,b
GOTO Label |
|
if M(b) = 0 goto Label |
|
BTFSS M,b
GOTO Label |
|
M=M-1
if M <> 0 goto Label |
|
DECFSZ M,F
GOTO Label |
|
W=M-1
if W <> 0 goto Label |
|
DECFSZ M,W
GOTO Label |
M=M+1
if M <> 256 goto Label |
|
INCFSZ M,F
GOTO Label |
W=M+1
if M <> 256 goto Label |
|
INCFSZ M,W
GOTO Label |
|
Res represents the result of the last instruction. |
if Res = 0 goto Label |
|
BTFSC STATUS,Z
GOTO Label |
|
if Res <> 0 goto Label |
|
BTFSS STATUS,Z
GOTO Label |
|
After the SUBWF or SUBLW instruction,
you can test : |
if Res < 0 goto Label |
|
BTFSS STATUS,C
GOTO Label |
|
if Res >= 0 goto Label |
|
BTFSC STATUS,C
GOTO Label |
|
After the ADDWF or ADDLW instructions,
you can test : |
if Res > 255 goto Label |
|
BTFSC STATUS,C
GOTO Label |
|
if Res <= 255 goto Label |
|
BTFSS STATUS,C
GOTO Label |
|
Other frequent cases
( To jump when the condition is false : replace BTFSC by BTFSS
) |
if W = 0 goto Label |
W = W + 0
if Res = 0 goto Label |
ADDLW 0
BTFSC STATUS,Z
GOTO Label |
|
if M = 0 goto Label |
W=M
if Res = 0 goto Label |
MOVF M,W
BTFSC STATUS,Z
GOTO Label |
if W = a goto Label |
W = a - W
if Res = 0 goto Label |
SUBLW a
BTFSC STATUS,Z
GOTO Label |
if M = a goto Label |
W = a
W = M - W
if Res = 0 goto Label |
MOVLW a
SUBWF M,W
BTFSC STATUS,Z
GOTO Label |
if W = M goto Label |
W = M - W
if Res = 0 goto Label |
SUBWF M,W
BTFSC STATUS,Z
GOTO Label |
if M1 = M2 goto Label |
W = M2
W = M1 - W
if Res = 0 goto Label |
MOVF M2,W
SUBWF M1,W
BTFSC STATUS,Z
GOTO Label |
|
if M < 0 goto Label |
|
BTFSC M,7
GOTO Label |
|
if M >= 128 goto Label |
|
BTFSC M,7
GOTO Label |
if W <= a goto Label |
W = a - W
if Res >= 0 goto Label |
SUBLW a
BTFSC STATUS,C
GOTO Label |
if M >= a goto Label |
W = a
W = M - W
if Res >= 0 goto Label |
MOVLW a
SUBWF M,W
BTFSC STATUS,C
GOTO Label |
if W <= M goto Label |
W = M - W
if Res >= 0 goto Label |
SUBWF M,W
BTFSC STATUS,C
GOTO Label |
if M1 >= M2 goto Label |
W = M2
W = M1 - W
if Res >= 0 goto Label |
MOVF M2,W
SUBWF M1,W
BTFSC STATUS,C
GOTO Label |
|
Other functions |
Right rotation with carry |
|
RLF M,W
or RLF M,F |
|
Left rotation with carry |
|
RRF M,W
or RRF M,F |
No opération |
|
NOP |
Permutation |
|
SWAPF M,W
or SWAPF M,F |
Clear Watchdog |
|
CLRWDT |
Sleep mode |
|
SLEEP |
|
|