Aller au contenu

Utiliser les PIC 16F et 18F/Annexe/Les instructions du 18FXXX

Leçons de niveau 15
Une page de Wikiversité, la communauté pédagogique libre.
Les instructions du 18FXXX
Image logo représentative de la faculté
Annexe 2
Leçon : Utiliser les PIC 16F et 18F

Annexe de niveau 15.

Précédent :Les instructions du 16FXXX
Suivant :Sommaire
En raison de limitations techniques, la typographie souhaitable du titre, « Annexe : Les instructions du 18FXXX
Utiliser les PIC 16F et 18F/Annexe/Les instructions du 18FXXX
 », n'a pu être restituée correctement ci-dessus.




Opérandes :

  • f : register file address (adresse mémoire + registres) de 00 à 7F
  • W : registre de travail
  • d : sélection de destination : d=0 vers W, d=1 vers f
  • a : a=0 Access RAM sélectionnée sans tenir compte de BSR, a=1 BSR est utilisé (banked)
  • bbb : adresse de bit dans un registre 8 bits (sur 3 bits)
  • k : champ littéral (8, 12 ou 20 bits)
  • s : sélection du mode rapide : s=0 pas de restauration des registres W, STATUS et BSR
  • PC compteur programme
  • TO Time Out bit
  • PD Power Down bit

Opérations orientées octets entre registre et mémoire

[modifier | modifier le wikicode]
Opérations orientées octets entre registre et mémoire (File en anglais)
Mnémonique

Opérande

Description Cycles 16 bits Opcode status affected notes
ADDWF f[,d[,a]] Additionne W et f 1 0010 01da ffff ffff N,OV,C,DC,Z 1,2
ADDWFC f[,d[,a]] Additionne W et f et retenue 0010 00da ffff ffff N,OV,C,DC,Z 1,2
ANDWF f[,d[,a]] ET bit à bit W et f 1 0001 01da ffff ffff N,Z 1,2
CLRF f[,a] mise à 0 de f 1 0110 101a ffff ffff Z 2
COMF f,[d[,a]] Complément de f 1 0001 11da ffff ffff N,Z 1,2
CPFSEQ f[,a] compare f avec W, saute si = 1,(2 ou3) 0110 001a ffff ffff 4
CPFSGT f[,a] compare f avec W, saute si > 1, (2 ou3) 0110 010a ffff ffff 4
CPFSLT f[,a] compare f avec W, saute si < 1, (2 ou3) 0110 000a ffff ffff 1,2
DECF f[,d[,a]] Décrémente f 1 0000 01da ffff ffff C,DC,N,OV,Z 1,2,3,4
DECFSZ f[,d[,a]] Décrémente f (saute si 0) 1,(2) 0010 11da ffff ffff 1,2,3,4
DECFSNZ f[,d[,a]] Décrémente f (saute si non 0) 1,(2) 0100 11da ffff ffff 1,2,3,4
INCF f[,d[,a]] Incrémente f 1 0010 10da ffff ffff C,DC,N,OV,Z 1,2,3,4
INCFSZ f[,d[,a]] Incrémente f (saute si 0) 1,(2 ou 3) 0011 11da ffff ffff 1,2,3
INFSNZ f[,d[,a]] Incrémente f (saute si non 0) 1,(2 ou 3) 0100 10da ffff ffff 1,2,3
IORWF f[,d[,a]] Ou inclusif de f 1 0001 00da ffff ffff Z,N 1,2
MOVF f[,d[,a]] déplacement de f (adressage direct) 1 1001 00da ffff ffff Z,N 1,2
MOVFF fs,fd déplacement de fs (source) en fd (destination) 2 1100 ffff ffff ffff (s)

1111 ffff ffff ffff (d)

MOVWF f[,a] déplacement de W vers f 1 0110 111a ffff ffff
MULWF f[,a] multiplication de W par f 1 0000 001a ffff ffff
NEGF f[,a] négation de f 1 0110 110a ffff ffff C,DC,N,OV,Z 1,2
RLCF f[,d[,a]] Rotation gauche avec la retenue 1 0011 01da ffff ffff C,Z,N
RLNCF f[,d[,a]] Rotation gauche sans la retenue 1 0100 01da ffff ffff Z,N 1,2
RRCF f[,d[,a]] Rotation droite avec la retenue 1 0011 00da ffff ffff C,Z,N
RRNCF f[,d[,a]] Rotation droite avec la retenue 1 0100 00da ffff ffff Z,N 1,2
SETF f[,a] positionne f à 0xFF (tout le monde à 1) 1 0110 100a ffff ffff
SUBFWB f[,d[,a]] soustrait f de W 1 0101 01da ffff ffff C,DC,N,OV,Z 1,2
SUBWF f[,d[,a]] soustrait W de f 1 0101 11da ffff ffff C,DC,N,OV,Z 1,2
SUBWFB f[,d[,a]] soustrait W de f avec retenue 1 0101 10da ffff ffff C,DC,N,OV,Z
SWAPW f[,d[,a]] inverser les quartets dans f 1 0011 10da ffff ffff 4
TSTFSZ f[,a] teste f saute si 0 1 0110 011a ffff ffff 1,2
XORWF f[,d[,a]] Ou exclusif de f 1 0001 010da ffff ffff Z

Opérations orientées bits sur les registres

[modifier | modifier le wikicode]
Opérations orientées bits sur les registres
Mnémonique

Opérande

Description Cycles 16 bits Opcode status affected notes
BCF f,b[,a] mise à 0 du bit b dans f 1 1001 bbba ffff ffff 1,2
BSF f,b[,a] mise à 1 du bit b dans f 1 1000 bbba ffff ffff 1,2
BTFSC f,b[,a] test du bit b 0 de f saute si 0 1,(2) 1011 bbba ffff ffff 3,4
BTFSS f,b[,a] test du bit b 0 de f saute si 1 1,(2) 1010 bbba ffff ffff 3,4
BTG f,b[,a] inverser le bit du registre 1 0111 bbba ffff ffff 1,2

Opérations de contrôles

[modifier | modifier le wikicode]
Opérations de contrôles
Mnémonique

Opérande

Description Cycles 16 bits Opcode status affected notes
BC n saut relatif court si retenue est positionnée 1,(2) 1110 0010 nnnn nnnn
BN n brancher si résultat négatif 1,(2) 1110 0110 nnnn nnnn
BNC n brancher si retenue non positionnée 1,(2) 1110 0011 nnnn nnnn
BNN n brancher si résultat non négatif 1,(2) 1110 0111 nnnn nnnn
BNOV n brancher si pas dépassement (overflow) 1,(2) 1110 0101 nnnn nnnn
BOV n brancher si dépassement (overflow) 1,(2) 1110 0100 nnnn nnnn
BNZ n brancher si résultat non nul 1,(2) 1110 0001 nnnn nnnn
BZ n brancher si résultat nul 1,(2) 1110 0000 nnnn nnnn
BRA n brancher toujours 1,(2) 1101 0nnn nnnn nnnn
CALL n [,s] appel du sous programme n (sur 20 bits) (s fast bit) 2 1110 110s kkkk kkkk

1111 kkkk kkkk kkkk

CLRWDT - mise à 0 du timer watchdog 1 0000 0000 0000 0100 /TO,/PD
DAW ajustement décimal dans W 1 0000 0000 0000 0111
GOTO n aller à l'adresse n (sur 20 bits) 2 1110 1111 kkkk kkkk

1111 kkkk kkkk kkkk

NOP - pas d'opération 1 0000 0000 0000 0000
NOP - pas d'opération 1 1111 xxxx xxxx xxxx 4
POP dépile le sommet de la pile dans PC 1 0000 0000 0000 0110
PUSH empile PC sur le sommet de la pile 1 0000 0000 0000 0101
RCALL n appel en relatif 2 1101 1nnn nnnn nnnn
RESET reset en programmation 1 0000 0000 1111 1111
RETFIE s Retour d'interruption 2 0000 0000 0001 000s
RETLW k retour avec le littéral dans W 2 000 1100 kkkk kkkk
RETURN s retour de sous-programme 2 0000 0000 0001 001s
SLEEP aller au mode standby 1 0000 0000 0000 0011 /TO,/PD

Opérations littérales (adressage immédiat)

[modifier | modifier le wikicode]
Opérations littérales (adressage immédiat)
Mnémonique

Opérande

Description Cycles 16 bits Opcode status affected notes
ADDLW k Addition de W et k 1 0000 1111 kkkk kkkk N,OV,C,DC,Z
ANDLW k Et logique de W et k 1 0000 1011 kkkk kkkk N,Z
IORLW k OU inclusif logique de W et k 0000 1001 kkkk kkkk N,Z
LFSR f,k chargement de l'adresse 12 bits dans FSR (ff numéro de registre FSR concerné) 2 1110 1110 00ff kkkk

1111 kkkk kkkk kkkk

MOVLB k copier la valeur dans BSR 1 0000 0001 0000 kkkk
MOVLW k chargement du littéral dans W 1 0000 1110 kkkk kkkk
MULLW k multiplication du littéral par W 1 0000 1101 kkkk kkkk
RETLW k retour avec littéral dans W 2 0000 1100 kkkk kkkk
SUBLW k soustraction de W du littéral 1 0000 1000 kkkk kkkk N,OV,C,DC,Z
XORLW k ou exclusif du littéral avec W 1 0000 1010 kkkk kkkk N,Z

Opérations de programmation de la mémoire

[modifier | modifier le wikicode]
Opérations de programmation de la mémoire
Mnémonique

Opérande

Description Cycles 16 bits Opcode status affected notes
TBLRD* lecture octet Flash pointé par TBLPTR et le copie dans TABLAT 2 0000 0000 0000 1000
TBLRD*+ ... avec post increment 2 0000 0000 0000 1001
TBLRD*- ... avec post decrement 2 0000 0000 0000 1010
TBLRD+* ... avec pre increment 2 0000 0000 0000 1011
TBLWT* écriture octet Flash pointé par TBLPTR avec ce qu’il y a dans TABLAT 2 0000 0000 0000 1100
TBLWT*+ ... avec post increment 2 0000 0000 0000 1101
TBLWT*- ... avec post decrement 2 0000 0000 0000 1110
TBLWT+* ... avec pre increment 2 0000 0000 0000 1111


À traduire

Note 1: When an I/O register is modified as a function of itself ( e.g., MOVF PORTB, 1), the value used will be that value present on the pins themselves. For example, if the data latch is ’1’ for a pin configured as input and is driven low by an external device, the data will be written back with a ’0’.

    2: If this instruction is executed on the TMR0 register (and, where applicable, d = 1), the prescaler will be cleared if assigned to the Timer0 Module. 
    3: If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is executed as a NOP.