Sei sulla pagina 1di 15

PIC16F87X

De Wikipedia, la enciclopedia libre Saltar a navegacin, bsqueda 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 fcilmente usando un dispositivo programador de PIC. Esta caracterstica facilita sustancialmente el diseo de proyectos, minimizando el tiempo empleado en programar los microcontroladores (C). Esta subfamilia consta de los siguientes modelos que varan de acuerdo a prestaciones, cantidad de terminales y encapsulados:
y y y y y y y

PIC16F870 PIC16F871 PIC16F872 PIC16F873A PIC16F874A PIC16F876A PIC16F877A

La "A" final de los modelos PIC16F873A, PIC16F874A, PIC16F876A y PIC16F877A indica que estos modelos cuentan con mdulos de comparacin analgicos.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 tamao 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 educacin y de entrenamiento.

Contenido
[ocultar]
y y y y

1 Caractersticas principales o 1.1 Detalles segn modelo 2 Tipos de encapsulado y nmero de terminales 3 Estructura interna 4 Circuitera externa auxiliar o 4.1 La alimentacin o 4.2 El reloj

y y y y y y

y y

y y y y

o 4.3 El circuito de reinicio 5 Memoria interna o 5.1 Memoria de datos SRAM 6 Registros de funciones especiales (SFR) o 6.1 El registro STATUS 7 El registro W 8 Set de instrucciones y sintaxis o 8.1 Tabla resumen de instrucciones 9 Registro de configuracin 10 El conversor analgico-digital o 10.1 Controlando el conversor A/D o 10.2 Conversin Terminada o 10.3 Pasos necesarios para la conversin A/D 11 Acerca de la programacin de los dispositivos 12 Ejemplo sencillo: encender y apagar un LED o 12.1 Circuito elctrico o 12.2 Programa  12.2.1 Ensamblador  12.2.2 Lenguaje mquina 13 Referencias 14 Bibliografa 15 Vase tambin 16 Enlaces externos

[editar] Caractersticas principales


Las caractersticas principales de estos dispositivos son:
y y y y y y y y y y y y y y

CPU de arquitectura RISC (Reduced Instruction Set Computer).1 Set de 35 instrucciones.1 Frecuencia de reloj de hasta 20MHz (ciclo de instruccin de 200ns).1 Todas las instrucciones se ejecutan en un nico ciclo de instruccin, excepto las de salto.1 Hasta 8K x 14 palabras de Memoria de Programa FLASH (ver tabla a continuacin).1 Hasta 368 x 8 bytes de Memoria de Datos tipo RAM (ver tabla a continuacin).1 Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM (ver tabla a continuacin).1 Hasta 15 fuentes de Interrupcin 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 voltage de operacin desde 2,0V a 5,5V.3 4 5 Conversor Analgico/Digital de 10 bits multicanal.1 3 Temporizadores.1

y y y y y

Watchdog Timer o Perro Guardin.1 2 mdulos de captura/comparacin/PWM.1 Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter).1 Puerto Paralelo Esclavo de 8 bits (PSP).1 Puerto Serie Sncrono (SSP) con SPI e IC.1

[editar] Detalles segn modelo


Memoria de programa Flash (palabras de 14 bits) Memoria de datos SRAM (bytes) Memoria de datos EEPROM (bytes) MSSP Lneas de E/S Canales A/D PWM SPI

Modelo

IC Maestr No No S S S S S

PIC16F870 PIC16F871 PIC16F872 PIC16F873A PIC16F874A PIC16F876A PIC16F877A

2048 2048 2048 4096 4096 8192 8192

128 128 128 192 192 368 368

64 64 64 128 128 256 256

22 33 22 22 33 22 33

5 8 5 5 8 5 8

1 1 1 2 2 2 2

No No S S S S S

[editar] Tipos de encapsulado y nmero 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 patitas en formatos PDIP, SOIC, SSOP y QFN, mientras que los dispositivos PIC16F871, PIC16F874A y PIC16F877A se fabrican en encapsulados de 40 patitas para formato PDIP, y en encapsulados de 44 patitas para formatos PLCC, QFP y QFN.

En los encapsulados de 28 patitas no est implementado el Puerto Paralelo Esclavo (PSP). Muchas de las patitas o terminales de estos dispositivos, como suele ocurrir en la mayoria de microcontroladores, tienen ms de una funcin (multiplexacin), dependiendo de cmo se configuren internamente por software. Los terminales VDD (tensin) y VSS (masa) sirven nicamente para alimentar al dispositivo.

[editar] Estructura interna


Estos microcontroladores tienen la memoria de programa y la memoria de datos separadas, lo que se conoce como arquitectura Harvard. Esta configuracin interna permite entre otras cosas acceder a las instrucciones de programa y a los datos simultneamente a travs de buses diferentes, lo que mejora notablemente la velocidad de proceso de estos dispositivos.

[editar] Circuitera externa auxiliar


Para que el microcontrolador sea capaz de funcionar en cualquier proyecto, se necesita al menos la siguiente circuitera externa:
y y

La alimentacin. El reloj (oscilador).

Tambin, y de manera opcional:


y

El circuito de reinicio.

[editar] La alimentacin
Los dispositivos de la familia PIC16F87X admiten un amplio rango de tensiones de alimentacin, que va de 2,0 V a 5,5 V. La tensin a la cual se alimenten determinar la frecuencia mxima de trabajo. La potencia mxima disipada es de 1 W y se calcula mediante la siguiente formula:

donde:
y y y y y

VDD es la tensin suministrada por la fuente de alimentacin. IOH es la corriente suministrada por las salidas del PIC en estado alto. IOL es la corriente absorbida por las salidas del PIC en estado bajo. VOH es la tensin entregada por los terminales en estado alto. VOL es la tensin presente en los terminales en estado bajo.

[editar] El reloj
El reloj u oscilador se utiliza para generar la base de tiempo del microcontrolador. Para la conexin del oscilador se emplean los terminales OSC1 y OSC2 del dispositivo. Los microcontroladores PIC16F87X emplean por cada ciclo de instruccin 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 instruccin) ser de:

La serie PIC16F87X puede trabajar a una frecuencia de reloj mxima de 20 MHz. Esto quiere decir que, a esta frecuencia, el tiempo necesario para ejecutar las instrucciones de un ciclo de instruccin es de 200 ns, y de 400 ns para las de dos ciclos de instruccin (instrucciones de salto). La seal de reloj puede generarse mediante una red resistencia-condensador, un cristal de cuarzo piezoelctrico o un resonador cermico, aunque empleando cristales de cuarzo se consiguen frecuencias de oscilacin muy exactas, lo cual es til para calcular tiempos de ejecucin, temporizaciones precisas, etc. Estos microprocesadores permiten escoger entre cinco tipos distintos de osciladores:
y y y y

LP (Low Power): reloj de bajo consumo, estable, con frecuencia de oscilacin de hasta 200 kHz. XT (Xtal, Crystal): estable, frecuencia de oscilacin de hasta 4 MHz. HS (High Speed): estable, frecuencia de oscilacin de hasta 20 MHz. RC (Resistor/Condensador): frecuencia de oscilacin dependiente de resistencia, condensador, voltaje de alimentacin y temperatura de trabajo. Es el tipo ms econmico, pero tambin el ms inestable. Externo: cuando la seal de reloj es externa, generada por otro circuito.

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

[editar] El circuito de reinicio


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

Lo ms prctico, 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 mayora 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 ms de 80 mA que podran bloquear el dispositivo cuando este se lleva a masa (reinicio).3 Debido a que el pulsador no produce una respuesta instantnea, 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). Tambin resulta muy efectivo el uso de un filtro pasa alto para hacer la seal de reinicio independiente del tiempo en que se presiona el pulsador. Inmediatamente despus de pulsar el pulsador el C se reinicia, sin tener en cuenta cunto tiempo se mantiene presionado dicho pulsador. Estas tcnicas de reinicio son muy efectivas, pero no son las nicas. Existe infinidad de circuitos y posibilidades para provocar el reinicio externo en los microcontroladores, adecundose cada solucin a la necesidad o al criterio de diseo del circuito y su funcin especifica.

[editar] Memoria interna


Existen tres bloques bien diferenciados de memoria. Estos son:
y y y

Memoria de programa EEPROM Flash: es el lugar fsico donde se guarda el programa de usuario. Es de tipo no voltil. Memoria de datos SRAM: es el lugar fsico donde se guardan datos. Es de tipo voltil. Memoria de datos EEPROM: es el lugar fsico donde se guardan datos. Es de tipo no voltil.

[editar] Memoria de datos SRAM


Esta memoria es de tipo voltil, lo que significa que no conserva su contenido despus de un apagado de alimentacin. En esta memoria se encuentran los registros de funciones especiales (SFR) y los registros de propsito 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.

[editar] 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 mayora 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 fsicamente siguen estando separados.

[editar] El registro STATUS


El registro de estado (STATUS) es uno de los ms importantes y empleados en el microcontrolador. Proporciona informacin acerca del resultado de operaciones aritmticas, operaciones lgicas y causa de reinicios, adems de permitir la seleccin del banco de memoria de datos.

[editar] El registro W
El registro de trabajo W (Working Register) es un registro relevante especial de 8 bits que participa en la mayora de instrucciones. A diferencia de los SFR, se encuentra dentro de la misma CPU, y puede ser accedido tanto para lectura como para escritura.

[editar] Set de instrucciones y sintaxis


Los PIC16F87X son microcontroladores RISC. Esto se refleja en que tienen un repertorio reducido de 35 instrucciones ortogonales (prcticamente todas las instrucciones pueden utilizar cualquier operando), stas son rpidas y todas tienen una longitud fija de 14 bits. Las instrucciones se pueden clasificar en:
y y y y y y y

Instrucciones de carga. Instrucciones de bits. Instrucciones aritmticas. Instrucciones lgicas. Instrucciones de salto. Instrucciones de manejo de subrutinas. Instrucciones especiales.

[editar] Tabla resumen de instrucciones

Sintaxis

Descripcin

Instrucciones de carga CLRF f CLRW MOVF f,d MOVWF f MOVLW k Borra el contenido del registro f Borra el contenido del registro W Mueve el contenido del registro f Mueve el contenido del registro W al registro f Guarda en el registro W el valor k

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

Instrucciones aritmticas ADDLW k ADDWF f,d DECF f,d INCF f,d SUBLW k SUBWF f,d Suma el valor k al registro W Suma el contenido del registro W con el de f Decrementa en una unidad el contenido del registro f Incrementa en una unidad el contenido del registro f Resta el valor k al registro W Resta el contenido del registro W al registro f

Instrucciones lgicas

ANDLW k ANDWF f,d COMF f,d IORLW k IORWF f,d RLF f,d RRF f,d SWAPF f,d XORLW XORWF f,d

Realiza la operacin lgica AND entre el valor k y el registro W Realiza la operacin lgica AND entre el contenido del registro W y el de f Niega el valor del registro f Realiza la operacin lgica OR entre el valor k y el registro W Realiza la operacin lgica OR entre el contenido del registro W y el de f Rota el contenido del registro f hacia la izquierda a travs del carry bit Rota el contenido del registro f hacia la derecha a travs del carry bit Intercambia los cuatro primeros bits con los cuatro ltimos del registro f Realiza la operacin lgica XOR entre el valor k y el registro W Realiza la operacin lgica XOR entre el contenido del registro W con el de f

Instrucciones de salto BTFSC f,b BTFSS f,b DECFSZ f,d INCFSZ f,d GOTO k Lee el bit b del registro f y salta la instruccin siguiente si est en 0 Lee el bit b del registro f y salta la instruccin siguiente si est en 1 Decrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero Incrementa en una unidad el contenido del registro f y salta la instruccin siguiente si es cero Salto incondicional a la etiqueta k

Instrucciones de manejo de subrutinas CALL k RETFIE RETLW RETURN Llamada a la subrutina k Retorno de una interrupcin Retorno de una subrutina con el valor k en el registro W Retorno de una subrutina

Instrucciones especiales CLRWDT NOP SLEEP Borra el temporizador del Watchdog No realiza ninguna operacin (pero consume tiempo de ejecucin) Se pone el PIC en estado de reposo (dormido)

En todas las instrucciones donde aparece una d como operando:


y y

Si d = 0, el resultado de la operacin se guarda en W. Si d = 1, el resultado de la operacin se guarda en el registro f. Es el valor por defecto.

[editar] Registro de configuracin


Estos microcontroladores cuentan con un registro especial llamado palabra de configuracin (Configuration Word) de 14 bits, que se encuentra en la direccin 2007h de la memoria de programa. Este registro debe escribirse durante el proceso de grabacin del microcontrolador ya que no puede ser modificado durante el tiempo de ejecucin de un programa. Su funcin es especificar ciertas caractersticas de funcionamiento del microcontrolador, como son:
y y y y y y y y y

Proteccin de memoria de programa. Uso del modo de depuracin en circuito. Permiso de escritura en memoria Flash. Proteccin de memoria EEPROM de datos. Uso de programacin en modo de bajo voltaje. Uso de reinicio por cada de tensin. Uso del temporizador de conexin de alimentacin. Uso del Watchdog. Tipo de oscilador empleado.

Existen dos formas de configurar estos bits: una de ellas es desde MPLAB, mediante la opcin Configuration bits del men configure. La otra es mediante la directiva _ _CONFIG dentro del programa ensamblador.

[editar] El conversor analgico-digital


El conversor analgico-digital (ADC en ingls) 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 nmero de canales de conversin 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 tcnica que utilizan estos dispositivos para la conversin es la de incremento y comparacin. Consiste en usar un registro auxiliar cuyo valor se compara con la entrada

analgica. Si es menor se incrementa el registro y se vuelve a comparar. As hasta que el valor del registro sea lo ms aproximado posible (pero sin pasarse) a la entrada analgica. El rango de voltaje aceptado para la conversin de la seal analgica es de 0 V a 5 V. Si se tiene que trabajar con una seal de mayor voltaje, basta con poner a la entrada del conversor un divisor de tensin correctamente calculado o bien trabajar con alguna tensin de referencia externa al C. La resolucin de la conversin es funcin de la tensin 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 alimentacin del dispositivo). Por ejemplo, si la tensin de referencia positiva (Vref+) es de 5 V y la tensin de referencia negativa (Vref-) es de 0 V, la resolucin es de 4,8 mV por cada bit. Una vez realizada la conversin, se obtienen un valor binario 0000000000 para 0 V y un valor binario 1111111111 para 5 V.

[editar] Controlando el conversor A/D


Los registros asociados al conversor A/D son:
y y y y

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

Como la resolucin 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 oscilacin del C. Los bits 3,4 y 5 sirven para elegir el canal de conversin. El bit 2 sirve para iniciar la conversin. Debe ponerse en nivel lgico alto (1) para comenzar el proceso de conversin. Automticamente, este bit pasar a nivel lgico bajo (0) cuando la conversin haya finalizado. El bit 1 no se usa. El bit 0 sirve para activar el mdulo de conversin. Si este bit est a nivel lgico bajo, el mdulo de conversin estar deshabilitado.

El registro ADCON1 es el encargado de definir qu patita del C usaremos como entrada analgica. 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 analgico externo. Este registro tambin es el responsable de la seleccin de la justificacin del resultado de la conversin (bit 7) y de configurar cual/es sern los terminales donde aplicaremos la tensin de referencia en caso de necesitarla.

[editar] Conversin Terminada


El tiempo que le toma al C realizar la conversin se denomina TAD y nunca debe ser menor que 1,6 s para la familia 16F87X. el tiempo TAD es configurado por software segn la relacin TAD = kTOSC donde K es el divisor de la frecuencia del conversor. Por ejemplo, si trabajamos con TOSC = 1 s y en los bits 7 y 6 del registro ADCON0 ponemos 00,quedar: TAD = 2TOSC = 2 * 1 s = 2 s lo cual est dentro del rango permitido. Una vez terminada la conversin, el resultado se almacena en los registros ADRESH y ADRESL segn estn configurados en el bit 7 del registro ADCON1. La "justificacin" a la derecha o izquierda es sencilla de comprender; se trata de guardar el resultado de 10 bits en dos registros de 8 bits c/u, 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 eleccin de la justificacin est directamente emparentada con la resolucin que queremos leer, es decir, si se quiere conectar un potencimetro y segn la tensin aumentar o disminuir el tiempo de parpadeo de un led, se puede justificar a la izquierda y leer como resultado de la conversin solo los 8 bits del ADRESH y descartar o despreciar los dos bits de menor peso significativo que se guardarn en el ADRESL.

[editar] Pasos necesarios para la conversin A/D


A modo de algoritmo los pasos necesarios para una correcta utilizacin del modulo A/D son los siguientes: 1. Configurar el mdulo A/D: 1. Terminales de entrada analgica y de referencia. 2. Seleccionar el canal adecuado. 3. Seleccionar la velocidad de conversin. 4. Prender el conversor: Setear el bit 0 del registro ADCON0 2. Empezar la conversin: Setear el bit 2 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 ms de una conversin por distintos canales o bien que se realicen varias conversiones y luego tomar un promedio. Esta ultima tcnica es muy usada cuando las variaciones de tensin son rpidas y promediando tres o cuatro conversiones se tiene as el resultado, hasta que se realice una segunda conversin.

[editar] Acerca de la programacin de los dispositivos


La familia de los PIC16F87X cuenta con un set reducido de 35 instrucciones, lo que facilita enormemente su memorizacin. La mayora de estas instrucciones se ejecutan en un solo ciclo de instruccin, mientras que aquellas instrucciones que realizan saltos de ejecucin lo hacen en dos ciclos de instruccin. Cada una de estas instrucciones se codifica en una palabra de 14 bits nica e inequvoca, que conforman en conjunto lo que se conoce como cdigo mquina del dispositivo. Aunque podra emplearse directamente este cdigo mquina para programar el dispositivo (ya fuera en formato binario o en hexadecimal), resultara demasiado lento y complicado. Por esta razn, cada una de las instrucciones se representa de manera equivalente con un nemnico, que es ms fcil de recordar y de interpretar por el programador. A este tipo de lenguaje de programacin se le llama lenguaje ensamblador. Actualmente, para la programacin de microcontroladores puede emplearse tanto el lenguaje ensamblador como lenguajes de ms alto nivel, tipo C o Pascal, empleando el compilador adecuado. Los microcontroladores tienen un espacio de memoria que vara segn el modelo y este espacio de memoria es limitado. Hay que tener en cuenta que a cada instruccin escrita en lenguaje de alto nivel le correspondern por lo general varias instrucciones en lenguaje ensamblador, lo que significa que un programa escrito en lenguaje de alto nivel ocupa ms espacio de memoria que uno escrito en lenguaje ensamblador. Por este motivo, la eleccin 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 mquina) con el cual se programar el microcontrolador. La programacin fsica del dispositivo se har normalmente mediante un programador, capaz de grabar el programa de usuario en la memoria del microcontrolador.

[editar] Ejemplo sencillo: encender y apagar un LED


El ejemplo propuesto ilustra cmo 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.

[editar] Circuito elctrico


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).

[editar] 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. Bsicamente este sencillo ejemplo se puede modelar con el siguiente pseudocdigo:
Inicio programa Repetir: RA0 = 1? Si --> Encender LED No --> Apagar LED Fin Repetir Fin programa

[editar] Ensamblador Empleando MPLAB, se genera el programa en lenguaje ensamblador a partir del pseudocdigo anterior. El archivo generado deber tener la extensin ".asm":
LIST P=PIC16F873 INCLUDE "P16F873.inc" estndar de registros ORG 00h la direccin 00h Inicio bsf STATUS,5 memoria movlw 00h movwf TRISB salida movlw 0ffh movwf TRISA entrada bcf STATUS,5 memoria Comienzo btfsc PORTA,0 RA0 goto Enciende "Enciende" goto Apaga "Apaga" Apaga bcf PORTB,0 goto Comienzo Enciende bsf PORTB,0 goto Comienzo end ;Indica que Pic se usa ;Agrega la definicin ;Comienza el programa en ;Selecciona el banco 1 de ;Guarda en W el n 0 ;Indica que el puerto B es ;Guarda en W el n 255d ;Indica que el puerto A es ;Selecciona el banco 0 de ;Comprueba el estado de ;Si est en 1 salta a ;Si est en 0 salta a ;Pone un ;Salta a ;Pone un ;Salta a ;Fin del 0 en RB7 Comienzo 1 en RB7 Comienzo programa

El smbolo ; permite escribir comentarios en el programa. Inicio, Comienzo, Apaga y Enciende son etiquetas que ayudan a identificar una direccin de memoria del programa. stas se reemplazan por la direccin de memoria correspondiente. En el programa se pueden observar las directivas comentadas, instrucciones, literales, configuracin de registros, etc. [editar] Lenguaje mquina Al compilar el archivo ".asm" creado se obtienen varios archivos. Uno de ellos, con extensin ".hex", es el que se grabar en el PIC, y contiene todas las instrucciones traducidas al lenguaje mquina del microcontrolador. El archivo ".hex" obtenido es el siguiente:
:020000040000FA :10000000831600308600FF308500831205180B2808 :0A0010000928061006280614062829 :00000001FF

Potrebbero piacerti anche