Programació en pic-as del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Joc d'instruccions del PIC 16F690

A continuació tenim un resum breu de les instruccions i la seva finalitat. Per a informació completa, heu de consultar l'apartat 15 del document de característiques del PIC 16F690.

En les instruccions on s'indiqui VAR vol dir que cal entrar-hi una adreça de la memòria de dades (o una variable) mentre que a les que s'indiqui VAL cal entrar-hi un valor i a les que s'indiqui ADR cal posar-hi una adreça de la memòria de programa (o una etiqueta). A les instruccions sobre bits cal, a més, indicar quin és el bit afectat. Moltes de les instruccions tenen dos formats, segons si el resultat es guarda a la variable o a l'acumulador. Aquí s'ha preferit posar-les dos cops per clarificar el seu us. A cada instrucció s'indica també la seva descripció en anglès ja que ajuda a recordar-les.

En principi, després de cada instrucció que no sigui de salt es fa la instrucció següent. En aquells casos en els que s'indica salta es fa la instrucció següent (+1) si no es compleix la condició especificada i se salta la instrucció (+2) si es compleix la condició. A la columna Status s'indiquen els bits d'estat (C, Z o DC) que són modificats per la instrucció.

Les diferents tipologies d'instruccions disponibles són:

Operacions lògiques sobre variables

Instrucció Descripció Status
andwf     VAR,f AND W with f
Fa la funció and (i) entre la variable i l'acumulador i guarda el resultat a la variable
Z
andwf     VAR,w AND W with f
Fa la funció and (i) entre la variable i l'acumulador i guarda el resultat a l'acumulador
Z
iorwf     VAR,f Inclusive OR W with f
Fa la funció ior (o inclusiva) entre la variable i l'acumulador i guarda el resultat a la variable
Z
iorwf     VAR,w Inclusive OR W with f
Fa la funció ior (o inclusiva) entre la variable i l'acumulador i guarda el resultat a l'acumulador
Z
xorwf     VAR,f Exclusive OR W with f
Fa la funció xor (o exclusiva) entre la variable i l'acumulador i guarda el resultat a la variable
Z
xorwf     VAR,w Exclusive OR W with f
Fa la funció xor (o exclusiva) entre la variable i l'acumulador i guarda el resultat a l'acumulador
Z
comf     VAR,f Complement f
Fa el complement (intercanvia zeros i uns) de la variable i guarda el resultat a la variable
Z
comf     VAR,w Complement f
Fa el complement (intercanvia zeros i uns) de la variable i guarda el resultat a l'acumulador
Z

Operacions matemàtiques sobre variables

Instrucció Descripció Status
clrf     VAR Clear f
Esborra (posa a zero) la variable
Z
clrw Clear W
Esborra (posa a zero) l'acumulador
Z
decf     VAR,f Decrement f
Decrementa la variable (li resta 1) i guarda el resultat a la variable
Z
decf     VAR,w Decrement f
Decrementa la variable (li resta 1) i guarda el resultat a l'acumulador
Z
incf     VAR,f Increment f
Incrementa la variable (li suma 1) i guarda el resultat a la variable
Z
incf     VAR,w Increment f
Incrementa la variable (li suma 1) i guarda el resultat a l'acumulador
Z
decfsz     VAR,f Decrement f, Skip if 0
Decrementa la variable (li resta 1) i guarda el resultat a la variable;
si el resultat és zero salta
decfsz     VAR,w Decrement f, Skip if 0
Decrementa la variable (li resta 1) i guarda el resultat a l'acumulador;
si el resultat és zero salta
incfsz     VAR,f Increment f, Skip if 0
Incrementa la variable (li suma 1) i guarda el resultat a la variable;
si el resultat és zero salta (si s'ha incrementat un FFh)
incfsz     VAR,w Increment f, Skip if 0
Incrementa la variable (li suma 1) i guarda el resultat a l'acumulador;
si el resultat és zero salta (si s'ha incrementat un FFh)
addwf     VAR,f Add W and f
Suma la variable amb l'acumulador i guarda el resultat a la variable
C   DC   Z
addwf     VAR,w Add W and f
Suma la variable amb l'acumulador i guarda el resultat a l'acumulador
C   DC   Z
subwf     VAR,f Subtract W from f             VAR = VAR - W
Resta l'acumulador de la variable i guarda el resultat a la variable
C   DC   Z
subwf     VAR,w Subtract W from f             W = VAR - W
Resta l'acumulador de la variable i guarda el resultat a l'acumulador
C   DC   Z

Instruccions de moviment sobre variables

Instrucció Descripció Status
movf     VAR,f Move f
Copia el valor de la variable a la variable (serveix per veure si és zero)
Z
movf     VAR,w Move f
Copia el valor de la variable a l'acumulador
Z
movwf     VAR Move W to f
Copia el valor de l'acumulador a la variable
rlf     VAR,f Rotate Left f through Carry
Desplaça un lloc cap a l'esquerra els bits de la variable i guarda el resultat a la variable
(equival a multiplicar per 2). Vegeu l'Exemple RL.
El valor que hi ha prèviament a C entra per la dreta i el bit de l'esquerra va a parar a C.
C
rlf     VAR,w Rotate Left f through Carry
Desplaça un lloc cap a l'esquerra els bits de la variable i guarda el resultat a l'acumulador
(equival a multiplicar per 2). Vegeu l'Exemple RL.
El valor que hi ha prèviament a C entra per la dreta i el bit de l'esquerra va a parar a C.
C
rrf     VAR,f Rotate Right f through Carry
Desplaça un lloc cap a la dreta els bits de la variable i guarda el resultat a la variable
(equival a dividir per 2). Vegeu l'Exemple RL.
El valor que hi ha prèviament a C entra per l'esquerra i el bit de la dreta va a parar a C.
C
rrf     VAR,w Rotate Right f through Carry
Desplaça un lloc cap a la dreta els bits de la variable i guarda el resultat a l'acumulador
(equival a dividir per 2). Vegeu l'Exemple RL.
El valor que hi ha prèviament a C entra per l'esquerra i el bit de la dreta va a parar a C.
C
swapf     VAR,f Swap nibbles in f
Permuta els nibbles de la variable i guarda el resultat a la variable
swapf     VAR,w Swap nibbles in f
Permuta els nibbles de la variable i guarda el resultat a l'acumulador

Instruccions sobre bits

Instrucció Descripció Status
bcf     VAR,bit Bit Clear f
Posa a 0 el bit indicat de la variable
bsf     VAR,bit Bit Set f
Posa a 1 el bit indicat de la variable
btfsc     VAR,bit Bit Test f, Skip if Clear
Mira si està activat el bit indicat de la variable; si està desactivat salta
btfss     VAR,bit Bit Test f, Skip if Set
Mira si està activat el bit indicat de la variable; si està activat salta

Operacions lògiques sobre valors

Instrucció Descripció Status
andlw     VAL AND literal with W
Fa la funció and (i) entre l'acumulador i el valor indicat i guarda el resultat a l'acumulador
Z
iorlw     VAL Inclusive OR literal with W
Fa la funció ior (o inclusiva) entre l'acumulador i el valor indicat i guarda el resultat a l'acumulador
Z
xorlw     VAL Exclusive OR literal with W
Fa la funció xor (o exclusiva) entre l'acumulador i el valor indicat i guarda el resultat a l'acumulador
Z

Operacions matemàtiques sobre valors

Instrucció Descripció Status
addlw     VAL Add literal and W
Suma l'acumulador amb el valor indicat i guarda el resultat a l'acumulador
C   DC   Z
sublw     VAR,w Subtract W from literal             L = L - W
Resta l'acumulador del valor indicat i guarda el resultat a l'acumulador
C   DC   Z

Instruccions de moviment sobre valors

Instrucció Descripció Status
movlw     VAL Move literal to W
Guarda a l'acumulador el valor indicat
Z

Important: La instrucció movlw posa a l'acumulador el valor que hi posem al costat; no el valor d'una variable; si li posem una etiqueta o una variable ens agafarà l'adreça que correspon a l'etiqueta o l'adreça de la posició de memòria on es guarda la variable. En les tres línies de l'exemple següent tenim tres casos diferents. En el primer posem a l'acumulador el valor 47 (decimal), en el segon hi copiem els vuit bits de menys pes de l'adreça (no el valor) de la variable Comptador i en el tercer hi posem els vuit bits de menys pes de l'adreça de la memòria de programa que correspon a l'etiqueta Bucle.

  movlw  47  ; W valdrà 47 (decimal)
  movlw  Comptador  ; Posem l'adreça de la variable Comptador a W
  movlw  Bucle  ; Posem l'adreça de Bucle (memòria de programa) a W

Si volem posar a l'acumulador el valor de la variable Comptador ho hem de fer així:

  movf Comptador,w  ; Posem el valor de la variable Comptador a W

Instruccions de salt

Instrucció Descripció Status
goto     ADR Go to address
Salta a l'adreça de la memòria de programque s'indica
call     ADR Call Subroutine
Crida a una funció que comença a l'adreça de la memòria de programque s'indica
(l'adreça de la instrucció següent a l'actual es guarda a la pila)
return Return from Subroutine
Retorna des d'una funció (va a l'adreça de la memòria de programa indicada a la pila)
retlw     VAL Return with literal in W
Guarda a l'acumulador el valor indicat i retorna des d'una funció
(va a l'adreça de la memòria de programa indicada a la pila)
retfie Return from interrupt
Retorna des d'una interrupció (va a l'adreça de la memòria de programa indicada a la pila)

Important: No es poden emprar indistintament les instruccions goto i call. La instrucció call és només per a saltar a una funció, de la qual sempre s'ha de retornar amb un return. En canvi, la instrucció goto és per a salts interns a la mateixa part del programa (ja sigui el programa principal, una funció o una funció d'interrupció).

Altres instruccions

Instrucció Descripció Status
nop No Operation
No fa res i perd un cicle de programa (1 μs en la configuració bàsica)
clrwdt Clear Watchdog Timer
Posa a zero el temporitzador del Watchdog
sleep Go into Standby mode
Posa el processador en mode d'espera

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.