Utiliser les PIC 16F et 18F/Annexe/Les instructions du 18FXXX
Apparence
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 |
Notes
[modifier | modifier le wikicode]À 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.