fbpx
Wikipedia

PIC16F87X

Los PIC16F87X forman una subfamilia de microcontroladores PIC (Peripheral Interface Controller) de gama media de 8 bits, fabricados por Microchip Technology Inc..

Cuentan con memoria de programa de tipo EEPROM Flash mejorada, lo que permite programarlos fácilmente usando un dispositivo programador de PIC. Esta característica facilita sustancialmente el diseño de proyectos, minimizando el tiempo empleado en programar los microcontroladores (µC).

Esta subfamilia consta de los siguientes modelos que varían de acuerdo a prestaciones, cantidad de terminales y encapsulados:

  • PIC16F870
  • PIC16F871
  • PIC16F872
  • PIC16F873A
  • PIC16F874A
  • PIC16F876A
  • PIC16F877A

La "A" final de los modelos PIC16F873A, PIC16F874A, PIC16F876A y PIC16F877A indica que estos modelos cuentan con módulos de comparación analógicos.[1]

El hecho de que se clasifiquen como microcontroladores (MCU) de 8 bits hace referencia a la longitud de los datos que manejan las instrucciones, y que se corresponde con el tamaño del bus de datos y el de los registros de la CPU.

Se trata de versiones mejoradas del caballo de batalla PIC16F84, muy empleado en proyectos sencillos, de educación y de entrenamiento.

Características principales

Las características principales de estos dispositivos son:

  • CPU de arquitectura RISC (Reduced Instruction Set Computer).[1]
  • Set de 35 instrucciones.[1]
  • Frecuencia de reloj de hasta 20MHz (ciclo de instrucción de 200ns).[1]
  • Todas las instrucciones se ejecutan en un único ciclo de instrucción, excepto las de salto.[1]
  • Hasta 8K x 14 palabras de Memoria de Programa FLASH (ver tabla a continuación).[1]
  • Hasta 368 x 8 bytes de Memoria de Datos tipo RAM (ver tabla a continuación).[1]
  • Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM (ver tabla a continuación).[1]
  • Hasta 15 fuentes de Interrupción posibles.[1]
  • 8 niveles de profundidad en la Pila hardware.[1]
  • Modo de bajo consumo (Sleep).[1]
  • Tipo de oscilador seleccionable (RC, HS, XT, LP y externo).[2]
  • Rango de voltaje de operación desde 2,0V a 5,5V.[3][4][5]
  • Conversor Analógico/Digital de 10 bits multicanal.[1]
  • 3 Temporizadores.[1]
  • Watchdog Timer o Perro Guardián.[1]
  • 2 módulos de captura/comparación/PWM.[1]
  • Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter).[1]
  • Puerto Paralelo Esclavo de 8 bits (PSP).[1]
  • Puerto Serie Síncrono (SSP) con SPI e I²C.[1]

Detalles según modelo

Modelo
Memoria de programa Flash (palabras de 14 bits)
Memoria de datos SRAM (bytes)
Memoria de datos EEPROM (bytes)
Líneas de E/S
Canales A/D
PWM
MSSP
USART
Comparadores
SPI
I²C Maestro
PIC16F870
2048
128
64
22
5
1
No
No
No
PIC16F871
2048
128
64
33
8
1
No
No
No
PIC16F872
2048
128
64
22
5
1
No
No
PIC16F873A
4096
192
128
22
5
2
Sí (2)
PIC16F874A
4096
192
128
33
8
2
Sí (2)
PIC16F876A
8192
368
256
22
5
2
Sí (2)
PIC16F877A
8192
368
256
33
8
2
Sí (2)

Tipos de encapsulado y número de terminales

Microchip Technology Inc. fabrica estos microcontroladores en encapsulados PDIP y SPDIP, SOIC, SSOP, PLCC, QFP y QFN.

Los dispositivos PIC16F870, PIC16F872, PIC16F873A y PIC16F876A se fabrican en encapsulados de 28 pines en formatos PDIP, SOIC, SSOP y QFN, mientras que los dispositivos PIC16F871, PIC16F874A y PIC16F877A se fabrican en encapsulados de 40 pines para formato PDIP, y en encapsulados de 44 pines para formatos PLCC, QFP y QFN.

En los encapsulados de 28 pines no está implementado el Puerto Paralelo Esclavo (PSP).

Muchas de los pines o terminales de estos dispositivos, como suele ocurrir en la mayoría de microcontroladores, tienen más de una función (multiplexación), dependiendo de cómo se configuren internamente por software.

Los terminales VDD (tensión) y VSS (masa) sirven únicamente para alimentar al dispositivo.

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:

La alimentación

Los dispositivos de la familia PIC16F87X admiten un amplio rango de tensiones de alimentación, que va de 2,0 V a 5,5 V. La tensión a la cual se alimenten determinará la frecuencia máxima de trabajo.

La potencia máxima disipada es de 1 W y se calcula mediante la siguiente fórmula:

 

donde:

  •   es la tensión suministrada por la fuente de alimentación.
  •   es la corriente suministrada por las salidas del PIC en estado alto.
  •   es la corriente absorbida por las salidas del PIC en estado bajo.
  •   es la tensión entregada por los terminales en estado alto.
  •   es la tensión presente en los terminales en estado bajo.

El reloj

El reloj u oscilador se utiliza para generar la base de tiempo del microcontrolador. Para la conexión del oscilador se emplean los terminales OSC1 y OSC2 del dispositivo.

Los microcontroladores PIC16F87X emplean por cada ciclo de instrucción cuatro ciclos de reloj. Esto significa que por ejemplo, si el microcontrolador debe ejecutar un programa de 1000 instrucciones con un reloj de 10 MHz (periodo de reloj de 100 ns), el tiempo total que empleará para ejecutar todo el programa (asumiendo que todas las instrucciones fueran de un ciclo de instrucción) será de:

 

La serie PIC16F87X puede trabajar a una frecuencia de reloj máxima de 20 MHz. Esto quiere decir que, a esta frecuencia, el tiempo necesario para ejecutar las instrucciones de un ciclo de instrucción es de 200 ns, y de 400 ns para las de dos ciclos de instrucción (instrucciones de salto).

La señal de reloj puede generarse mediante una red resistencia-condensador, un cristal de cuarzo piezoeléctrico o un resonador cerámico, aunque empleando cristales de cuarzo se consiguen frecuencias de oscilación muy exactas, lo cual es útil para calcular tiempos de ejecución, temporizaciones precisas, etc.

Estos microcontroladores permiten escoger entre cinco tipos distintos de osciladores:

  • LP (Low Power): reloj de bajo consumo, estable, con frecuencia de oscilación de hasta 200 kHz.
  • XT (Xtal, Crystal): estable, frecuencia de oscilación de hasta 4 MHz.
  • HS (High Speed): estable, frecuencia de oscilación de hasta 20 MHz.
  • RC (Resistor/Condensador): frecuencia de oscilación dependiente de resistencia, condensador, voltaje de alimentación y temperatura de trabajo. Es el tipo más económico, pero también el más inestable.
  • Externo: cuando la señal de reloj es externa, generada por otro circuito.

Los modos LP, XT y HS suponen la conexión de un cristal de cuarzo o resonador cerámico entre las patitas OSC1/CLKIN y OSC2/CLKOUT del dispositivo, mientras que el modo RC y Externo solo ocupan la patita OSC1/CLKIN.

El circuito de reinicio

El terminal MCLR (Master Clear) debe estar a valor lógico alto para que el dispositivo funcione normalmente, esto es, sin irse a reinicio. Con un valor lógico bajo el dispositivo se reinicia, comenzando la ejecución desde el principio del programa que tenga cargado en memoria.

Lo más práctico, para facilitar el hecho de poder realizar un reinicio manual, es utilizar un pulsador (pulsador de reinicio), similar al que se puede encontrar en la mayoría de ordenadores. El fabricante recomienda que se intercale una resistencia de 50 a 100 ohmios entre el pulsador y la patita MCLR, para evitar posibles corrientes inducidas de más de 80 mA que podrían bloquear el dispositivo cuando este se lleva a masa (reinicio).[3]

Debido a que el pulsador no produce una respuesta instantánea, producto de los rebotes de éste (transitorio), se generan una serie de pulsos hasta quedar estabilizado en su estado permanente. Para evitar esto se puede usar un condensador instalado en paralelo con la entrada MCLR (filtro pasa bajo).

También resulta muy efectivo el uso de un filtro pasa alto para hacer la señal de reinicio independiente del tiempo en que se presiona el pulsador. Inmediatamente después de pulsar el pulsador el μC se reinicia, sin tener en cuenta cuánto tiempo se mantiene presionado dicho pulsador.

Estas técnicas de reinicio son muy efectivas, pero no son las únicas. Existe infinidad de circuitos y posibilidades para provocar el reinicio externo en los microcontroladores, adecuándose cada solución a la necesidad o al criterio de diseño del circuito y su función específica.

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 siguiente si es cero
1 (2 si salta)
INCFSZ f,d Incrementa en una unidad el contenido del registro f y salta la instrucción siguiente si es cero
1 (2 si 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.

El conversor analógico-digital

El conversor analógico-digital (ADC en inglés) que llevan incorporados los microcontroladores de la subfamilia PIC16F87X es de 10 bits. Su funcionamiento es bastante simple, comparado con los conversores A/D R2R, los de resistencia ponderada, etc.

El número de canales de conversión disponibles depende del modelo de dispositivo. Así, los modelos PIC16F874A y PIC16F877A vienen equipados con 8 canales, mientras que los modelos PIC16F873A y PIC16F876A vienen equipados con 5 canales.

La técnica que utilizan estos dispositivos para la conversión es la de “incremento y comparación”. Consiste en usar un registro auxiliar cuyo valor se compara con la entrada analógica. Si es menor se incrementa el registro y se vuelve a comparar. Así hasta que el valor del registro sea lo más aproximado posible (pero sin pasarse) a la entrada analógica.

El rango de voltaje aceptado para la conversión de la señal analógica es de 0 V a 5 V. Si se tiene que trabajar con una señal de mayor voltaje, basta con poner a la entrada del conversor un divisor de tensión correctamente calculado o bien trabajar con alguna tensión de referencia externa al μC.

La resolución de la conversión es función de la tensión de referencia externa (en caso de que la hubiere) y viene dada por:

 

Si no existe referencia externa, el microcontrolador toma como valores de referencia Vref+ = VDD y Vref- = GND (valores de alimentación del dispositivo).

Por ejemplo, si la tensión de referencia positiva (Vref+) es de 5 V y la tensión de referencia negativa (Vref-) es de 0 V, la resolución es de 4,8 mV por cada bit. Una vez realizada la conversión, se obtienen un valor binario 0000000000 para 0 V y un valor binario 1111111111 para 5 V.

Controlando el conversor A/D

Los registros asociados al conversor A/D son:

  • ADRESH (completo)
  • ADRESL (completo)
  • ADCON0 (completo)
  • ADCON1 (completo)

Como la resolución del convertidor A/D es de 10 bits y los registros del µC 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 ADCON0 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 µC usaremos como entrada analógica. Esto es muy útil cuando, por ejemplo, se usa un mismo terminal del µC 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   y nunca debe ser menor que 1,6 μs para la familia 16F87X. el tiempo   es configurado por software según la relación   donde K es el divisor de la frecuencia del conversor. Por ejemplo, si trabajamos con   = 1μs y en los bits 7 y 6 del registro ADCON0 ponemos 00, quedará:   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 ADCON1. 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 ADCON0 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 PIC16F87X cuenta con un conjunto 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 programa 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 PIC16F873, 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 fabricante 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 "P16F873.inc" ;Agrega la definición estándar de registros ORG 00h ;Comienza el programa en la dirección 00h Inicio bsf STATUS,5 ;Selecciona el banco 1 de memoria movlw 00h ;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 PORTA,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 PORTB,0 ;Pone un “0” en RB7 goto Comienzo ;Salta a Comienzo Enciende bsf PORTB,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. Estas 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 :0A0010000928061006280614062829 :00000001FF 

Referencias

  1. Microcontroladores PIC. Diseño práctico de aplicaciones, página 34
  2. Microcontrolador PIC16F84. Desarrollo de proyectos. 2ª edición, página 4
  3. PIC16F87XA Datasheet
  4. PIC16F870/871 Datasheet
  5. PIC16F872 Datasheet

Bibliografía

  • Microchip Technology Inc. (2003). «PIC16F870/871 Datasheet» (pdf) (en inglés). p. 170. Consultado el 31 de mayo de 2009. 
  • Microchip Technology Inc. (2006). «PIC16F872 Datasheet» (pdf) (en inglés). p. 166. Consultado el 31 de mayo de 2009. 
  • Microchip Technology Inc. (2003). «PIC16F87XA Datasheet» (pdf) (en inglés). p. 232. Consultado el 21 de mayo de 2009. 
  • Angulo Usategui, José María; S. Romero Yesa, I. Angulo Martínez (2006). Microcontroladores PIC. Diseño práctico de aplicaciones. (2ª edición). McGraw-Hill. ISBN 978-84-481-4627-6. 
  • Palacios Municio, Enrique; F. Remiro, L. J. López (2005). Microcontrolador PIC16F84. Desarrollo de proyectos. (2ª edición). Ra-Ma. ISBN 84-7897-691-4. 

Véase también

Enlaces externos

  • Web oficial de Microchip Technology Inc.
  •   Datos: Q5400222

pic16f87x, forman, subfamilia, microcontroladores, peripheral, interface, controller, gama, media, bits, fabricados, microchip, technology, cuentan, memoria, programa, tipo, eeprom, flash, mejorada, permite, programarlos, fácilmente, usando, dispositivo, progr. Los PIC16F87X forman una subfamilia de microcontroladores PIC Peripheral Interface Controller de gama media de 8 bits fabricados por Microchip Technology Inc Cuentan con memoria de programa de tipo EEPROM Flash mejorada lo que permite programarlos facilmente usando un dispositivo programador de PIC Esta caracteristica facilita sustancialmente el diseno de proyectos minimizando el tiempo empleado en programar los microcontroladores µC Esta subfamilia consta de los siguientes modelos que varian de acuerdo a prestaciones cantidad de terminales y encapsulados PIC16F870 PIC16F871 PIC16F872 PIC16F873A PIC16F874A PIC16F876A PIC16F877ALa A final de los modelos PIC16F873A PIC16F874A PIC16F876A y PIC16F877A indica que estos modelos cuentan con modulos de comparacion analogicos 1 El hecho de que se clasifiquen como microcontroladores MCU de 8 bits hace referencia a la longitud de los datos que manejan las instrucciones y que se corresponde con el tamano del bus de datos y el de los registros de la CPU Se trata de versiones mejoradas del caballo de batalla PIC16F84 muy empleado en proyectos sencillos de educacion y de entrenamiento Indice 1 Caracteristicas principales 1 1 Detalles segun modelo 2 Tipos de encapsulado y numero de terminales 3 Estructura interna 4 Circuiteria externa auxiliar 4 1 La alimentacion 4 2 El reloj 4 3 El circuito de reinicio 5 Memoria interna 5 1 Memoria de datos SRAM 6 Registros de funciones especiales SFR 6 1 El registro STATUS 7 El registro W 8 Set de instrucciones y sintaxis 8 1 Tabla resumen de instrucciones 9 Registro de configuracion 10 El conversor analogico digital 10 1 Controlando el conversor A D 10 2 Conversion Terminada 10 3 Pasos necesarios para la conversion A D 11 Acerca de la programacion de los dispositivos 12 Ejemplo sencillo encender y apagar un LED 12 1 Circuito electrico 12 2 Programa 12 2 1 Ensamblador 12 2 2 Lenguaje maquina 13 Referencias 14 Bibliografia 15 Vease tambien 16 Enlaces externosCaracteristicas principales EditarLas caracteristicas principales de estos dispositivos son CPU de arquitectura RISC Reduced Instruction Set Computer 1 Set de 35 instrucciones 1 Frecuencia de reloj de hasta 20MHz ciclo de instruccion de 200ns 1 Todas las instrucciones se ejecutan en un unico ciclo de instruccion excepto las de salto 1 Hasta 8K x 14 palabras de Memoria de Programa FLASH ver tabla a continuacion 1 Hasta 368 x 8 bytes de Memoria de Datos tipo RAM ver tabla a continuacion 1 Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM ver tabla a continuacion 1 Hasta 15 fuentes de Interrupcion posibles 1 8 niveles de profundidad en la Pila hardware 1 Modo de bajo consumo Sleep 1 Tipo de oscilador seleccionable RC HS XT LP y externo 2 Rango de voltaje de operacion desde 2 0V a 5 5V 3 4 5 Conversor Analogico Digital de 10 bits multicanal 1 3 Temporizadores 1 Watchdog Timer o Perro Guardian 1 2 modulos de captura comparacion PWM 1 Comunicaciones por interfaz USART Universal Synchronous Asynchronous Receiver Transmitter 1 Puerto Paralelo Esclavo de 8 bits PSP 1 Puerto Serie Sincrono SSP con SPI e I C 1 Detalles segun modelo Editar Modelo Memoria de programa Flash palabras de 14 bits Memoria de datos SRAM bytes Memoria de datos EEPROM bytes Lineas de E S Canales A D PWM MSSP USART ComparadoresSPI I C MaestroPIC16F870 2048 128 64 22 5 1 No No Si NoPIC16F871 2048 128 64 33 8 1 No No Si NoPIC16F872 2048 128 64 22 5 1 Si Si No NoPIC16F873A 4096 192 128 22 5 2 Si Si Si Si 2 PIC16F874A 4096 192 128 33 8 2 Si Si Si Si 2 PIC16F876A 8192 368 256 22 5 2 Si Si Si Si 2 PIC16F877A 8192 368 256 33 8 2 Si Si Si Si 2 Tipos de encapsulado y numero de terminales EditarMicrochip Technology Inc fabrica estos microcontroladores en encapsulados PDIP y SPDIP SOIC SSOP PLCC QFP y QFN Los dispositivos PIC16F870 PIC16F872 PIC16F873A y PIC16F876A se fabrican en encapsulados de 28 pines en formatos PDIP SOIC SSOP y QFN mientras que los dispositivos PIC16F871 PIC16F874A y PIC16F877A se fabrican en encapsulados de 40 pines para formato PDIP y en encapsulados de 44 pines para formatos PLCC QFP y QFN En los encapsulados de 28 pines no esta implementado el Puerto Paralelo Esclavo PSP Muchas de los pines o terminales de estos dispositivos como suele ocurrir en la mayoria de microcontroladores tienen mas de una funcion multiplexacion dependiendo de como se configuren internamente por software Los terminales VDD tension y VSS masa sirven unicamente para alimentar al dispositivo Estructura interna EditarEstos microcontroladores tienen la memoria de programa y la memoria de datos separadas lo que se conoce como arquitectura Harvard Esta configuracion interna permite entre otras cosas acceder a las instrucciones de programa y a los datos simultaneamente a traves de buses diferentes lo que mejora notablemente la velocidad de proceso de estos dispositivos Circuiteria externa auxiliar EditarPara que el microcontrolador sea capaz de funcionar en cualquier proyecto se necesita al menos la siguiente circuiteria externa La alimentacion El reloj oscilador Tambien y de manera opcional El circuito de reinicio La alimentacion Editar Los dispositivos de la familia PIC16F87X admiten un amplio rango de tensiones de alimentacion que va de 2 0 V a 5 5 V La tension a la cual se alimenten determinara la frecuencia maxima de trabajo La potencia maxima disipada es de 1 W y se calcula mediante la siguiente formula P d i s i p a d a V D D I D D S I O H S V D D V O H I O H S V O L I O L displaystyle P disipada V DD I DD Sigma I OH Sigma V DD V OH I OH Sigma V OL I OL donde V D D displaystyle V DD es la tension suministrada por la fuente de alimentacion I O H displaystyle I OH es la corriente suministrada por las salidas del PIC en estado alto I O L displaystyle I OL es la corriente absorbida por las salidas del PIC en estado bajo V O H displaystyle V OH es la tension entregada por los terminales en estado alto V O L displaystyle V OL es la tension presente en los terminales en estado bajo El reloj Editar El reloj u oscilador se utiliza para generar la base de tiempo del microcontrolador Para la conexion del oscilador se emplean los terminales OSC1 y OSC2 del dispositivo Los microcontroladores PIC16F87X emplean por cada ciclo de instruccion cuatro ciclos de reloj Esto significa que por ejemplo si el microcontrolador debe ejecutar un programa de 1000 instrucciones con un reloj de 10 MHz periodo de reloj de 100 ns el tiempo total que empleara para ejecutar todo el programa asumiendo que todas las instrucciones fueran de un ciclo de instruccion sera de T 1000 4 10 10 6 400 m s displaystyle T 1000 4 over 10 10 6 400 mu s La serie PIC16F87X puede trabajar a una frecuencia de reloj maxima de 20 MHz Esto quiere decir que a esta frecuencia el tiempo necesario para ejecutar las instrucciones de un ciclo de instruccion es de 200 ns y de 400 ns para las de dos ciclos de instruccion instrucciones de salto La senal de reloj puede generarse mediante una red resistencia condensador un cristal de cuarzo piezoelectrico o un resonador ceramico aunque empleando cristales de cuarzo se consiguen frecuencias de oscilacion muy exactas lo cual es util para calcular tiempos de ejecucion temporizaciones precisas etc Estos microcontroladores permiten escoger entre cinco tipos distintos de osciladores LP Low Power reloj de bajo consumo estable con frecuencia de oscilacion de hasta 200 kHz XT Xtal Crystal estable frecuencia de oscilacion de hasta 4 MHz HS High Speed estable frecuencia de oscilacion de hasta 20 MHz RC Resistor Condensador frecuencia de oscilacion dependiente de resistencia condensador voltaje de alimentacion y temperatura de trabajo Es el tipo mas economico pero tambien el mas inestable Externo cuando la senal de reloj es externa generada por otro circuito Los modos LP XT y HS suponen la conexion de un cristal de cuarzo o resonador ceramico entre las patitas OSC1 CLKIN y OSC2 CLKOUT del dispositivo mientras que el modo RC y Externo solo ocupan la patita OSC1 CLKIN El circuito de reinicio Editar El terminal MCLR Master Clear debe estar a valor logico alto para que el dispositivo funcione normalmente esto es sin irse a reinicio Con un valor logico bajo el dispositivo se reinicia comenzando la ejecucion desde el principio del programa que tenga cargado en memoria Lo mas practico para facilitar el hecho de poder realizar un reinicio manual es utilizar un pulsador pulsador de reinicio similar al que se puede encontrar en la mayoria de ordenadores El fabricante recomienda que se intercale una resistencia de 50 a 100 ohmios entre el pulsador y la patita MCLR para evitar posibles corrientes inducidas de mas de 80 mA que podrian bloquear el dispositivo cuando este se lleva a masa reinicio 3 Debido a que el pulsador no produce una respuesta instantanea producto de los rebotes de este transitorio se generan una serie de pulsos hasta quedar estabilizado en su estado permanente Para evitar esto se puede usar un condensador instalado en paralelo con la entrada MCLR filtro pasa bajo Tambien resulta muy efectivo el uso de un filtro pasa alto para hacer la senal de reinicio independiente del tiempo en que se presiona el pulsador Inmediatamente despues de pulsar el pulsador el mC se reinicia sin tener en cuenta cuanto tiempo se mantiene presionado dicho pulsador Estas tecnicas de reinicio son muy efectivas pero no son las unicas Existe infinidad de circuitos y posibilidades para provocar el reinicio externo en los microcontroladores adecuandose cada solucion a la necesidad o al criterio de diseno del circuito y su funcion especifica Memoria interna EditarExisten tres bloques bien diferenciados de memoria Estos son Memoria de programa EEPROM Flash es el lugar fisico donde se guarda el programa de usuario Es de tipo no volatil Memoria de datos SRAM es el lugar fisico donde se guardan datos Es de tipo volatil Memoria de datos EEPROM es el lugar fisico donde se guardan datos Es de tipo no volatil Memoria de datos SRAM Editar Esta memoria es de tipo volatil lo que significa que no conserva su contenido despues de un apagado de alimentacion En esta memoria se encuentran los registros de funciones especiales SFR y los registros de proposito general GPR y esta 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 EditarTodos 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 mayoria 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 unico registro de 16 bits aunque fisicamente siguen estando separados El registro STATUS Editar El registro de estado STATUS es uno de los mas importantes y empleados en el microcontrolador Proporciona informacion acerca del resultado de operaciones aritmeticas operaciones logicas y causa de reinicios ademas de permitir la seleccion del banco de memoria de datos El registro W EditarEl registro de trabajo W Working Register es un registro relevante especial de 8 bits que participa en la mayoria 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 EditarLos PIC16F87X son microcontroladores RISC Esto se refleja en que tienen un repertorio reducido de 35 instrucciones ortogonales practicamente todas las instrucciones pueden utilizar cualquier operando estas son rapidas y todas tienen una longitud fija de 14 bits Las instrucciones se pueden clasificar en Instrucciones de carga Instrucciones de bits Instrucciones aritmeticas Instrucciones logicas Instrucciones de salto Instrucciones de manejo de subrutinas Instrucciones especiales Tabla resumen de instrucciones Editar Sintaxis Descripcion Ciclos de InstruccionInstrucciones de cargaCLRF f Borra el contenido del registro f 1CLRW Borra el contenido del registro W 1MOVF f d Mueve el contenido del registro f 1MOVWF f Mueve el contenido del registro W al registro f 1MOVLW k Guarda en el registro W el valor k 1Instrucciones de bitBCF f b Pone en 0 el bit b del registro f 1BSF f b Pone en 1 el bit b del registro f 1Instrucciones aritmeticasADDLW k Suma el valor k al registro W 1ADDWF f d Suma el contenido del registro W con el de f 1DECF f d Decrementa en una unidad el contenido del registro f 1INCF f d Incrementa en una unidad el contenido del registro f 1SUBLW k Resta el valor k al registro W 1SUBWF f d Resta el contenido del registro W al registro f 1Instrucciones logicasANDLW k Realiza la operacion logica AND entre el valor k y el registro W 1ANDWF f d Realiza la operacion logica AND entre el contenido del registro W y el de f 1COMF f d Niega el valor del registro f 1IORLW k Realiza la operacion logica OR entre el valor k y el registro W 1IORWF f d Realiza la operacion logica OR entre el contenido del registro W y el de f 1RLF f d Rota el contenido del registro f hacia la izquierda a traves del carry bit 1RRF f d Rota el contenido del registro f hacia la derecha a traves del carry bit 1SWAPF f d Intercambia los cuatro primeros bits con los cuatro ultimos del registro f 1XORLW Realiza la operacion logica XOR entre el valor k y el registro W 1XORWF f d Realiza la operacion logica XOR entre el contenido del registro W con el de f 1Instrucciones de saltoBTFSC f b Lee el bit b del registro f y salta la instruccion siguiente si esta en 0 1 2 si salta BTFSS f b Lee el bit b del registro f y salta la instruccion siguiente si esta en 1 1 2 si salta DECFSZ f d Decrementa en una unidad el contenido del registro f y salta la instruccion siguiente si es cero 1 2 si salta INCFSZ f d Incrementa en una unidad el contenido del registro f y salta la instruccion siguiente si es cero 1 2 si salta GOTO k Salto incondicional a la etiqueta k 2Instrucciones de manejo de subrutinasCALL k Llamada a la subrutina k 2RETFIE Retorno de una interrupcion 2RETLW Retorno de una subrutina con el valor k en el registro W 2RETURN Retorno de una subrutina 2Instrucciones especialesCLRWDT Borra el temporizador del Watchdog 1NOP No realiza ninguna operacion pero consume tiempo de ejecucion 1SLEEP Se pone el PIC en estado de reposo dormido 1En todas las instrucciones donde aparece una d como operando Si d 0 el resultado de la operacion se guarda en W Si d 1 el resultado de la operacion se guarda en el registro f Es el valor por defecto Registro de configuracion EditarEstos microcontroladores cuentan con un registro especial llamado palabra de configuracion Configuration Word de 14 bits que se encuentra en la direccion 2007h de la memoria de programa Este registro debe escribirse durante el proceso de grabacion del microcontrolador ya que no puede ser modificado durante el tiempo de ejecucion de un programa Su funcion es especificar ciertas caracteristicas de funcionamiento del microcontrolador como son Proteccion de memoria de programa Uso del modo de depuracion en circuito Permiso de escritura en memoria Flash Proteccion de memoria EEPROM de datos Uso de programacion en modo de bajo voltaje Uso de reinicio por caida de tension Uso del temporizador de conexion de alimentacion Uso del Watchdog Tipo de oscilador empleado Existen dos formas de configurar estos bits una de ellas es desde MPLAB mediante la opcion Configuration bits del menu configure La otra es mediante la directiva CONFIG dentro del programa ensamblador El conversor analogico digital EditarEl conversor analogico digital ADC en ingles que llevan incorporados los microcontroladores de la subfamilia PIC16F87X es de 10 bits Su funcionamiento es bastante simple comparado con los conversores A D R2R los de resistencia ponderada etc El numero de canales de conversion disponibles depende del modelo de dispositivo Asi los modelos PIC16F874A y PIC16F877A vienen equipados con 8 canales mientras que los modelos PIC16F873A y PIC16F876A vienen equipados con 5 canales La tecnica que utilizan estos dispositivos para la conversion es la de incremento y comparacion Consiste en usar un registro auxiliar cuyo valor se compara con la entrada analogica Si es menor se incrementa el registro y se vuelve a comparar Asi hasta que el valor del registro sea lo mas aproximado posible pero sin pasarse a la entrada analogica El rango de voltaje aceptado para la conversion de la senal analogica es de 0 V a 5 V Si se tiene que trabajar con una senal de mayor voltaje basta con poner a la entrada del conversor un divisor de tension correctamente calculado o bien trabajar con alguna tension de referencia externa al mC La resolucion de la conversion es funcion de la tension de referencia externa en caso de que la hubiere y viene dada por R e s V r e f V r e f 1024 displaystyle Res V ref V ref over 1024 Si no existe referencia externa el microcontrolador toma como valores de referencia Vref VDD y Vref GND valores de alimentacion del dispositivo Por ejemplo si la tension de referencia positiva Vref es de 5 V y la tension de referencia negativa Vref es de 0 V la resolucion es de 4 8 mV por cada bit Una vez realizada la conversion se obtienen un valor binario 0000000000 para 0 V y un valor binario 1111111111 para 5 V Controlando el conversor A D Editar Los registros asociados al conversor A D son ADRESH completo ADRESL completo ADCON0 completo ADCON1 completo Como la resolucion del convertidor A D es de 10 bits y los registros del µC 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 ADCON0 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 esta ligada directamente con la frecuencia de oscilacion del mC Los bits 3 4 y 5 sirven para elegir el canal de conversion El bit 2 sirve para iniciar la conversion Debe ponerse en nivel logico alto 1 para comenzar el proceso de conversion Automaticamente este bit pasara a nivel logico bajo 0 cuando la conversion haya finalizado El bit 1 no se usa El bit 0 sirve para activar el modulo de conversion Si este bit esta a nivel logico bajo el modulo de conversion estara deshabilitado El registro ADCON1 es el encargado de definir que patita del µC usaremos como entrada analogica Esto es muy util cuando por ejemplo se usa un mismo terminal del µC como salida entrada digital y en un determinado momento se quiere que ese mismo terminal lea un voltaje analogico externo Este registro tambien es el responsable de la seleccion de la justificacion del resultado de la conversion bit 7 y de configurar cual es seran los terminales donde aplicaremos la tension de referencia en caso de necesitarla Conversion Terminada Editar El tiempo que le toma al mC realizar la conversion se denomina T A D displaystyle T AD y nunca debe ser menor que 1 6 ms para la familia 16F87X el tiempo T A D displaystyle T AD es configurado por software segun la relacion T A D k T O S C displaystyle T AD kT OSC donde K es el divisor de la frecuencia del conversor Por ejemplo si trabajamos con T O S C displaystyle T OSC 1ms y en los bits 7 y 6 del registro ADCON0 ponemos 00 quedara T A D 2 T O S C 2 1 m s 2 m s displaystyle T AD 2T OSC 2 1 mu s 2 mu s lo cual esta dentro del rango permitido Una vez terminada la conversion el resultado se almacena en los registros ADRESH y ADRESL segun esten configurados en el bit 7 del registro ADCON1 La justificacion 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 elegira si se quieren los 8 primeros bits en el ADRESL y los dos restantes en el ADRESH o viceversa Generalmente la eleccion de la justificacion esta directamente emparentada con la resolucion que queremos leer es decir si se quiere conectar un potenciometro y segun la tension aumentar o disminuir el tiempo de parpadeo de un led se puede justificar a la izquierda y leer como resultado de la conversion solo los 8 bits del ADRESH y descartar o despreciar los dos bits de menor peso significativo que se guardaran en el ADRESL Pasos necesarios para la conversion A D Editar A modo de algoritmo los pasos necesarios para una correcta utilizacion del modulo A D son los siguientes Configurar el modulo A D Terminales de entrada analogica y de referencia Seleccionar el canal adecuado Seleccionar la velocidad de conversion Prender el conversor Setear el bit 0 del registro ADCON0 Empezar la conversion Setear el bit 1 del registro ADCON0 Esperar que el bit 2 del registro ADCON0 se ponga a 0 Leer el resultado en los registros ADRESH ADRESLEn estos pasos no se tiene en cuenta que se pueden necesitar mas de una conversion por distintos canales o bien que se realicen varias conversiones y luego tomar un promedio Esta ultima tecnica es muy usada cuando las variaciones de tension son rapidas y promediando tres o cuatro conversiones se tiene asi el resultado hasta que se realice una segunda conversion Acerca de la programacion de los dispositivos EditarLa familia de los PIC16F87X cuenta con un conjunto reducido de 35 instrucciones lo que facilita enormemente su memorizacion La mayoria de estas instrucciones se ejecutan en un solo ciclo de instruccion mientras que aquellas instrucciones que realizan saltos de ejecucion lo hacen en dos ciclos de instruccion Cada una de estas instrucciones se codifica en una palabra de 14 bits unica e inequivoca que conforman en conjunto lo que se conoce como codigo maquina del dispositivo Aunque podria emplearse directamente este codigo maquina para programar el dispositivo ya fuera en formato binario o en hexadecimal resultaria demasiado lento y complicado Por esta razon cada una de las instrucciones se representa de manera equivalente con un nemonico que es mas facil de recordar y de interpretar por el programador A este tipo de lenguaje de programacion se le llama lenguaje ensamblador Actualmente para la programacion de microcontroladores puede emplearse tanto el lenguaje ensamblador como lenguajes de mas alto nivel tipo C o Pascal empleando el compilador adecuado Los microcontroladores tienen un espacio de memoria que varia segun el modelo y este espacio de memoria es limitado Hay que tener en cuenta que a cada instruccion escrita en lenguaje de alto nivel le corresponderan por lo general varias instrucciones en lenguaje ensamblador lo que significa que un programa escrito en lenguaje de alto nivel ocupa mas espacio de memoria que uno escrito en lenguaje ensamblador Por este motivo la eleccion de uno u otro tipo de lenguaje a la hora de programar debera hacerse teniendo en cuenta el espacio de memoria disponible En caso de utilizar un lenguaje de alto nivel siempre se requerira compilar el programa terminado para obtener el archivo hexadecimal lenguaje maquina con el cual se programara el microcontrolador La programacion fisica del dispositivo se hara normalmente mediante un programador capaz de grabar el programa de usuario en la memoria del microcontrolador Ejemplo sencillo encender y apagar un LED EditarEl ejemplo propuesto ilustra como conectar un LED por medio de una resistencia limitadora de corriente a un terminal de salida de un PIC16F873 para que este se encienda al presionar un pulsador y se apague al soltarlo Circuito electrico Editar 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 Editar Para crear el programa que se grabara en el PIC se puede usar MPLAB que es el entorno de desarrollo gratuito ofrecido por el fabricante Microchip Technology Inc Basicamente este sencillo ejemplo se puede modelar con el siguiente pseudocodigo Inicio programa Repetir RA0 1 Si gt Encender LED No gt Apagar LED Fin Repetir Fin programa Ensamblador Editar Empleando MPLAB se genera el programa en lenguaje ensamblador a partir del pseudocodigo anterior El archivo generado debera tener la extension asm LIST P PIC16F873 Indica que Pic se usa INCLUDE P16F873 inc Agrega la definicion estandar de registros ORG 00h Comienza el programa en la direccion 00h Inicio bsf STATUS 5 Selecciona el banco 1 de memoria movlw 00h 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 PORTA 0 Comprueba el estado de RA0 goto Enciende Si esta en 1 salta a Enciende goto Apaga Si esta en 0 salta a Apaga Apaga bcf PORTB 0 Pone un 0 en RB7 goto Comienzo Salta a Comienzo Enciende bsf PORTB 0 Pone un 1 en RB7 goto Comienzo Salta a Comienzo end Fin del programa El simbolo permite escribir comentarios en el programa Inicio Comienzo Apaga y Enciende son etiquetas que ayudan a identificar una direccion de memoria del programa Estas se reemplazan por la direccion de memoria correspondiente En el programa se pueden observar las directivas comentadas instrucciones literales configuracion de registros etc Lenguaje maquina Editar Al compilar el archivo asm creado se obtienen varios archivos Uno de ellos con extension hex es el que se grabara en el PIC y contiene todas las instrucciones traducidas al lenguaje maquina del microcontrolador El archivo hex obtenido es el siguiente 020000040000FA 10000000831600308600FF308500831205180B2808 0A0010000928061006280614062829 00000001FFReferencias Editar a b c d e f g h i j k l m n n o p q Microcontroladores PIC Diseno practico de aplicaciones pagina 34 Microcontrolador PIC16F84 Desarrollo de proyectos 2ª edicion pagina 4 a b PIC16F87XA Datasheet PIC16F870 871 Datasheet PIC16F872 DatasheetBibliografia EditarMicrochip Technology Inc 2003 PIC16F870 871 Datasheet pdf en ingles p 170 Consultado el 31 de mayo de 2009 Microchip Technology Inc 2006 PIC16F872 Datasheet pdf en ingles p 166 Consultado el 31 de mayo de 2009 Microchip Technology Inc 2003 PIC16F87XA Datasheet pdf en ingles p 232 Consultado el 21 de mayo de 2009 Angulo Usategui Jose Maria S Romero Yesa I Angulo Martinez 2006 Microcontroladores PIC Diseno practico de aplicaciones 2ª edicion McGraw Hill ISBN 978 84 481 4627 6 La referencia utiliza el parametro obsoleto coautores ayuda Palacios Municio Enrique F Remiro L J Lopez 2005 Microcontrolador PIC16F84 Desarrollo de proyectos 2ª edicion Ra Ma ISBN 84 7897 691 4 La referencia utiliza el parametro obsoleto coautores ayuda Vease tambien EditarMicrochip Technology Inc PIC16F84 PIC16F88 MPLABEnlaces externos EditarWeb oficial de Microchip Technology Inc Datos Q5400222 Obtenido de https es wikipedia org w index php title PIC16F87X amp oldid 120193403, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos