Traduction/Translation << The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
Free - La liberté n a pas de prix
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte

Introduction
Cette fiche sur la programmation du pic 16f84 devrait vous permettre de mieux le programmer, sans trop vous fatiguer. Elle reprend les combinaisons les plus courantes pour les traduire en une ou plusieurs instructions du pic.
Pour cela j'use d'annotations inspirées de langages plus évolués :
  • W : l'accumulateur du PIC.
  • a : une constante.
  • M,M1,M2 : des adresses en RAM.

Attention : Pour certaines fonctions, je modifie la valeur de l'accumulateur W.

Je vous conseille aussi d'allez voir le générateur de script asm : ici

Si des points vous semblent obscurs, s'il vous manque des combinaisons ou si, pire encore, vous trouvez des erreurs malgré toutes nos vérifications, je vous demande de nous prévenir soit par mail, soit sur le forum. Je vous en remercie par avance :-)

 

Le Pic 16f84
Affectation
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
     
Soustraction
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
     
Opération Logique OU ( OR )
W=W OU a   IORLW a

Table de vérité fonction OU:

E1

E2

 

S

0

0

 

0

0

1

 

1

1

0

 

1

1

1

 

1

Permet en autre de passer des bits à 1.
si E2=1 alors S toujours à 1
si E2=0 alors S inchangé.

M=W OU a W=W OU a
M=W
IORLW a
MOVWF M
W=M OU a W=M
W=W OU a
MOVF M,W
IORLW a
M=M OU a W=a
M=M OU W
MOVLW a
IORWF M,F
W=W OU M   IORWF M,W
M=W OU M   IORWF M,F
W=M1 OU M2 W=M2
W=W OU M1
MOVF M2,W
IORWF M1,W
M1=M1 OU M2 W=M2
M1=W OU M1
MOVF M2,W
IORWF M1,F
     
Opération Logique ET ( AND )
W=W ET a   ANDLW a

Table de vérité fonction ET:

E1

E2

 

S

0

0

 

0

0

1

 

0

1

0

 

0

1

1

 

1

Permet en autre de passer des bits à 0.
si E2=0 alors S toujours à 0
si E2=1 alors S inchangé.

M=W ET a W=W ET a
M=W
ANDLW a
MOVWF M
W=M ET a W=M
W=W ET a
MOVF M,W
ANDLW a
M=M ET a W=a
M=M ET W
MOVLW a
ANDWF M,F
W=W ET M   ANDWF M,W
M=W ET M   ANDWF M,F
W=M1 ET M2 W=M2
W=W ET M1
MOVF M2,W
ANDWF M1,W
M1=M1 ET M2 W=M2
M1=W ET M1
MOVF M2,W
ANDWF M1,F
     
Opération Logique OU-Exclusif ( XOR )
W=W XOR a   XORLW a

Table de vérité fonction XOR:

E1

E2

 

S

0

0

 

0

0

1

 

1

1

0

 

1

1

1

 

0

Permet en autre de permuter des bits.
si E2=1 alors S=NOT S
si E2=0 alors S inchangé.

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
     
Opération Logique NON (NOT )
W=NOT W   XORLW 0xFF

Table de vérité fonction NOT:

E

 

S

0

 

1

1

 

0

Permet de permuter tous les 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
     
Affectation de bits avec b le numéro du bit de 0 à 7
W(b)=0   ANDLW B'11111111'
avec le bit b à 0
Si vous avez plusieurs bits à modifier, il est préférable d'utiliser la fonction OU ou ET.
M(b)=0   BCF M,b
W(b)=1   IORLW B'00000000'
avec le bit b à 1
M(b)=1   BSF M,b
 
Saut
Saut vers Label   GOTO Label  
Appel de la fonction Label   CALL Label
Retour d'une fonction   RETURN
Retour d'une fonction avec résultat W=a
RETURN
RETLW a
 
Saut conditionnel
Remarque : Pour simplifier le tableau, lorsque la condition est vraie, on exécute un saut ( GOTO ) mais vous pouvez le remplacer par un appel à une fonction ( CALL ) ou par une ligne de code et une seule.
si M(b) = 1 goto Label   BTFSC M,b
GOTO Label
 
si M(b) = 0 goto Label   BTFSS M,b
GOTO Label
 
M=M-1
si M <> 0 goto Label
  DECFSZ M,F
GOTO Label
 
W=M-1
si W <> 0 goto Label
  DECFSZ M,W
GOTO Label
M=M+1
si M <> 256 goto Label
  INCFSZ M,F
GOTO Label
W=M+1
si M <> 256 goto Label
  INCFSZ M,W
GOTO Label
 
Res représente le résultat de la dernière instruction.
si Res = 0 goto Label   BTFSC STATUS,Z
GOTO Label
 
si Res <> 0 goto Label   BTFSS STATUS,Z
GOTO Label
 
Après les instructions SUBWF ou SUBLW, vous pouvez tester :
si Res < 0 goto Label   BTFSS STATUS,C
GOTO Label
 
si Res >= 0 goto Label   BTFSC STATUS,C
GOTO Label
 
Après les instructions ADDWF ou ADDLW, vous pouvez tester :
si Res > 255 goto Label   BTFSC STATUS,C
GOTO Label
 
si Res <= 255 goto Label   BTFSS STATUS,C
GOTO Label
 
Autres cas courants ( Pour faire le saut lorsque la condition est fausse : remplacer BTFSC par BTFSS )
si W = 0 goto Label W = W + 0
si Res = 0 goto Label
ADDLW 0
BTFSC STATUS,Z
GOTO Label
 
si M = 0 goto Label W=M
si Res = 0 goto Label
MOVF M,W
BTFSC STATUS,Z
GOTO Label
si W = a goto Label W = a - W
si Res = 0 goto Label
SUBLW a
BTFSC STATUS,Z
GOTO Label
si M = a goto Label W = a
W = M - W
si Res = 0 goto Label
MOVLW a
SUBWF M,W
BTFSC STATUS,Z
GOTO Label
si W = M goto Label W = M - W
si Res = 0 goto Label
SUBWF M,W
BTFSC STATUS,Z
GOTO Label
si M1 = M2 goto Label W = M2
W = M1 - W
si Res = 0 goto Label
MOVF M2,W
SUBWF M1,W
BTFSC STATUS,Z
GOTO Label
 
si M < 0 goto Label   BTFSC M,7
GOTO Label
 
si M >= 128 goto Label   BTFSC M,7
GOTO Label
si W <= a goto Label W = a - W
si Res >= 0 goto Label
SUBLW a
BTFSC STATUS,C
GOTO Label
si M >= a goto Label W = a
W = M - W
si Res >= 0 goto Label
MOVLW a
SUBWF M,W
BTFSC STATUS,C
GOTO Label
si W <= M goto Label W = M - W
si Res >= 0 goto Label
SUBWF M,W
BTFSC STATUS,C
GOTO Label
si M1 >= M2 goto Label W = M2
W = M1 - W
si Res >= 0 goto Label
MOVF M2,W
SUBWF M1,W
BTFSC STATUS,C
GOTO Label
 
Autres fonctions
Rotation droite avec retenue   RLF M,W
ou RLF M,F
 
Rotation gauche avec retenue   RRF M,W
ou RRF M,F
Pas d'action   NOP
Permutation   SWAPF M,W
ou SWAPF M,F
Clear Watchdog   CLRWDT
Mode sleep   SLEEP
 

 


Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/picnul/PicFicheAide.html modifiée le 13/09/2004.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail