Está en la página 1de 44

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria.

Elctrica y Electrnica

Ing. Marco Antonio Reyes Gonzlez Ingeniera Elctrica y Electrnica Instituto Tecnolgico de Toluca

El PIC16F84 es un microcontrolador, una especie de "ordenador en miniatura" (con muchas comillas) que podremos programar.

En su interior posee un microprocesador, una memoria RAM (volatil) donde guardaremos las variables, una memoria EEPROM (no volatil) donde guardaremos nuestro programa, un Timer o contador que nos facilitar algunas tareas, y algunas cosas mas.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Caractersticas representativas :
Operacin a una frecuencia mxima de 10 MHz 1Kbyte de memoria EEPROM para programa Memoria RAM de 68 bytes (de 8 bits) Memoria EEPROM para datos (no voltiles) de 64 bytes Cuenta con solo 35 instrucciones 13 pines de entrada/salida (un puerto de 8 bits + otro de 5 bits) Timer/contador de 8 bits

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Descripcin de sus pines

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Descripcin de sus pines


El microcontrolador tiene dos puertos denominados "A" y "B". El puerto "A" tiene 5 lineas disponibles (RA0, RA1, RA2, RA3, RA4 ) El puerto "B" tiene 8 lineas disponibles (RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7 ).
La terminal No. 3 perteneciente al puerto "A" = RA4 tambin tiene otra nomenclatura denominada "TOCKI" lo cual quiere decir que esta linea podr ser programada como entrada, salida y temporizador/contador. El microcontrolador trabaja con una tensin de 5 Vlts. DC y las terminales No. 14 (+) y No. 5 (-). Todo microprocesador o microcontrolador requiere de un circuito que le indique a que velocidad debe trabajar. Este circuito es conocido por todos como un oscilador de frecuencia. En el caso del microcontrolador PIC16F84a el Pin No. 15 y el Pin No. 16 son utilizados para generar la frecuencia de reloj.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

OSC1/CLKIN y OSC2/CLKOUT: son para el oscilador Los tipos de osciladores mas usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador) el modo de conexionado es el
siguiente:

Oscilador XT
C1=C2=33pF Crystal 4MHz

Oscilador RC
C1 alrededor de 20pF 5K R1 100K

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Reset manual
En el caso de que sea necesario se puede aplicar un reset manual a la patilla MCLR mediante un pulsador y una resistencia. La siguiente figura muestra una configuracin bsica para realizar un reset manual:

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

En primer lugar tenemos que distinguir claramente entre tres tipos de memoria: 1: la memoria EEPROM donde almacenaremos el programa que haremos, esta memoria solo podr ser leida por el pic (el pic va leyendo las instrucciones del programa almacenado en esta memoria y las va ejecutando). Al apagar el pic esta memoria no se borra.

2: la memoria RAM en cuyos registros se irn almacenando los valores de las variables que nosotros queramos y cuando nosotros queramos (por programa), al apagar el pic esta memoria se borra. 3: la memoria EEPROM para datos, es un espacio de memoria EEPROM en la que se pueden guardar variables que queremos conservar aunque se apague el pic. No se tratar aqu por ser una memoria mas difcil de emplear.
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Memoria EEPROM

Registros internos

Estos registros se usan para controlar los pines del pic, consultar los resultados de las operaciones de la ALU (unidad aritmtica lgica), cambiar de banco de memoria... entre otras cosas.

INDF (direccionamiento indirecto) TMR0 (Timer/contador) PCL (Parte baja del contador de programa) FSR (Puntero)
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Programacin del pic16f84 en ensamblador

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
Las instrucciones tienen algunas letras que van relacionadas y que tienen cierta interpretacin. Por ejemplo la letra "W" es el registro mas importante que tiene el microcontrolador y es denominado ACUMULADOR. En este registro todas las operaciones pasan a travs de el.
No. 1 Instruccin ADDWF f,d Descripcin Sumar W + f Observacin Esta instruccin suma el contenido de un registro especfico al contenido del registro de "W" donde "f" puede ser un registro cualquiera con un determinado valor.

Por ejemplo: Si el contenido de "W" antes de ejecutar la instruccin tena un valor de 20 y el registro "f" tiene un valor de 5, en el momento que se ejecuta la instruccin el resultado obtenido es 25. Ahora aprovechamos en esta primera instruccin de explicar el significado que tiene la letra "d" en la instruccin (ADDWF f,d). Una vez finalizada la instruccin, el resultado podr ser almacenado directamente en el acumulador "W" o en el registro "f" para ello se utiliza la letra "d" en el cual podr escribirse "0" o "1"; si la letra d=0el resultado de la operacin se ubicar en el registro "W"; por otro lado si d=1 el resultado de la operacin se ubicar en "f". Hagamos un ejemplo sencillo y supongamos que W=4 y f = 3 antes de ejecutar la instruccin: Si escribimos la instruccin de la siguiente manera: ADDWF f,0 significa que el contenido del registro "f=3" se sumar con el contenido del registro "W=4" y el resultado se alojar en el acumulador "W" tomando el valor de "W=7"; el registro "f" mantendr su valor "f=3". Ahora si la instruccin esta escrita as: ADDWF f,1 significa que el contenido del registro "f=3" se sumar con el contenido del registro "W=4" y el resultado se alojar en el registro "f" tomando el valor de "f=7"; el acumulador mantendr su valor "W=4". Esta explicacin de la letra "d" ser valida de igual manera para todas las instrucciones que contengan este parmetro. Otro punto importante esta referido a la letra "f" la cual puede ser cualquier nombre y no especficamente la letra "f"; por ejemplo ADDWF regist,1 donde regist es un registro de uso general de la memoria RAM. Ing. Marco Antonio Reyes Gonzlez, Depto. de
Ingria. Elctrica y Electrnica

Set de instrucciones
No. 2 Instruccin ANDWF f,d Descripcin Operacin lgica AND Observacin Esta instruccin realiza una operacin lgica "AND" entre el registro"W" y el registro "f". RESULTAD O Y = A.B 0 0 0 1 RESULTAD O W.f 0 0 0 0 0 0 0 0 RESULTADO W.f 0 0 1 0 0 0 0 1

El microcontrolador PIC16F84 puede realizar una operacin AND entre dos registros. Para explicar mejor la operacin AND, supongamos que tenemos un bit A y un bit B que deseamos comparar; entonces tenemos las siguientes alternativas combinaciones entre los dos bits:

ENTRADA A 0 0 1 1 B 0 1 0 1

Se puede observar claramente que solamente para la condicin de que A=1 Y B=1
tendremos 1 en el resultado; de all el nombre de la operacin AND donde dice: "Si A=1 y B=1 entonces la salida ser 1". Esta explicacin es vlida para cada uno de los Bits entre dos registros. Hagamos un ejemplo sencillo y supongamos que W= 00001111 y f = 11110000 antes de ejecutar la instruccin ANDWF f,d:

ENTRADA W 0 0 0 0 1 1 1 1 f 1 1 1 1 0 0 0 0

El microcontrolador procede a comparar cada uno de los ocho bits que conforman a W
y a f. Esta comparacin es realizada con cada bit perteneciente a su posicin; es decir, el bit No. 7 de"W" con el Bit No. 7 de "f" y as sucesivamente hasta llegar al Bit No 0. Se puede observar que en ninguno de los ocho Bits de los registros "W" y "f" se obtuvo la condicin de "1 Y 1" por lo que todos los bits resultantes fueron cero (0).

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

En nuestro segundo ejemplo tenemos que W = 01110011 y f = 00101001 antes de


ejecutar la instruccin ANDWF f,d tenemos:

Al igual que el caso anterior, el microcontrolador compara Bit a Bit el registro "W" y el
registro "f" y podemos observar que tan solo el Bit No. 5 y el Bit No. 0 cumplen con la condicin AND; los dems Bits dan como resultado cero.
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

ENTRADA W Bit 7 0 Bit 6 1 Bit 5 1 Bit 4 1 Bit 3 0 Bit 2 0 Bit 1 1 Bit 0 1

f 0 0 1 0 1 0 0 1

Set de instrucciones
No. Instruccin 3 ANDLW k Descripcin Observacin Operacin lgica AND entre un literal y W

Esta instruccin, al igual que la instruccin explicada anteriormente, ejecuta el mismo


procedimiento pero con ciertas diferencias. La instruccin ANDLW k significa que el microcontrolador realiza una operacin lgica AND entre el registro "W" y el contenido del literal "k", donde "k" es un literal que puede contener cualquier valor entre 0 y 255 asignado por el programador.

Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya que este es colocado
directamente en en registro "W" y no existir la posibilidad de colocarlo en el registro "k".

No. 3

Instruccin CLRF f

Descripcin

Observacin

Borra registro Esta instruccin borra un registro especifico.

El microcontrolador puede borrar un registro "f" cargndolo con el valor "00".


Supongamos que tenemos un registro denominado regist = 54 antes de ejecutar la instruccin. Despus de ejecutada la instruccin el valor de regist = 00.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No.
4

Instruccin
CLRW

Descripcin Observacin Borra el Esta instruccin borra el registro "W" solamente registro W

Cuando se ejecuta esta instruccin, el microcontrolador borra el registro "W" cargndolo


con "00".

No. 5

Instruccin COMP f,d

Descripcin Observacin Complementa Esta instruccin complementa el registro "f" el registro f

Desde el punto de vista de los nmeros binarios, supongamos que tenemos un


registro "f" denominado regist = 00111011; cuando es aplicada la instruccin tenemos que los 0 cambian a valores 1 y los valores 1 cambian a 0 obtenindose un registro invertido. El resultado ser 11000100..

No. Instruccin 6 DECF f,d

Descripcin Decrementa registro f

Observacin

un

Esta instruccin decrementa en una sola unidad el registro "f".

Esta instruccin le decrementa en una sola unidad el registro "f". Por ejemplo si
nuestro registro denominado regist = 5; cuando se aplica la instruccin DECF f,0 el resultado ser W=4. Por el contrario, si aplicamos la instruccin DECF f,1 el resultado ser regist = 4.
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin
7 DECFSZ f,d

Descripcin

Observacin Esta instruccin decrementa en una sola unidad el registro "f" Decrementa y si es en la cual si el registro "f" es igual a cero entonces salta a una igual a cero salta. instruccin

Esta instruccin esta estrechamente relacionada con las dos


siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo: La instruccin DECFSZ f,d funciona de la siguiente manera: Primero decrementa en una sola unidad el registro "f"; de all pueden suceder dos condiciones. Si el resultado es "0" se ejecuta la instruccin numero 3; pero si el resultado es diferente de cero, se ejecuta la instruccin numero 2
INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3 DECFSZ f,d IR A OTRA DIRECCIN SUMAR DOS NMEROS

No. Instruccin 8 INCF f,d

Descripcin Observacin Incrementa el registro "f" en una Esta instruccin incrementa en una sola unidad el registro "f". unidad

Supongamos que el registro " f = 45 "; cuando se le aplica el comando INCF f,0 se incrementa
en una unidad el numero 45 y el resultado es colocado en "W = 46 ". Si aplicamos el comando INCF f,1 se incrementa en una unidad el numero 45 y el resultado es colocado en el registro "f = 46"
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 9 INCFSZ f,d Descripcin Observacin Esta instruccin incrementa en una sola unidad el registro "f" incrementa y si es en la cual si el registro "f" es igual a cero entonces salta a una igual a cero salta. instruccin

Esta instruccin esta estrechamente relacionada con las dos


siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo: La instruccin INCFSZ f,d funciona de la siguiente manera: Primero incrementa en una sola unidad el registro "f"; de all pueden suceder dos condiciones. Si el resultado es "0" se ejecuta la instruccin nmero 3; pero si el resultado es diferente de cero, se ejecuta la instruccin nmero 2
INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3 INCFSZ f,d IR A OTRA DIRECCIN SUMAR DOS NMEROS

No. Instruccin 10 IORWF f,d

Descripcin Observacin Se aplica un OR Esta instruccin aplica una operacin lgica llamada OR Inclusivo INCLUSIVO entre dos registros.

El microcontrolador PIC16F84 puede realizar una operacin OR


INCLUSIVO entre dos registros.
ENTRADA
A 0 0 1 1 B 0 1 0 1

Para explicar mejor la operacin OR INCLUSIVO, supongamos que


tenemos un bit A y un bit B que deseamos comparar; entonces tenemos las siguientes alternativas combinaciones entre los dos bits:

RESULTAD O Y=A+B 0 1 1 1

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 27 IORLW k Descripcin Operacion IOR Observacin Operacin lgica entre el registro "W" y un literal "k"

Esta instruccin, al igual que la instruccin explicada anteriormente, ejecuta el mismo procedimiento
pero con ciertas diferencias. La instruccin IORLW k significa que el microcontrolador realiza una operacin lgica OR entre el registro "W" y el contenido del literal "k", donde "k" es un literal que puede contener cualquier valor entre 0 y 255 asignado por el programador. Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya que este es colocado directamente en en registro "W" y no existir la posibilidad de colocarlo en el registro "k".

No. Instruccin 11 MOVF f,d

Descripcin Mueve contenido registro "f"

Observacin el Esta instruccin mueve el contenido del registro "f" en el del mismo registro "f" o en "W".

Esta instruccin tiene la finalidad de mover el contenido del registro "f" en el mismo registro
"f" o hacia el registro "W". Por ejemplo si aplicamos el comando MOVF f,0 tan solo mueve el contenido del registro que se encuentra en "f" hacia el acumulador "W"; por otro lado si aplicamos el comando MOVF f,1 se mueve en contenido del registro "f" en el mismo registro "f". En este ltimo punto, usted podra preguntarse para qu se necesita mover el contenido de un registro y volverlo a colocar dentro del mismo registro? La respuesta estriba en que cuando se ejecuta esta instruccin cambia una bandera dentro de la arquitectura del microcontrolador. Estas banderas sern explicadas posteriormente.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 12 NOP Descripcin No opera Observacin Esta instruccin no ejecuta ningn tipo de accin.

La instruccin NOP no ejecuta ninguna tarea especfica, pero consume 4 ciclos de reloj completos.
Cierta utilidad que le hemos encontrado a esta instruccin especficamente esta referida a las rutinas de tiempo. Algunas veces hemos creado algunas rutinas de tiempo que requieren exactitud en la temporizacion y en algunos casos cuando estn siendo ejecutadas le suele faltar algunos ciclos de reloj adicionales para que sean exactas; es all en donde debemos agregar algunas instrucciones NOP.

No. Instruccin 13 RLF f,d

Descripcin Rotacin a Izquierda

Observacin la Esta instruccin rota a la izquierda todos los bits de un registro "f".

Esta Instruccin esta muy relacionada con la bandera denominada Carry perteneciente al registro
STATUS. La bandera Carry esta afectada directamente por varias instrucciones de las cuales podemos mencionar: Rotacin a la izquierda, Rotacin a la derecha, Suma, Resta, etc.

No. Instruccin
14 RRF f,d

Descripcin Rotacin a Derecha

Observacin la Esta instruccin rota a la Derecha todos los bits de un registro "f".

Al igual que la instruccin anterior, esta muy relacionada con la bandera denominada Carry
perteneciente al registro STATUS. La bandera Carry esta afectada directamente por varias instrucciones de las cuales podemos mencionar: Rotacin a la izquierda, Rotacin a la derecha, Suma, Resta, etc. Posteriormente explicaremos las banderas.
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 15 SUBWF f,d Descripcin Resta W de f Observacin Resta el contenido del registro "W" del registro "f"

El microcontrolador PIC16F84 puede restar el contenido del registro "W" del registro "f"; por
ejemplo, supongamos que "W = 4 " y Dato1 = 6; cuando se aplica el comando SUBWF Dato1,0 se resta 6-4 y el resultado es almacenado en el acumulador "W". Por otro lado si se aplica el comando SUBWF Dato1,1 se resta 6-4 y el resultado es colocado en el registro Dato1.

No. Instruccin 33 SUBLW k

Descripcin Resta W de k

Observacin Resta el contenido del registro "W" de un literal "k"

Al igual que la instruccin anterior, este resta el contenido del registro "W" de un literal "k" donde "k" es una palabra cualquiera con un valor entre 0 y 255. El resultado de la operacin es colocado directamente en el registro "W".

No. Instruccin 16 SWAPF f,d

Descripcin Intercambio Bits

Observacin de Se intercambian los 4 bits mas altos con los 4 bits mas bajos

Este comando tan solo intercambia los cuatro bits mas altos con los cuatro bits mas bajos. Supongamos por ejemplo que tenemos el siguiente nmero binario almacenado en "f = 00001111"; cuando es aplicado el comando SWAPF f,0 el microcontrolador intercambia los bits altos por los bits bajos de la siguiente forma: 11110000; el resultado es colocado en el acumulador "W". Por otro lado cuando es aplicado el comando SWAPF f,1 el microcontrolador intercambia los bits altos por los bits bajos de la siguiente forma: 11110000; el resultado es colocado en el acumulador "f".
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 17 XORWF f,d Descripcin Observacin Operacin lgica Este comando aplica la operacin lgica de OR Exclusivo a dos OR exclusivo registros. ENTRADA A 0 0 1 1 B 0 1 0 1 RESULTAD O Y = A xor B 0 1 1 0

El microcontrolador PIC16F84 puede realizar una operacin OR


EXCLUSIVO entre dos registros.

Para explicar mejor la operacin OR EXCLUSIVO, supongamos que tenemos


un bit A y un bit B que deseamos comparar; entonces tenemos las siguientes alternativas combinaciones entre los dos bits:

No. Instruccin 34 XORLW k

Descripcin

Observacin Operacin lgica XOR entre el registro W y el literal "k"

Esta instruccin al igual que la instruccin explicada anteriormente ejecuta el mismo


procedimiento pero con ciertas diferencias. La instruccin XORLW k significa que el microcontrolador realiza una operacin lgica OR EXCLUSIVO entre el registro "W" y el contenido del literal "k", donde "k" es un literal que puede contener cualquier valor entre 0 y 255 asignado por el programador.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 18 BCF f,b Descripcin Observacin Coloca en Cero un Este comando pone en Cero el Bit "b" del registro "f" determinado Bit

Para este tipo de instrucciones pensamos que el mejor ejemplo que podemos sealar esta basado visualmente en un nmero binario. Cuando se aplica el comando BCF f,b el microcontrolador pone en cero el Bit "b" del registro "f".

No. Instruccin 19 BSF f,b

Descripcin Observacin Coloca en uno Este comando Pone en 1 el Bit "b" del registro "f" determinado Bit

Al igual que la instruccin anterior pensamos que el mejor ejemplo que podemos sealar esta basado visualmente en un nmero binario. Cuando se aplica el comando BSF f,b el microcontrolador pone en 1 el Bit "b" del registro "f"

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 20 BTFSC f,b Descripcin Observacin Prueba el Bit b del Este comando prueba el Bit "b" del registro "f" y salta una linea registro f si esta en 0.

Esta instruccin esta estrechamente relacionada con las dos siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo:

INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3

BTFSC f,b IR A OTRA DICRECCION SUMAR DOS NUMEROS

Supongamos que tenemos nuestro registro denominado Memory = 01010101; cuando se le aplica el comando BTFSC Memory,2 el microcontrolador prueba el Bit No. 2 del registro Memory para ver si es igual a cero. En esta comprobacin pueden suceder dos cosas: Si el Bit No. 2 es igual a 0 el microcontrolador ejecuta la instruccin nmero 3; pero en el caso de que el Bit No. 2 sea diferente de 0, el microcontrolador ejecuta la instruccin 2.
No. Instruccin 21 BTFSS f,b Descripcin Observacin Prueba el Bit b del Este comando prueba el Bit "b" del registro "f" y salta una linea registro f si esta en 1.

Esta instruccin esta estrechamente relacionada con las dos siguientes instrucciones dentro del programa. Veamos el siguiente ejemplo:

INSTRUCCIN 1 INSTRUCCIN 2 INSTRUCCIN 3

BTFSS f,b IR A OTRA DICRECCION SUMAR DOS NUMEROS

Supongamos que tenemos nuestro registro denominado Memory = 01010101; cuando se le aplica el comando BTFSS Memory,2 el microcontrolador prueba el Bit No. 2 del registro Memory para ver si es igual a 1. En esta comprobacin pueden suceder dos cosas: Si el Bit No. 2 es igual a 1 el microcontrolador ejecuta la Instruccin numero 3; pero en el caso de que el Bit No. 2 sea diferente de 1, el microcontrolador ejecuta la Instruccin 2
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 22 ADDLW k Descripcin Suma de nmeros Observacin dos Este comando suma un valor de un literal al contenido del registro "W"

Este comando es muy sencillo ya que tan solo cuando es aplicado, toma el contenido del registro y se lo suma al registro "W"; por ejemplo: Supongamos que W = 23 y que tenemos un literal k = 23; cuando se aplica el comando, el resultado es la suma del literal mas el contenido del registro "W", el resultado final queda almacenado en el registro "W".

No. Instruccin 24 CALL k

Descripcin

Observacin Llamada de una Subrrutina con el nombre k

Para entender esta instruccin, primera debemos aclarar que es una Subrutina. La subrutina consiste en un grupo de instrucciones que se encuentran aisladas del programa principal y que se ejecutan cuando son llamadas por un nombre asignado por el programador. Las subrrutinas suelen ser pequeos programas, por ejemplo para obtener retardos de tiempo ( Subrrutina de tiempo ); pero principalmente podemos decir tambin que una Subrrutina es un pequeo programa que se utiliza muchas veces en cualquier parte del programa. Las ventajas que ofrecen las subrrutinas estan referida al ahorro considerable de la memoria de programa y su fcil mantenimiento. A la subrrutina se le podr asignar cualquier nombre, y este es el nombre utilizado en la Instruccin CALL como parmetro. La instruccin CALL k esta estrechamente relacionada con la instruccin denominada RETURN y RETLW ( Ver las siguientes dos Instrucciones ).
No. Instruccin 31 RETURN Descripcin Observacin Retorno desde una subrrutina

La Instruccin RETURN es un comando que no podr estar separado cuando se crea una subrrutina. El procedimiento es prcticamente mecnico ya que usted deber crear la subrrutina y darle el nombre para poder ser llamada; al final de la subrrutina se debe escribir la instruccin denominada RETURN. Entonces podemos concluir que una subrrutina esta constituida por un conjunto de instrucciones demarcadas por un nombre que se encuentra al inicio y la instruccin RETURN que se encuentra al final demarcando el final de la subrrutina
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 30 RETLW k Descripcin Observacin Retorno de subrrutina y carga a "W" con el contenido del literal "k"

El comando

RETLW k se comporta igual al comando RETURN con la diferencia de que esta carga un Valor "k" en el registro "W" cuando finaliza la subrrutina. El rango de este valor "k" esta comprendido entre 0 y 255.

No. Instruccin 25 CLRWDT

Descripcin

Observacin Borra el contenido del registro llamado Watchdog Timer.

Esta instruccin borra el contador del WATCHDOG TIMER (perro guardin), en realidad es un contador interno que va desde 0 hasta 255 y que podr ser activado o desactivado en la configuracin del sistema cuando el microcontrolador va a ser grabado. El tiempo de conteo para este contador tambin podr ser prolongado por un preescalador segn las necesidades del usuario. La instruccin CLRWDT borra el contenido del contador del perro guardin. Si usted activa el Watchdog Timer, usted deber asegurarse de ejecutar el comando CLRWDT antes de que el contador finalice el conteo para que el microcontrolador no se reinicialice automticamente. Existen casos en donde los microcontroladores se confunden y queda bloqueado dejando automticamente de hacer la tarea encomendada. Cuando sucede esto no existir el comando CLRWDT y en consecuencia se reinicializara el microcntrolador. Esta instruccin es muy ventajosa cuando se tienen instalados los sistemas en lugares muy remotos y no puede enviarse a una persona para reinicializar el microcontrolador.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin
26 GOTO k

Descripcin

Observacin El contador de programa salta a una direccin con el nombre "k"

Esta es una de las instruccin mas fcil de entender y consiste tan solo en un salto a
otra parte del programa. Cuando se ejecuta el comando GOTO k, el microcontrolador salta a la direccin "k", donde "k" es una etiqueta cualquiera; por ejemplo:
SALTO

INSTRUCCIN 1 GOTO SALTO INSTRUCCIN 3 INSTRUCCIN 4 INSTRUCCION 5

No. Instruccin 28 MOVLW k

Descripcin

Observacin Se carga el registro "W" con el contenido del literal "k"

Esta instruccin le servir para tomar el contenido de un literal y cargarlo en el registro "W"; donde "k" en una palabra cualquiera que tiene asignado un valor entre 0 y 255.

No. Instruccin 29 RETFIE

Descripcin

Observacin Retorno de llamado a interrupcin

Esta Instruccin

es parecida a la Instruccin RETURN, pero a diferencia de esta, RETFIE es utilizada para volver de una subrrutina de interrupcin

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Set de instrucciones
No. Instruccin 32 SLEEP Descripcin Observacin Entra en modo de reposo.

Esta Instruccin le da la orden al microcontrolador de quedar en modo suspendido, en este modo el PIC no ejecuta ninguna
instruccin hasta que sea nuevamente reinicializado (RESET) comenzando nuevamente el programa. En este modo el consumo de energa del PIC es mnimo. Durante este modo el contador del WATCHDOG TIMER sigue trabajando y si este esta activado el PIC se reseteara por este medio.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Memoria
Special Function Registers (SFR) Banco 1 General Purpose Registers (GPR) Banco 0

GENERAL PURPOSE REGISTER FILE:


Each General Purpose Register (GPR) is 8-bits wide and is accessed either directly or indirectly through the FSR

SPECIAL FUNCTION REGISTERS: The Special Function Registers (FSR) are used by
the CPU and Peripheral functions to control the device operation. These registers are static RAM.

Registros: STATUS OPTION_REG INTCON TRISA TRISB PORTA PORTB TIMER0


Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

STATUS REGISTER

The STATUS register contains the Arithmetic status of the ALU, the RESET status and the bank select bit for data memory.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

OPTION REGISTER

The OPTION register is a readable and writable register which contains various control bits to configure the TMR0/WDT prescaler, the external INT interrupt, TMR0, and the weak pull-ups on PORTB.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

INTCON REGISTER

The INTCON register is a readable and writable register that contains the various enable bits for all interrupt sources.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

PORTA and TRISA Registers


PORTA is a 5-bit wide, bi-directional port. The corresponding data direction register is TRISA. Setting a TRISA bit (= 1) will make the corresponding PORTA pin an input (i.e., put the corresponding output driver in a Hi-Impedance mode). Clearing a TRISA bit (= 0) will make the corresponding PORTA pin an output (i.e., put the contents of the output latch on the selected pin). Reading the PORTA register reads the status of the pins, whereas writing to it will write to the port latch. All write operations are read-modify-write operations. Therefore, a write to a port implies that the port pins are read. This value is modified and then written to the port data latch. Pin RA4 is multiplexed with the Timer0 module clock input to become the RA4/T0CKI pin. The RA4/T0CKI pin is a Schmitt Trigger input and an open drain output. All other RA port pins have TTL input levels and full CMOS output drivers.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

PORTB and TRISB Registers


PORTB is an 8-bit wide, bi-directional port. The corresponding data direction register is TRISB. Setting a TRISB bit (= 1) will make the corresponding PORTB pin an input (i.e., put the corresponding output driver in a Hi-Impedance mode). Clearing a TRISB bit (= 0) will Make the corresponding PORTB pin an output (i.e., put the contents of the output latch on the selected pin). Each of the PORTB pins has a weak internal pull-up. A single control bit can turn on all the pull-ups. This is performed by clearing bit RBPU (OPTION<7>). The weak pull-up is automatically turned off when the port pin is configured as an output. The pull-ups are disabled on a Power-on Reset. Four of PORTBs pins, RB7:RB4, have an interrupt-onchange feature. Only pins configured as inputs can cause this interrupt to occur (i.e., any RB7:RB4 pin configured as an output is excluded from the interrupton-change comparison). The input pins (of RB7:RB4) are compared with the old value latched on the last read of PORTB. The mismatch outputs of RB7:RB4 are ORed together to generate the RB Port Change Interrupt with flag bit RBIF (INTCON<0>). This interrupt can wake the device from SLEEP. The user, in the Interrupt Service Routine, can clear the interrupt in the following manner: a) Any read or write of PORTB. This will end the mismatch condition. b) Clear flag bit RBIF. A mismatch condition will continue to set flag bit RBIF. Reading PORTB will end the mismatch condition and allow flag bit RBIF to be cleared.

The interrupt-on-change feature is recommended for wake-up on key depression operation and operations where PORTB is only used for the interrupt-on-change feature. Polling of PORTB is not recommended while using the interrupt-on-change feature
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

TIMER0 MODULE The Timer0 module timer/counter has the following features: 8-bit timer/counter Readable and writable Internal or external clock select Edge select for external clock 8-bit software programmable prescaler Interrupt-on-overflow from FFh to 00h Additional information on timer modules is available in the PICmicro Mid-Range Reference Manual (DS33023).

TIMER0 OPERATION
Timer0 can operate as a timer or as a counter. Timer mode is selected by clearing bit T0CS (OPTION_REG<5>). In Timer mode, the Timer0 module will increment every instruction cycle (without prescaler). If the TMR0 register is written, the increment is inhibited for the following two instruction cycles. The user can work around this by writing an adjusted value to the TMR0 register. Counter mode is selected by setting bit T0CS (OPTION_REG<5>). In Counter mode, Timer0 will increment, either on every rising or falling edge of pin RA4/T0CKI. The incrementing edge is determined by the Timer0 Source Edge Select bit, T0SE (OPTION_REG<4>). Clearing bit T0SE selects the rising edge. Restrictions on the external clock input are discussed below.
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

When an external clock input is used for Timer0, it must meet certain requirements. The requirements ensure the external clock can be synchronized with the internal phase clock (TOSC). Also, there is a delay in the actual incrementing of Timer0 after synchronization.

Additional information on external clock requirements is available in the PICmicro Mid-Range Reference Manual, (DS33023)

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

SPECIAL FEATURES OF THE CPU What sets a microcontroller apart from other processors are special circuits to deal with the needs of real time applications. The PIC16F84A has a host of such features intended to maximize system reliability, minimize cost through elimination of external components, provide power saving operating modes and offer code protection. These features are: OSC Selection RESET - Power-on Reset (POR) - Power-up Timer (PWRT) - Oscillator Start-up Timer (OST) Interrupts Watchdog Timer (WDT) SLEEP Code Protection ID Locations In-Circuit Serial Programming (ICSP)

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Configuration Bits The configuration bits can be programmed (read as '0'), or left unprogrammed (read as '1'), to select various device configurations. These bits are mapped in program memory location 2007h. Address 2007h is beyond the user program memory space and it belongs to the special test/configuration memory space (2000h - 3FFFh). This space can only be accessed during programming.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Instrucciones para el ensamblador


Podemos usar para escribir los programas el bloc de notas de Windows una vez escrito se guarda con extensin .asm y se convierte (ensambla) con un programa ensamblador, el MPLAB. El resultado es un archivo con extensin .hex que podemos transferir al PIC16F84.

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Existen una serie de instrucciones que son para el ensamblador y nos hacen la tarea de programacin mas sencilla y mas legible. EQU: Un ejemplo de esto son las etiquetas, podemos poner un nombre a un registro de memoria, esto se hace mediante la instruccin EQU. Por ejemplo: VARIABLE1 EQU 0CH A partir de ahora en lugar de escribir 0CH podemos escribir VARIABLE1 Con EQU tambin podemos poner nombre a constantes de la misma forma. #DEFINE: Otra instruccin para el ensamblador que usaremos ser la instruccin #DEFINE. Es parecido a EQU, solo que aqu no ponemos etiquetas a un registro, podemos ponerla a una instruccin entera, Por ejemplo: #DEFINE BANCO1 BSF STATUS,5 #DEFINE BANCO0 BCF STATUS,5

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

A partir de ahora, cuando escribamos BANCO1 se pondr a "1" el bit de seleccin de banco y pasaremos al banco 1, al escribir BANCO0 pasaremos al banco 0 ORG: Indica al ensamblador la direccin (de memoria de programa) donde se guardar la instruccin que vaya a continuacin. Por ejemplo: ORG 00H CLRF VARIABLE1 La instruccin CLRF est en la direccin de memoria de programa 00H (ser la primera instruccin en ser ejecutada por el pic) END: Se escribe al final del programa para indicar que ya ha acabado. (es obligatorio, si no da error).

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Es importante llevar un poco de orden a la hora de escribir el programa:

Al principio van los EQU y los #DEFINE, despus comenzamos con el programa. El programa se escribe en cuatro columnas separadas por tabuladores:

En la primera columna se ponen las etiquetas a

direcciones de programa En la segunda columna se ponen las instrucciones (BSF, CLRF, BTFSC... etc.) En la tercera columna se ponen Los registros o parmetros a los que afecta la instruccin. En la cuarta columna se ponen los comentarios que creas pertinentes (cuantos mas mejor) seguidos de un punto y coma.
Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

Ejemplo de programa bien ordenado: ;************************************ ;* El siguiente programa configura * ;* RA1 como entrada y RA0 como ;* salida y hace que la salida (RA0) * ;* sea la inversa de la entrada * ;* (RA1) ;************************************

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

ORG BANCO1 BCF BSF BANCO0 INICIO GOTO BSF

00H TRISA,0 TRISA,1 BTFSC PORTA,1 ESUNO PORTA,0

;Empezamos siempre a escribir en esta direccin ;Pasamos al banco 1 para hacer algunas ;configuraciones ;Configuramos RA0 como salida ;Configuramos RA1 como entrada ;Volvemos al banco 0 ;Comprueba la entrada (RA1), si es "0" se salta la ;siguiente instruccin ;si la entrada (RA1) es "1" va a ESUNO ;Pone a "1" la salida RA0. Ejecuta esta instruccin ;porque la entrada RA1 era "0" ;Vuelve otra vez a comprobar el estado de la ;entrada RA1 ;Pone a "0" la salida RA0. Ejecuta esta instruccin ;porque la entrada RA1 era "1" ;Vuelve otra vez a comprobar el estado de la ;entrada RA1 ;Indica final del programa

GOTO
ESUNO GOTO END

INICIO
BCF PORTA,0 INICIO

Ing. Marco Antonio Reyes Gonzlez, Depto. de Ingria. Elctrica y Electrnica

También podría gustarte