lab.270910.instrucciones basicas del pic 16 f84a

27
INSTRUCCIONES BASICAS DEL PIC 16F84A Luis Mendizabal

Upload: lmendi

Post on 24-Jul-2015

1.080 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES BASICAS DEL PIC 16F84A

Luis Mendizabal

Page 2: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES BASICAS DEL PIC 16F84A

Las características y capacidad de un procesador están definidas por el conjunto de instrucciones que esta pone a disposición del programador. Por tal razón, es fundamental conocer el conjunto de instrucciones del microcontrolador que estamos utilizando en la presente asignatura.Si bien es cierto que se puede escribir programas para el PIC 16F84A utilizando lenguajes de alto nivel como el C o el Basic, que permitirían tiempos de desarrollo más rápidos; en la asignatura, orientada al estudio de los microprocesadores y su arquitectura, estudiaremos y utilizaremos el lenguaje ensamblador del PIC 16F84A.El PIC 16F84A comprende un conjunto de 35 instrucciones. Un número pequeño comparado con las más de 300 instrucciones que tiene un microprocesador como el Pentium IV de Intel

Page 3: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES BASICAS DEL PIC 16F84A

• Clasificaremos, para su estudio, las instrucciones del microcontrolador 16F84A como instrucciones básicas e instrucciones avanzadas.

Page 4: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES BASICAS

• Dentro de estas incluimos las instrucciones aritméticas, de movimiento, lógicas, de complemento, de puesta en cero, de intercambio y de rotación

Page 5: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE COPIA (MOVIMIENTO)

MOVLW Move Literal to W – Mover literal a WSintaxis movlw kOperandos 0 k 255Operación K => WIndicadores NingunoMueve los 8 bits del literal 'k' al registro de

trabajo 'W'.

Page 6: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE COPIA (MOVIMIENTO)

MOVWF Move W to f – Mover W a FSintaxis movwf f , dOperandos 0 f 127 , d E {0,1}Operación W => fIndicadores NingunoMueve el contenido del registro de trabajo 'W' al

registro 'f'.

Page 7: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE COPIA (MOVIMIENTO)

MOVF Move f – Mover FSintaxis movf f,d Operandos 0 f 127, d Î [0,1] Operación W => d Indicadores ZMueve el contenido del registro 'f' al registro destino

indicado con 'd'. Si 'd=0' el destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'. El indicador 'Z' del registro 'STATUS' queda afectado: 'Z=1' si el contenido movido es CERO.

Page 8: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE SUMA

ADDLW Add Literal to W – Sumar literal a WSintaxis addlw kOperandos 0 k 255 Operación k + W => W Indicadores C, DC, ZSuma los 8 bits del literal 'k' con el registro de

trabajo 'W' y el resultado lo almacena en el registro de trabajo 'W'.

Page 9: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE SUMA

ADDWF Add W and f – Sumar W y FSintaxis addwf f,d Operandos 0 f 127, d E [0,1] Operación f + W => d Indicadores C, DC, ZSuma el contenido del registro 'f' al contenido del

registro de trabajo 'W' y el resultado se almacena en el destino 'd'. Si 'd=0' el destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'.

Page 10: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE SUSTRACCIÓN

SUBLW Subtract W from Literal – Restar W de literal

Sintaxis sublw kOperandos 0 k 255 Operación k - W => W Indicadores C, DC, ZResta de los 8 bits del literal 'k' el contenido del

registro de trabajo 'W' y el resultado lo almacena en el registro de trabajo 'W'.

Page 11: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE SUSTRACCIÓN

SUBWF Subtract W from f – Restar W de FSintaxis subwf f,d Operandos 0 f 127, d E [0,1] Operación f - W => d Indicadores C, DC, ZResta del contenido del registro 'f' el contenido del

registro de trabajo 'W' y el resultado se almacena en el destino 'd'. Si 'd=0' el destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'.

Page 12: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE PUESTA EN CERO

CLRW Clear W – Limpiar WSintaxis clrwOperandos ningunoOperación 0 => WIndicadores ZCarga cero al registro de trabajo 'W' y se

establece el indicador cero, 'Z=1'.

Page 13: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE PUESTA EN CERO

CLRF Clear f – Limpiar FSintaxis clrf fOperandos 0 f 127 Operación 0 => f Indicadores ZCarga cero al registro 'f' y se establece el

indicador cero, 'Z=1'.

Page 14: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE INCREMENTO Y DECREMENTO

DECF Decrement f – Decrementar FSintaxis decf f,d Operandos 0 f 127, d ÎE[0,1] Operación f - 1 => d Indicadores ZDecrementa el contenido del registro 'f'. Si 'd=0' el

destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'. Si el resultado del incremento es cero, se establece el indicador cero, 'Z=1'.

Page 15: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE INCREMENTO Y DECREMENTO

INCF Increment f – Incrementar FSintaxis incf f,d Operandos 0 f 127, d E [0,1] Operación f + 1 => d Indicadores ZIncrementa el contenido del registro 'f'. Si 'd=0' el

destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'. Si el resultado del decremento es cero, se establece el indicador cero, 'Z=1'.

Page 16: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN LÓGICA Y (AND)

ANDLW And Literal with W – And literal con WSintaxis andlw kOperandos 0 k 255 Operación k .AND. W => W Indicadores ZEfectúa la operación AND de los 8 bits del literal

'k' con el registro 'W' y almacena el resultado en 'W'. Actualiza el indicador 'Z'.

Page 17: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN LÓGICA Y (AND)

ANDWF And W with f – And W con FSintaxis andwf f,d Operandos 0 f 127, d E [0,1] Operación f .AND. W => d Indicadores ZEfectúa la operación AND del contenido del registro 'f'

con el registro 'W' y almacena el resultado en 'd'. Si 'd=0‘ el destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'. Actualiza el indicador 'Z'.

Page 18: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN LÓGICA O – INCLUSIVA (OR)

IORLW Inclusive OR Literal with W – Or literal con W

Sintaxis iorlw kOperandos 0 k 255 Operación k .OR. W => W Indicadores ZEfectúa la operación OR de los 8 bits del literal 'k'

con el registro 'W' y almacena el resultado en 'W'. Actualiza el indicador 'Z'.

Page 19: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN LÓGICA O – INCLUSIVA (OR)

IORWF Includive OR W with f – Or W con FSintaxis iorwf f,d Operandos 0 f 127, d E [0,1] Operación f .OR. W => d Indicadores ZEfectúa la operación OR del contenido del registro 'f' con

el registro 'W' y almacena el resultado en 'd'. Si 'd=0' el destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'. Actualiza el indicador 'Z'.

Page 20: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN LÓGICA O – EXCLUSIVA (XOR)

XORLW Exclusive OR Literal with W – Xor literal con W

Sintaxis xorlw kOperandos 0 k 255 Operación k .XOR. W => W Indicadores ZEfectúa la operación XOR de los 8 bits del literal 'k'

con el registro 'W' y almacena el resultado en 'W'. Actualiza el indicador 'Z'.

Page 21: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN LÓGICA O – EXCLUSIVA (XOR)

XORWF Exclusive OR W with f – Xor W con FSintaxis xorwf f,d Operandos 0 f 127, d E [0,1] Operación f .XOR. W => d Indicadores ZEfectúa la operación XOR del contenido del registro 'f'

con el registro 'W' y almacena el resultado en 'd'. Si 'd=0‘ el destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'. Actualiza el indicador 'Z'.

Page 22: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN DE COMPLEMENTO

COMF Complement f – complementar FSintaxis comf f,d Operandos 0 f 127, d E [0,1] Operación ~f => d Indicadores ZEfectúa el complemento bit a bit del contenido del

registro 'f' y almacena el resultado en 'd'. Si 'd=0' el destino es el registro de trabajo 'W'. Si 'd=1' el destino es el propio registro 'f'. Actualiza el indicador 'Z'.

Page 23: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIÓN DE INTERCAMBIO DE NIBBLES

SWAPF Swap Nibbles in f – Intercambiar nibbles en FSintaxis swapf f,dOperandos 0 f 127, d Î [0,1]Operación f[3:0]=>d[7:4],f[7:4]=>d[3:0] Indicadores ningunoEfectúa el intercambio del nibble menos significativo con el

nibble más significativo del registro 'f' y almacena elresultado en 'd'. Si 'd=0' el destino es el registro de trabajo 'W'.

Si 'd=1' el destino es el propio registro 'f'.Actualiza el indicador 'Z'.

Page 24: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE ROTACIÓN

RLF Rotate Left f through Carry – Rotar F a la izquierda a través del bit de Acarreo

Sintaxis rlf f,d Operandos 0 f 127, d E [0,1]Operación

Indicadores CRota un bit a la izquierda, el contenido del registro 'f' pasando por el

indicador de acarreo 'C' y almacena elresultado en 'd'. Si 'd=0' el destino es el registro de trabajo 'W'. Si

'd=1' el destino es el propio registro 'f'.Actualiza el indicador 'C'.

Page 25: Lab.270910.instrucciones basicas del pic 16 f84a

INSTRUCCIONES DE ROTACIÓN

RRF Rotate Right f through Carry - Rotar F a la derecha a través del bit de Acarreo

Sintaxis rrf f,d Operandos 0 f 127, d E[0,1]Operación CIndicadoresRota un bit a la derecha, el contenido del registro 'f' pasando

por el indicador de acarreo 'C' y almacena elresultado en 'd'. Si 'd=0' el destino es el registro de trabajo 'W'.

Si 'd=1' el destino es el propio registro 'f'.Actualiza el indicador 'C'.

Page 26: Lab.270910.instrucciones basicas del pic 16 f84a

DESARROLLO DE LA PRACTICA• Escriba un programa que calcule la diferencia de dos números de 8 bits, sin utilizar las instrucciones de

sustracción DESARROLLO DE LA PRACTICA• ;*******************************************************;• ; Nombre : Complemento ;• ; Proposito : calcula la diferencia entre dos variables ;• ; Autor : XXXXX;• ; FCreacion : 27/09/2010 ;• ; FModificacion : ------ ;• ;*******************************************************;• LIST P=16f84A ; Modelo de PIC utilizado• INCLUDE <P16f84A.INC> ; Contiene definiciones de elementos del PIC• ;********DATOS• num1 equ 0xA ; primer numero• num2 equ 0xB ; segundo numero• ;********CODIGO• ORG 0 ; Indica donde comienza el programa• Inicio• movlw .20 ; W <- 20• movwf num1 ; num1 <- 20• movlw .10 ; W <- 10• movwf num2 ; num2 <- 10• comf num2,0 ; W <- ~num2• addlw .1 ; W <- ~num2 + 1 = -num2• addwf num1,W ; W <- num1 + ~num2 + 1 = num1 - num2• movwf resul ; resul <- W• END

Page 27: Lab.270910.instrucciones basicas del pic 16 f84a

DESARROLLO DE LA PRACTICA• Escriba un programa que intercambie los valores almacenados en dos variables v1 v2, sin utilizar variables

auxiliares• ;*****************************************************************;• ; Nombre : Swap ;• ; Proposito : Intercambia dos variables, sin utilizar variables auxiliares ;• ; Autor : XXXXX XXXX;• ; FCreacion : 27/09/20010;• ; FModificacion : ------ ;• ;*****************************************************************;• LIST P=16f84A ; Modelo de PIC utilizado• INCLUDE <P16f84A.INC> ; Contiene definiciones de elementos del PIC• ;********DATOS• v1 equ 0xA ; primer numero• v2 equ 0xB ; segundo numero• ;********CODIGO• ORG 0 ; Indica donde comienza el programa• Inicio• movlw .7 ; W <- 10• movwf v1 ; num1 <- 10• movlw .5 ; W <- 15• movwf v2 ; num2 <- 15• xorwf v1, 1 ; v1 <- v1 .xor. v2• xorwf v1, 0 ; W <- v1 .xor. v2• xorwf v1, 1 ; v1 <- v1 .xor. v2• movwf v2 ; v2 <- W• END