You are on page 1of 11

Investigación PIC 16F886

Profesor: Juan Antonio Sarreon Ramírez

Materia: Microprocesadores

Integrantes: Gascón Ibarra Cristian Erick

Rivera Barreiro Isaías

Paredes Gamero Carlos

Alonso Colalco Reinaldo


Que son los circuitos integrados (CI)
Un CI es aquel en el cual todos los componentes, incluyendo transistores, diodos, resistencias,
condensadores y alambres de conexión, se fabrican e interconectan completamente sobre un chip o
pastilla semiconductor de silicio.
Una vez procesado, el chip se encierra en una capsula plástica o de cerámica que contiene los pines
de conexión a los circuitos externos.
Los chips digitales más pequeños contienen varios componentes sencillos como compuertas,
inversores y flip-flops, los más grandes contienen circuitos y sistemas completos como contadores,
memorias, microprocesadores, etc. La mayoría de los circuitos integrados digitales vienen en
presentación tipo DIP (Dual in-line package) o de doble hilera. Los CI’s más comunes tipo DIP son los
de 8, 14, 16,24, 40 y 64 pines.
En la capsula trae impresa la información respecto al fabricante, la referencia del dispositivo y la fecha
de fabricación.
Además del tipo DIP, existen otras presentaciones comunes de los circuitos integrados digitales como
la capsula metálica, la plana y la chip carrier. Existen circuitos integrados que utilizan capsulas SMT o
de montaje superficial, SMT son casi 4 veces más pequeños que los DIPs.
La tecnología SMT (Surface-mount technology) es la que ha permitido obtener calculadores del tamaño
de una tarjeta de crédito.

Terminales del micro-controlador PIC16F886 y sus respectivas


funciones

Esta sería la disposición de sus terminales y sus respectivos nombres.


Encapsulado DIP - PIC16F886

Pin 1 que es utilizado para resetear el microcontrolador.

Las cuatro entradas para los conversores análogo digital del pin 2-5 el cual tiene 14 modos y se puede
tener referencias de voltajes programados. Y tiene dos comparadores internos.

Los puertos 6,7 que son utilizados para programación puede ser conectado al puerto serial.

Los pines 9 y 10 son utilizados para el resonador externo.

Los pines 11 a 14 son salidas, controlan diferentes dispositivos.

Los pines 15-18 funcionan como entradas o salidas, pueden ser utilizados para recepción de datos o
salida control de los dispositivos externos.

Ocho salidas las cuales pueden ser agrupadas de acuerdo a la necesidad y control de diferentes
dispositivos y de control

Características principales
Las características principales de estos dispositivos son:
• CPU de arquitectura RISC (Reduced Instruction Set Computer).
• Set de 35 instrucciones.
• Frecuencia de reloj de hasta 20MHz (ciclo de instrucción de 200ns).
• Todas las instrucciones se ejecutan en un único ciclo de instrucción, excepto las de salto.
• Hasta 8K x 14 palabras de Memoria de Programa FLASH (ver tabla a continuación).
• Hasta 368 x 8 bytes de Memoria de Datos tipo RAM (ver tabla a continuación).
• Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM (ver tabla a continuación).
• Hasta 15 fuentes de Interrupción posibles.
• 8 niveles de profundidad en la Pila hardware.
• Modo de bajo consumo (Sleep).
• Tipo de oscilador seleccionable (RC, HS, XT, LP y externo).
• Rango de voltaje de operación desde 2,0V a 5,5V.[3][4][5]
• Conversor Analógico/Digital de 10 bits multicanal.
• 3 Temporizadores.
• Watchdog Timer o Perro Guardián.
• 2 módulos de captura/comparación/PWM.
• Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter).
• Puerto Paralelo Esclavo de 8 bits (PSP).
• Puerto Serie Síncrono (SSP) con SPI e I2C.
Estructura interna
Estos microcontroladores tienen la memoria de programa y la memoria de datos separadas, lo que se
conoce como arquitectura Harvard. Esta configuración interna permite entre otras cosas acceder a
las instrucciones de programa y a los datos simultáneamente a través de buses diferentes, lo que
mejora notablemente la velocidad de proceso de estos dispositivos.

Circuitería externa auxiliar


Para que el microcontrolador sea capaz de funcionar en cualquier proyecto, se necesita al menos la
siguiente circuitería externa:
• La alimentación.
• El reloj (oscilador).
También, y de manera opcional:
• El circuito de reinicio.

Memoria interna
Existen tres bloques bien diferenciados de memoria. Estos son:
• Memoria de programa EEPROM Flash: es el lugar físico donde se guarda el programa de usuario. Es
de tipo no volátil.
• Memoria de datos SRAM: es el lugar físico donde se guardan datos. Es de tipo volátil.
• Memoria de datos EEPROM: es el lugar físico donde se guardan datos. Es de tipo no volátil.

Memoria de datos SRAM


Esta memoria es de tipo volátil, lo que significa que no conserva su contenido después de un apagado
de alimentación.
En esta memoria se encuentran los registros de funciones especiales (SFR) y los registros de propósito
general (GPR), y está particionada en cuatro bancos (0, 1, 2 y 3), seleccionables independientemente.
El banco 0 es el banco seleccionado por defecto cuando se alimenta al microcontrolador.

Registros de funciones especiales (SFR)


Todos los microcontroladores cuentan con registros internos que permiten controlar y supervisar las
funciones y recursos disponibles del dispositivo.
Los registros de los microcontroladores PIC se encuentran en un espacio especial de la memoria de
datos, el SFR (Special Function Registers). En los dispositivos PIC16F87X estos registros son de 8 bits,
la mayoría de lectura y escritura. Se puede acceder a dichos bits de manera individual, o bien a todo el
registro a la vez.
Determinados pares de registros tienen funciones especiales para las cuales se pueden considerar
unidos en un único registro de 16 bits, aunque físicamente siguen estando separados.
El registro STATUS
El registro de estado (STATUS) es uno de los más importantes y empleados en el microcontrolador.
Proporciona información acerca del resultado de operaciones aritméticas, operaciones lógicas y causa
de reinicios, además de permitir la selección del banco de memoria de datos.
El registro W
El registro de trabajo W (Working Register) es un registro relevante especial de 8 bits que participa en
la mayoría de instrucciones. A diferencia de los SFR, se encuentra dentro de la misma CPU, y puede
ser accedido tanto para lectura como para escritura.

Set de instrucciones y sintaxis


Los PIC16F87X son microcontroladores RISC. Esto se refleja en que tienen un repertorio reducido de
35 instrucciones ortogonales (prácticamente todas las instrucciones pueden utilizar cualquier
operando), éstas son rápidas y todas tienen una longitud fija de 14 bits.
Las instrucciones se pueden clasificar en:
• Instrucciones de carga.
• Instrucciones de bits.
• Instrucciones aritméticas.
• Instrucciones lógicas.
• Instrucciones de salto.
• Instrucciones de manejo de subrutinas.
• Instrucciones especiales.

Tabla resumen de instrucciones

Sintaxis Descripción Ciclos de Instrucción

Instrucciones de carga

CLRF f Borra el contenido del registro f 1

CLRW Borra el contenido del registro W 1

MOVF f,d Mueve el contenido del registro f 1

MOVWF f Mueve el contenido del registro W al registro f 1

MOVLW k Guarda en el registro W el valor k 1

Instrucciones de bit

BCF f,b Pone en "0" el bit b del registro f 1

BSF f,b Pone en "1" el bit b del registro f 1

Instrucciones aritméticas

ADDLW k Suma el valor k al registro W 1

ADDWF f,d Suma el contenido del registro W con el de f 1

DECF f,d Decrementa en una unidad el contenido del registro f 1

INCF f,d Incrementa en una unidad el contenido del registro f 1

SUBLW k Resta el valor k al registro W 1

SUBWF f,d Resta el contenido del registro W al registro f 1


Instrucciones lógicas

ANDLW k Realiza la operación lógica AND entre el valor k y el registro W 1

ANDWF f,d Realiza la operación lógica AND entre el contenido del registro W y el de f 1

COMF f,d Niega el valor del registro f 1

IORLW k Realiza la operación lógica OR entre el valor k y el registro W 1

IORWF f,d Realiza la operación lógica OR entre el contenido del registro W y el de f 1

RLF f,d Rota el contenido del registro f hacia la izquierda a través del carry bit 1

RRF f,d Rota el contenido del registro f hacia la derecha a través del carry bit 1

SWAPF f,d Intercambia los cuatro primeros bits con los cuatro últimos del registro f 1

XORLW Realiza la operación lógica XOR entre el valor k y el registro W 1

XORWF f,d Realiza la operación lógica XOR entre el contenido del registro W con el de f 1

Instrucciones de salto

BTFSC f,b Lee el bit b del registro f y salta la instrucción siguiente si está en “0” 1 (2 si
salta)
BTFSS f,b Lee el bit b del registro f y salta la instrucción siguiente si está en “1” 1 (2 si
salta)
DECFSZ f,d Decrementa en una unidad el contenido del registro f y salta la instrucción 1 (2 si
siguiente si es cero salta)
INCFSZ f,d Incrementa en una unidad el contenido del registro f y salta la instrucción 1 (2 si
siguiente si es cero salta)
GOTO k Salto incondicional a la etiqueta k 2

Instrucciones de manejo de subrutinas

CALL k Llamada a la subrutina k 2

RETFIE Retorno de una interrupción 2

RETLW Retorno de una subrutina con el valor k en el registro W 2

RETURN Retorno de una subrutina 2

Instrucciones especiales

CLRWDT Borra el temporizador del Watchdog 1

NOP No realiza ninguna operación (pero consume tiempo de ejecución) 1

SLEEP Se pone el PIC en estado de reposo (dormido) 1

En todas las instrucciones donde aparece una d como operando:


• Si d = 0, el resultado de la operación se guarda en W.
• Si d = 1, el resultado de la operación se guarda en el registro f. Es el valor por defecto.
Registro de configuración
Estos microcontroladores cuentan con un registro especial llamado palabra de configuración
(Configuration Word) de 14 bits, que se encuentra en la dirección 2007h de la memoria de
programa.
Este registro debe escribirse durante el proceso de grabación del microcontrolador ya que no puede
ser modificado durante el tiempo de ejecución de un programa.
Su función es especificar ciertas características de funcionamiento del microcontrolador, como son:
• Protección de memoria de programa.
• Uso del modo de depuración en circuito.
• Permiso de escritura en memoria Flash.
• Protección de memoria EEPROM de datos.
• Uso de programación en modo de bajo voltaje.
• Uso de reinicio por caída de tensión.
• Uso del temporizador de conexión de alimentación.
• Uso del Watchdog.
• Tipo de oscilador empleado.
Existen dos formas de configurar estos bits: una de ellas es desde MPLAB, mediante la opción
Configuration bits del menú configure. La otra es mediante la directiva CONFIG dentro del programa
ensamblador.

Controlando el conversor A/D


Los registros asociados al conversor A/D son:
• ADRESH (completo)
• ADRESL (completo)
• ADCONO (completo)
• ADCON1 (completo)

Como la resolución del convertidor A/D es de 10 bits y los registros del |iC son de 8 bits, se utilizan dos
registros, ADRESL y ADRESH (AD Result Low y AD Result High), de forma concatenada.
Es decir, los 8 bits de ADRESL y 2 bits de ADRESH.

Los registros ADC0N0 y ADCON1 permiten controlar, configurar y poner en marcha al conversor.
Los bits 6 y 7 del registro ADCON0 sirven para ajustar la frecuencia del oscilador del conversor, que
está ligada directamente con la frecuencia de oscilación del ^C. Los bits 3,4 y 5 sirven para elegir el
canal de conversión. El bit 2 sirve para iniciar la conversión. Debe ponerse en nivel lógico alto (1) para
comenzar el proceso de conversión. Automáticamente, este bit pasará a nivel lógico bajo (0) cuando la
conversión haya finalizado. El bit 1 no se usa. El bit 0 sirve para activar el módulo de conversión. Si
este bit está a nivel lógico bajo, el módulo de conversión estará deshabilitado.

El registro ADCON1 es el encargado de definir qué patita del |iC usaremos como entrada analógica.
Esto es muy útil cuando, por ejemplo, se usa un mismo terminal del |iC como salida/entrada digital y en
un determinado momento se quiere que ese mismo terminal lea un voltaje analógico externo. Este
registro también es el responsable de la selección de la “justificación” del resultado de la conversión (bit
7) y de configurar cual/es serán los terminales donde aplicaremos la tensión de referencia en caso de
necesitarla.
Conversión Terminada
El tiempo que le toma al ^C realizar la conversión se denomina Tj^d y nunca debe ser menor que 1,6
^s para la familia 16F87X. el tiempo Tad es configurado por software según la relación Tad =
kTosc donde K es el divisor de la frecuencia del conversor. Por ejemplo, si trabajamos con
Tose- 1^s y en los bits 7 y 6 del registro ADC0N0 ponemos 00, quedará: Tad = 2Tose = 2 * lfis =
2fis lo cual está dentro del rango permitido.

Una vez terminada la conversión, el resultado se almacena en los registros ADRESH y ADRESL según
estén configurados en el bit 7 del registro ADC0N1. La "justificación" a la derecha o izquierda es
sencilla de comprender; se trata de guardar el resultado de 10 bits en dos registros de 8 bit’s c/u, o sea
que se elegirá si se quieren los 8 primeros bits en el ADRESL y los dos restantes en el ADRESH o
viceversa.

Generalmente la elección de la justificación está directamente emparentada con la resolución que


queremos leer, es decir, si se quiere conectar un potenciómetro y según la tensión aumentar o
disminuir el tiempo de parpadeo de un led, se puede justificar a la izquierda y leer como resultado de la
conversión solo los 8 bits del ADRESH y descartar o despreciar los dos bits de menor peso significativo
que se guardarán en el ADRESL.

Pasos necesarios para la conversión A/D


A modo de algoritmo los pasos necesarios para una correcta utilización del módulo A/D son los
siguientes:
1. Configurar el módulo A/D:
1. Terminales de entrada analógica y de referencia.
2. Seleccionar el canal adecuado.
3. Seleccionar la velocidad de conversión.
4. Prender el conversor: Setear el bit 0 del registro ADCON0
2. Empezar la conversión: Setear el bit 1 del registro ADCON0
3. Esperar que el bit 2 del registro ADC0N0 se ponga a 0
4. Leer el resultado en los registros ADRESH:ADRESL
En estos pasos no se tiene en cuenta que se pueden necesitar más de una conversión por distintos
canales o bien que se realicen varias conversiones y luego tomar un promedio. Esta última técnica es
muy usada cuando las variaciones de tensión son rápidas y promediando tres o cuatro conversiones se
tiene así el resultado, hasta que se realice una segunda conversión.

Acerca de la programación de los dispositivos


La familia de los PIC16F88X cuenta con un set reducido de 35 instrucciones, lo que facilita
enormemente su memorización. La mayoría de estas instrucciones se ejecutan en un solo ciclo de
instrucción, mientras que aquellas instrucciones que realizan saltos de ejecución lo hacen en dos ciclos
de instrucción. Cada una de estas instrucciones se codifica en una palabra de 14 bits única e
inequívoca, que conforman en conjunto lo que se conoce como código máquina del dispositivo.
Aunque podría emplearse directamente este código máquina para programar el dispositivo (ya fuera en
formato binario o en hexadecimal), resultaría demasiado lento y complicado. Por esta razón, cada una
de las instrucciones se representa de manera equivalente con un nemónico, que es más fácil de
recordar y de interpretar por el programador. A este tipo de lenguaje de programación se le llama
lenguaje ensamblador.

Actualmente, para la programación de microcontroladores puede emplearse tanto el lenguaje


ensamblador como lenguajes de más alto nivel, tipo C o Pascal, empleando el compilador adecuado.
Los microcontroladores tienen un espacio de memoria que varía según el modelo y este espacio de
memoria es limitado. Hay que tener en cuenta que a cada instrucción escrita en lenguaje de alto nivel le
corresponderán por lo general varias instrucciones en lenguaje ensamblador, lo que significa que un
programa escrito en lenguaje de alto nivel ocupa más espacio de memoria que uno escrito en lenguaje
ensamblador. Por este motivo, la elección de uno u otro tipo de lenguaje a la hora de programar deberá
hacerse teniendo en cuenta el espacio de memoria disponible.

En caso de utilizar un lenguaje de alto nivel, siempre se requerirá compilar el pograma terminado para
obtener el archivo hexadecimal (lenguaje máquina) con el cual se programará el microcontrolador.
La programación física del dispositivo se hará normalmente mediante un programador, capaz de grabar
el programa de usuario en la memoria del microcontrolador.

Ejemplo sencillo: encender y apagar un LED

El ejemplo propuesto ilustra cómo conectar un LED por medio de una resistencia limitadora de corriente
a un terminal de salida de un PIC16F88X para que éste se encienda al presionar un pulsador y se
apague al soltarlo.

Circuito eléctrico
El circuito completo se debe alimentar a 5 V. Se utiliza un cristal de cuarzo de 10 MHz con
condensadores de 27 nF como circuito de reloj y un circuito de reset.
Se agrega un pulsador conectado a la patita RA0 (entrada) y un LED con su resistencia limitadora
conectado a la patita RB7 (salida).

Programa
Para crear el programa que se grabará en el PIC se puede usar MPLAB, que es el entorno de
desarrollo gratuito ofrecido por el fabribante Microchip Technology Inc.
Básicamente este sencillo ejemplo se puede modelar con el siguiente pseudocódigo:

Inicio programa Repetir:


RA0 = 1?
Si —> Encender LED No —>
Apagar LED Fin Repetir Fin
programa
Ensamblador
Empleando MPLAB, se genera el programa en lenguaje ensamblador a partir del pseudocódigo
anterior. El archivo generado deberá tener la extensión ".asm":
LIST P= PIC16F873 ;Indica que Pic se usa
INCLUDE "P16F8 7 3.inc" ;Agrega la definición estándar de registros
ORG 0 0h ;Comienza el programa en la dirección 00h
Inicio bsf STATUS,5 ;Selecciona el banco 1 de memoria
movlw 0 0h ;Guarda en W el n° 0
movwf TRISB ;Indica que el puerto B es salida
movlw 0ffh ;Guarda en W el n° 255d
movwf TRISA ;Indica que el puerto A es entrada
bcf STATUS,5 ;Selecciona el banco 0 de memoria
Comienzo btfsc P0RTA,0 ;Comprueba el estado de RA0
goto Enciende ;Si está en “1” salta a "Enciende"
goto Apaga ;Si está en “0” salta a "Apaga"
Apaga bcf P0RTB,0 ;Pone un “0”en RB7
goto Comienzo ;Salta a Comienzo
Enciende bsf P0RTB,0 ;Pone un “1”en RB7
goto Comienzo ;Salta a Comienzo
end ;Fin del programa

El símbolo ; permite escribir comentarios en el programa.


Inicio, Comienzo, Apaga y Enciende son etiquetas que ayudan a identificar una
dirección de memoria del programa. Éstas se reemplazan por la dirección de memoria
correspondiente.

En el programa se pueden observar las directivas comentadas, instrucciones, literales, configuración

de registros, etc.

Lenguaje máquina
Al compilar el archivo ".asm" creado se obtienen varios archivos. Uno de ellos, con extensión ".hex",
es el que se grabará en el PIC, y contiene todas las instrucciones traducidas al lenguaje máquina del
microcontrolador.
El archivo ".hex" obtenido es el siguiente:
:020000040000FA
:10000000831600308600FF308500831205180B2808
:0A0010000 9280 6100 6280 6140 6282 9 :00000001FF
Referencias

[1] Microcontroladores PIC. Diseño práctico de aplicaciones, página 34


[2] Microcontrolador PIC16F84. Desarrollo de proyectos. 2a edición, página 4
[3] PIC16F87XA Datasheet
[4] PIC16F870/871 Datasheet
[5] PIC16F872 Datasheet

You might also like