INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf ·...

36
INTEEC INNOVACIÓN TECNOLÓGICA ELECTRÓNICA ESTUDIANTIL EN CIENCIAS TUTORIAL PIC’S Resumen elaborado por: Moctezuma Eugenio Juan Carlos Sánchez Rodríguez Jose Luis B. Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Transcript of INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf ·...

Page 1: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

INNOVACIÓN TECNOLÓGICA ELECTRÓNICA

ESTUDIANTIL EN CIENCIAS

TUTORIAL PIC’S

Resumen elaborado por: Moctezuma Eugenio Juan Carlos

Sánchez Rodríguez Jose Luis B.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 2: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

1.- INTRODUCCIÓN

Desde la invención del circuito integrado, el desarrollo constante de la electrónica digital ha dado lugar a dispositivos cada vez mas complejos. Entre ellos los microprocesadores y los microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica.

El objetivo principal del manual es que el usuario logre un entendimiento mas a fondo de los microcontroladores y obtenga los conocimientos necesarios para la programación de estos dispositivos y para el diseño de sistemas digitales y/o analógicos basados en ellos.

Se pretende explicar conceptos que ya han sido probados y aceptados, considerando que su vigencia se mantendrá en un periodo mas o menos largo. El manual se desarrolla alrededor los microcontroladores PIC16F874/877, mas esta limitación no se considera importante, ya que si se comprende a fondo un microcontrolador, los demás pueden aprenderse con facilidad partiendo de la estructura del primero. Además, el estudio de un microcontrolador particular elimina la posibilidad de una presentación superficial o confusa y permite al usuario enfrentarse al problemas reales en la practica.

Para estar al tanto de las innovaciones se recomienda que el usuario se mantenga en contacto con la pagina electrónica de Microchip Technology, http://www.microchip.com, solo así podrá obtener un conocimiento completo y actualizado, tanto de los aspectos que aquí se tratan, como de los nuevos que vayan surgiendo.

La forma de estructurar los temas responde a la experiencia de que, para el usuario que por primera ocasión estudia microcontroladores, resulta mas sencillo aprender primero a lo referente a la construcción interna del dispositivo y la arquitectura general de los microcontroladores y una vez dominada pasar entonces a los detalles electrónicos de la circuiteria y la programación. Sin embargo el manual en si mismo no exige que se siga este orden, sino por el contrario tiene la flexibilidad para que se puedan adoptar otras modalidades en la secuencia, generando así mayor interés en el usuario.

A diferencia del procesamiento de aplicaciones, tal es el caso de las PC’s y Workstations, el control de los elementos mediante computo requiere que existan dispositivos de control dentro de las aplicaciones. Al usuario del producto solo le interesa que es lo que necesita saber para utilizar la interfaz que se le presente (keypads, teclados, comandos), siempre y cuando funcione y/o cumpla con sus expectativas y objetivos.

En muy pocas ocasiones el usuario final conoce (o le interesa conocer) que sistema de control es el que se encuentra incrustado en su aplicación (a diferencia de las personas que adquieren una PC, que se preocupa del tipo de procesador, memoria, velocidad de reloj, etc.).

Así es que, de cualquier forma, es vital para la mayoría de los diseñadores de aplicaciones con elementos de control dentro de ellas, seleccionar los dispositivos y las compañías mas indicadas de controladores. Los productos de control incrustado se encuentran en la mayoría de los sectores del mercado: sector comercial, consumibles, periféricos de computadoras, telecomunicaciones (incluyendo los productos de telecomunicación personal de emergencia), automotriz, automotiva e industrial. La mayoría de los productos de control incrustado deben satisfacer requerimientos especiales: eficiencia, bajo costo, baja potencia y un alto nivel de integración en los sistemas.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 3: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

1.1 ¿Qué es un PIC? La palabra PIC significa Circuito Integrado Programable, y se

trata de un microcontrolador, estos dispositivos electrónicos constan de miles de elementos lógicos e interconexiones y están diseñados para responder a las instrucciones de un programa.

Un microcontrolador es un dispositivo digital que acepta o lee datos aplicados a cierto numero de líneas de entrada, los procesa de acuerdo a las instrucciones secuenciales de un programa almacenado en su memoria y suministra o escribe los resultados del proceso en un cierto numero de líneas de salida.

Los datos de entrada pueden provenir de interruptores, sensores, convertidores A/D, teclados etc. Los datos de salida pueden ser dirigidos a actuadores, displays, pantallas, convertidores D/A, etc. El programa almacenado determina como deben ser procesados los datos de entrada y, en consecuencia, que información debe enviarse a las líneas de salida.

Para un microcontrolador, la función primaria de este es ejecutar programas, sin un programa que le dé vida, un microcontrolador y todo el hardware desarrollado a su alrededor no tendrían un propósito especifico. Las funciones realizadas por un microprocesador quedan definidas por un conjunto de instrucciones. El trabajo del programador consiste, precisamente, en elaborar programas, es decir en combinar estas instrucciones, que son relativamente simples, de una manera lógica con el fin de permitir que el microcontrolador lleve a cabo la tarea final deseada.

La interacción armónica del Hardware y el software es el que confiere a los sistemas basados en su potencia y versatilidad. De esta manera, es posible que un mismo circuito pueda, por ejemplo, pasar de un sistema de alarma a convertirse en un juego de luces con solo cambiar el programa almacenado en su memoria y algunos elementos externos e, incluso, realizar ambas funciones. 1.2 Programa (Lenguaje De Maquina)

Un programa es una lista completa de instrucciones que se le proporciona al microcontrolador para que realice operaciones simples en un orden determinado. Las instrucciones que constituyen un programa se almacenan en la memoria del sistema como patrones de 1’s y 0’s, organizados en grupos de 8, 16, 32, etc. bits, dependiendo de la longitud de la palabra de datos del microcontrolador.

Para ejecutar un programa, un microcontrolador debe tener almacenado en forma binaria(patrones de 1’s y 0’s) en posiciones adyacentes de la memoria del sistema. Esta forma binaria del programa se denomina lenguaje de maquina y es el único lenguaje que el microcontrolador entiende. La siguiente figura muestra la conversión de lenguaje ensamblador a lenguaje de maquina. 1.3 Subrutinas Se puede decir que una subrutina es un programa dentro de otro programa y es autosuficiente, es decir, que contiene el conjunto de códigos para realizar la tarea asignada. En otras palabras, una subrutina es una parte de un programa principal que puede ser llamado desde otras partes del mismo o, incluso, por otras subrutinas con el fin de realizar una tarea especifica.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 4: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

1.4 Diagramas de flujo Mediante un diagrama de flujo, un problema dado se puede

representar en forma grafica y sencilla, dibujando los pasos que requiere una solución y el orden en que deben de ejecutarse. Estos diagramas son mucho más claros y fáciles de comprender que las instrucciones escritas en lenguaje ensamblador.

1.5 Familias de PIC’S

Existe una gran variedad de familias de PIC’S, a continuación se mencionan algunas: 12C5XX

12C67X

16C71X

16F7X

16F87X Se nota que entre las familias existen dos tipos, la letra C en la familia 12CXXX y la letra F en la familia l6F87X significa que se trata de un PIC con memoria FLASH. La familia de PIC’S a tratar en este tutorial será la 16F87X, en particular los PIC’S 16F874 Y 16F877. Como se había dicho el PIC es un Circuito Integrado Programable y en si se trata de un microcontrolador, que por lo mencionado anteriormente tiene memoria, diferentes módulos, y que necesita de un programa para realizar una tarea particular que se le asigne. Comenzaremos en la siguiente sección a ver la estructura interna del PIC.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 5: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

2.- Estructura del PIC 16F877/74

2.1 Diagramas del los PIC’s: El diagrama de pines de estos PIC’S es el siguiente:

Este PIC existe con velocidad de operación de 4 y 20 MHz. Basta con aprender 35

instrucciones básicas para poder programar un PIC y asignarle una tarea especifica. Este dispositivo tiene tres tipos de memoria, memoria de programa FLASH, memoria de datos, y una memoria de programa EEPROM., puertos de entrada salida, un registro de trabajo llamado W, un convertidor analógico-digital de 10 bits, timers entre otros bloques mas. La siguiente tabla muestra algunas características de estos dos dispositivos: CARACTERÍSTICA/PIC 16F874 16F877

Frecuencia de operación 4-20 MHZ 4-20MHZ Memoria de Programa FLASH (14-bits words) 4 k 8 k Memoria de datos(bytes) 192 bytes 368 bytes Memoria de datos EEPROM 128 bytes 256 bytes Interrupciones 14 14 Puertos I/O PORTS A,B,C,D,E PORTS A,B,C,D,E Timers 3 3 Captura/comparación/modulos PWM 2 2 Comunicación serial MSSP, USART MSSP, USART

Comunicación paralela PSP PSP

Convertidor A/D de 10-bits 8 canales de entrada 8 canales de entrada

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 6: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

La siguiente figura muestra el diagrama a bloques del PIC 16F874/77 de 40 pines:

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 7: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

2.2 Organización de la memoria

Existen tres bloques de memoria en estos dispositivos. La memoria de programa FLASH, EEPROM y la memoria de datos o de registro.

2.2.1 Organización de la memoria de programa El PIC 16F877 tiene 8k x 14 palabras de memoria de programa FLASH y el PIC

16F874 tiene 4k x 14.El vector de reset se encuentra en la dirección 0000h y el vector de interrupción de encuentra en la dirección 0004h. Por lo que en la memoria de programa se encuentran reservadas las primeras 5 localidades de memoria y se debe de empezar a programar el PIC a partir de la dirección 0005h.

MAPA DE MEMORIA DEL PIC 16F877 MAPA DE MEMORIA DEL PIC 16F874

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 8: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

2.2.2 Organización de la memoria de datos o registro. La memoria de datos esta repartida en diferentes bancos de memoria, en donde se

encuentran los registros de propósito general y los registros de funciones especiales. Uno de los registros de funciones especiales el más importante es el registro STATUS, con el cual podemos seleccionar un banco especifico.

Cada banco se extiende hasta 7Fh(128 bytes). Las ubicaciones mas bajas se reservan para los registros de funciones especiales, en las ubicaciones mas latas se encuentran los registros de propósito general los cuales están implementados con memoria RAM estática. 2.2.3 Registros propósito general

Los registros de propósito general pueden ser accesados directa o indirectamente, por el FSR (File Selector Register) y son los que contienen los datos u operandos que se desee. Los bancos de memoria de los PIC'S se muestran en las siguientes figuras, cabe hacer notar que las localidades de los registros de funciones especiales están reservadas. Y no pueden ser utilizadas al realizar el programa para el PIC.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 9: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 10: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

2.2.4 Registros de funciones especiales

Los registros de funciones especiales son registros usados por el CPU y módulos periféricos para controlar la operación deseada del dispositivo. Estos registros son implementados con RAM estática. La siguiente tabla muestra una lista de registros de funciones especiales o especificas.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 11: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

2.3 El registro STATUS

El registro STATUS es uno de los más importantes, cuenta el estado de la aritmética de la ALU, y el RESET status y los bits para la selección del banco de trabajo de la memoria de datos o registro.

Cuenta con 8 bits y se encuentra en la dirección 0x03, y cuenta con los bits IRP, RP1, RP0, T0’, PD, Z, DC, C, los bits, Z, DC y C son afectados por operaciones realizadas en otros registros.

El siguiente diagrama muestra los bits del registro.

Bit<7> Se usa para definir en que banco estaremos.(Direccionamiento directo) 1-Banco 2,3 0-Banco 0,1

Bit<5 y 6> Se usan para seleccionar el banco de trabajo 11-Banco 3 10-Banco 2 01-Banco 1 00-Banco 0

Bit<4> Time Out Bit 1 0

Bit<3> Relacionado con el perro guardián (WDT) Bit<2> Z: Se usa para comparar valores de los registros

1-Una operación realizada fue cero 0-La operación realizada fue diferente de cero

Bit<1> DC: Digito de acarreo 1-Cuando un nibble arroja un acarreo 0-El nibble no arroja acarreo

Bit<0> C: Acarreo 1-Existe un desbordamiento entre bytes 0-No existe el desbordamiento Este registro de función especial es de los más importantes, en

las hojas de datos de MICROCHIP están desglosados los demás registros de funciones especiales, es recomendable revisarlos, estas hojas están disponibles en www.microchip.com

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 12: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

3. PUERTOS DE ENTRADA SALIDA I/O

Algunos de los pines para los puertos de I/O pueden ser multiplexados para una función alterna de acuerdo a las características del dispositivo. En general, cuando un periférico es habilitado, ese pin puede no ser usado como un pin de propósito general I/O

Los PIC’S aquí tratados tienen cinco puertos de entrada salida, los cuales son el Port A, Port B, Port C, Port D y el Port E, estos se identifican en el diagrama de bloques así como también en el diagrama de Pines, cada uno de ellos tiene su registro de configuración llamado TRIS ubicados en el banco 1.

3.1 PORTA y su registro de configuración TRISA PORTA es un puerto bi-direccional de 6 bits. El correspondiente registro de

configuración es el TRISA. Estableciendo con un uno a un bit del TRISA equivale a que ese pin sea una entrada, si se establece un cero indica que ese pin será una salida.

*Programa de inicialización del puerto A

BCF STATUS, RP0 ; BCF STATUS, RP1 ; Bank0 CLRF PORTA ; Initialize PORTA by

; clearing output ; data latches

BSF STATUS, RP0 ; Select Bank 1 MOVLW 0x06 ; Configure all pins MOVWF ADCON1 ; as digital inputs MOVLW 0xCF ; Value used to

; initialize data ; direction

MOVWF TRISA ; Set RA<3:0> as inputs ; RA<5:4> as outputs ; TRISA<7:6> are always ; read as ’0’.

Este Puerto se encuentra en el diagrama de pines, entre el pin 2 y el pin 7, la

característica importante de este puerto es que puede ser de entradas analógicas y digitales, y solo salidas digitales. Los 6 canales se pueden configurar como entradas analógicas, o digitales o bien como combinaciones de ambas. Es importante mencionar que un puerto pude ser configurado como la mitad entradas y la otra mitad salidas o bien de la forma en que se desee.

Los siguientes puertos tienen un ancho de 8 bits y solo pueden ser entradas y salidas analógicas. Cabe destacar que estos puertos tienen otro tipo de funciones que de momento no seran explicadas aquí.

El puerto B El puerto C El puerto D El puerto E

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 13: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

4. INTRUCIONES PARA PROGRAMAR UN PIC

Con lo que se aprendió en las secciones anteriores es suficiente para comenzar a ver la estructura general de un programa para un PIC, para esto es necesario aprender 35 instrucciones básicas, las cuales se manipularan de acuerdo a las necesidades que se tengan para realizar un programa que haga que el PIC realice una tarea especifica.

4.1 Resumen de instrucciones Cada instrucción de PIC16FXXX es una palabra de 14 bits dividida en un OPCODE

que especifica el tipo de instrucción y uno o más operandos adicionales que especifican la operación de la instrucción. Las instrucciones de PIC16F8XX se muestran en un resumen en la Tabla 1 siguiente, existen instrucciones orientadas a bytes, orientadas a bits, literales y operaciones de control. La tabla 2 muestra el formato general de las instrucciones.

TABLA 1 Descripción de campos de OPCODE

Como ya se menciono las instrucciones estas, agrupadas en tres categorías basicas.

Operaciones orientadas a bytes Operaciones orientadas a bits Operaciones a literales o control

En todos los ejemplos, el siguiente formato representa un numero hexadecimal. 0xhh

donde h significa que es un digito hexadecimal.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 14: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Tabla 2 muestra el formato general de las instrucciones.

Resumen de instrucciones del PIC Veamos la descripción de cada una de estas intrusiones, pero recuerde lo siguiente

hoy en día un buen programador es aquel que mas que “saber” es el que “sabe encontrar la información” en poco tiempo. Así que no es necesario ni recomendable aprenderse las instrucciones de memoria.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 15: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 16: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

4.2 DESCRIPCION DE LAS INSTRUCCIONES ADDWF Suma W y f Sintaxis: [label] ADDWF f,d Operandos: d=0 ó d=1; 0 <= f <= 31 Operación: (W) + (f) --> (dest) Flags afectados: C, DC, Z Descripción: Suma el contenido del registro W y el registro "f". Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1 el resutado se almacena en el registro "f". Ejemplo: ADDWF REG,0 Antes de la instrucción: W= 0x17 REF= 0xC2 Después de la instrucción: W= 0xD9 REG= 0xC2 ANDWF W AND f Sintaxis: [label] ANDWF f,d Operandos: d=0 ó d=1; 0 <= f <= 31 Operación: (W) AND (f) --> (dest) Flags afectados: Z Descripción: Realiza la operación lógica AND entre el registro W y el registro "f". Si "d" es 0 el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el registro "f". Ejemplo: ANDWF REG,1 Antes de la instrucción: W=0x17 REG= 0xC2 Después de la instrucción: W=0x17 REG= 0x02 ANDLW W AND literal Sintaxis: [label] ANDWL k Operandos: 0 <= k <= 255 Operación: (W) AND (k) --> (W) Flags afectados: Z

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 17: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Descripción: Realiza la operación lógica AND entre el registro W y la constante "k". El resultado se almacena en el registro W. Ejemplo: ANDLW 0x5F Antes de la instrucción: W= 0xA3 Después de la instrucción: W= 0x03 BCF Borra un bit Sintaxis: [label] BCF f,b Operandos: 0 <= f <= 31; 0 <= b <= 7; Operación: 0 --> (f < b >) Flags afectados: Ninguno Descripción: Borra el bit "b" del registro "f". Ejemplo: BCF REG,7 Antes de la instrucción: REG = 0x0A Después de la instrucción: REG = 0x47 BSF Activa un bit Sintaxis: [label] BSF f,b Operandos: 0 <= f <= 31; 0 <= b <= 7; Operación: 1 --> (f < b >) Flags afectados: Ninguno Descripción: Activa el bit "b" del registro "f". Ejemplo: BSF REG,0x0A Antes de la instrucción: REG = 0x0A Después de la instrucción: REG = 0x8A BTFSC Test de bit y salto Sintaxis: [label] BTFSC f,b Operandos: 0 <= f <= 31; 0 <= b <= 7; Operación: Salto si (f < b >) = 0

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 18: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Flags afectados: Ninguno Descripción: Si el bit "b" del registro "f" es 0, se salta una instrucción y se continúa con la ejecución. Ejemplo: COM BTFSC REG,1 FALSE GOTO PROCESA_X TRUE ° PC= Dirección (COM_) Antes de la instrucción: SI REG <1> = 0 PC= Dirección (TRUE) Después de la instrucción: SI REG <1> = 1 PC= Dirección (FALSE) BTFSS Test de bit y salto Sintaxis: [label] BTFSS f,b Operandos: 0 <= f <= 31; 0 <= b <= 7; Operación: Salto si (f < b >) = 1 Flags afectados: Ninguno Descripción: Si el bit "b" del registro "f" es 1, se salta una instrucción y se continúa con la ejecución. Ejemplo: COM BTFSS REG,6 FALSE GOTO PROCESA_X TRUE ° PC= Dirección (COM_) Antes de la instrucción: SI REG <6> = 0 PC= Dirección (FALSE) Después de la instrucción: SI REG <6> = 1 PC= Dirección (TRUE) CALL Salto a subrutina Sintaxis: [label] CALL k Operandos: 0 <= k <= 255 Operación: (PC) + 1 --> stack; k --> PC Flags afectados: Ninguno Descripción: Salto a subrutina. La dirección de retorno se guarda en el stack. La constante "k" de 8 bits forma la dirección de salto y se carga en los bits <7:0> del PC. Los bits <10:9> del PC se cargan con los bits <6:5> del registro "STATUS". PC <8> se pone a 0.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 19: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Ejemplo: ORG CALL DESTINO Antes de la instrucción: PC = ORG Después de la instrucción: PC = DESTINO CLRF Borra un registro Sintaxis: [label] CLRF f Operandos: 0 <= f <= 32 Operación: 00f --> (f); 1 --> Z Flags afectados: Z Descripción: Se borra el contenido del registro "f" y el flag Z de estado se activa. Ejemplo: CLRF REG Antes de la instrucción: REG = 0x5A Después de la instrucción: REG = 0x00 Z = 1 CLRW Borra el registro W Sintaxis: [label] CLRW Operandos: Ninguno Operación: 00h --> W; 1 --> Z Flags afectados: Z Descripción: El registro de trabajo "W" se carga con 00h. El flag de Z se activa. Ejemplo: CLRW Antes de la instrucción: W = 0x5A Después de la instrucción: W = 0x00 Z = 1 CLRWDT Borra el "watchdog" Sintaxis: [label] CLRWDT Operandos: Ninguno Operación: 00h --> WDT; 1 --> TO; 1 --> PD;

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 20: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Flags afectados: TO, PD Descripción: Esta instrucción borra tanto el "watchdog" como el prescaler. Los bits TO y PD del registro de estado se ponen a "1". Ejemplo: CLRWDT Después de la instrucción: Contador WDT = 0 Prescaler WDT = 0 Bit de estado TO = 1 Bit de estado PD = 1 COMF Complementa f Sintaxis: label COMF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: (f) --> (dest) Flags afectados: Z Descripción: El contenido del registro "f" se complementa. Si "d" es 0 el resultado "R" se almacena en el registro W. Si "d" es 1, el resultado "R" se almacena en el registro "f". DECF Decremento de f Sintaxis: [label] DECF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: (f) - 1 --> (dest) Flags afectados: Z Descripción: Se decrementa en una unidad el contenido del registro "f". Si "d" es 0, el resultado se almacena en W. Si "d" es 1, el resultado se almacena en "f". Ejemplo: DEC CONT, 1 Antes de la instrucción: CONT = 0x01 Z = 0 Después de la instrucción: CONT = 0x00 Z = 1 DECFSZ Decremento y salto Sintaxis: [label] DECFSZ f,d Operandos: 0 <= f <= 32; d = 0 ó d = 1 Operación: (f) - 1 --> d; Salto si R = 0 Flags afectados: Ninguno

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 21: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Descripción: El contenido del registro "f" se decrementa. Si "d" es 0, el resultado "R" se coloca en el registro W. Si "d" es 1, el resultado "R" se coloca en el registro "f". Si R = 0, se salta la siguiente instrucción y se continúa con la ejecución. Ejemplo: COM_ DECFSZ REG,O PC = Dirección (COM_) GOTO_NO_ES_0 REG = REG - 1 Antes de la instrucción: SI REG = 0 PC = Dirección CONTINUA Después de la instrucción: SI REG != 0 PC = Dirección (COM_ + 1) GOTO Salto incondicional Sintaxis: [label] GOTO k Operandos: 0 <= k <= 511 Operación: k --> PC --> <8:0> Flags afectados: Ninguno Descripción: Se trata de un salto incondicional. Los 9 bits de la constante "k" que forman la instrucción, se cargan en los bits <8:0> del PC y forman la dirección de salto. Los bits <10:9> del PC se cargan con los bits <6:5> del registro de estado. Ejemplo: ORG GOTO DESTINO Antes de la instrucción: PC = 0 Después de la instrucción: PC = DESTINO INCF Incremento de f Sintaxis: [label] INCF f,d Operandos: 0 <= k <= 31; d = 0 ó d = 1 Operación: (f) + 1 --> (dest) Flags afectados: Z Descripción: Incrementa en una unidad el contenido del registro "f". Si "d" es 0, el resultado se almacena en W. Si "d" es 1, el resultado se almacena en "f". Ejemplo: INCF CONT,1 Antes de la instrucción:

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 22: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

CONT = 0xFF Z = 0 Después de la instrucción: CONT = 0x00 Z = 1 INCFSZ Incremento de f, si es 0 salta Sintaxis: [label] INCFSZ f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: (f) + 1 --> (dest); Salto si R = 0 Flags afectados: Ninguno Descripción: Incrementa en una unidad el contenido del registro "f". Si "d" es 0, el resultado se almacena en W. Si "d" es 1, el resultado se almacena en "f". Si R=0, se salta la siguiente instrucción y se continúa con la ejecución. Ejemplo: COM_ INCFSZ REG,1 GOTO_NO_ES_0 PC = Dirección (COM_) CONTINUA CONT + 1 Antes de la instrucción: SI CNT = 0 PC = Dirección CONTINUA Después de la instrucción: SI REG != 0 PC = Dirección (COM_ + 1) IORLW W OR literal Sintaxis: [label] IORLW k Operandos: 0 <= f <= 255 Operación: (W).OR.(k) --> (W) Flags afectados: Z Descripción: Se realiza la función lógica OR entre el registro W y la contante "k". El resultado se almacena en el registro W. Ejemplo: IORLW Ox35 Antes de la instrucción: W = 0x9A Después de la instrucción: W = 0xBF

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 23: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

IORWF OR entre W y f Sintaxis: [label] IORWF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: (W).OR.(f) --> (dest) Flags afectados: Z Descripción: Realiza la operación lógica OR entre el registro W y el registro "f". Si "d" es 0 el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacen en el registro "f". Ejemplo: IORWF REG,0 Antes de la instrucción: RESULTADO = 0x13 W = 0x91 Después de la instrucción: RESULTADO = 0x13 W = 0x93 Z = 0 MOVF Mover a f Sintaxis: [label] MOVF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: (f) --> (dest) Flags afectados: Z Descripción: El contenido del registro "f" se mueve al destino "d". Si "d" es 0, el destino es el registro w. Si "d" es 1, el destino es el propio registro "f". Esta posibilidad permite verificar dicho registro ya que el flag Z queda afectado. Ejemplo: MOVF REG,0 Después de la instrucción: W = REG MOVLW Carga un literal en W Sintaxis: label MOVLW k Operandos: 0 <= f <= 255 Operación: (k) --> (W) Flags afectados: Ninguno Descripción: El registro W se carga con el valor de 8 bits expresado mediante la literal "k". Ejemplo: MOVLW 0x5A Después de la instrucción: W = 0x5A

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 24: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

MOVWF Mover W a f Sintaxis: label MOVWF f Operandos: 0 <= f <= 31 Operación: (W) --> (dest) Flags afectados: Ninguno Descripción: Mueve el contenido del registro W al registro "f". Ejemplo: MOVWF REG Antes de la instrucción: REG = 0xFF W = 0x4F Después de la instrucción: REG = 0x4F W = 0x4F NOP No operar Sintaxis: [label] NOP Operandos: Ninguno Operación: No operar Flags afectados: Ninguno Descripción: No realiza operación alguna. Consume un ciclo de instrucción. Ejemplo: NOP RETLW Retorno, carga W Sintaxis: [label] RETLW k Operandos: 0 <= f <= 255 Operación: (k) --> (W); TOS --> PC Flags afectados: Ninguno Descripción: El registro W se carga con los 8 bits de la constante k. El PC se carga con el contenido de la cima stack (TOS): dirección de retorno. Esta instrucción consume dos ciclos. Ejemplo: MOVLW CTE ;dependiendo la cte es el número de lugares que va a bajar PC en la tabla CALL TABLA ;contiene el offset ;de la tabla. TABLA ;Ahora W tiene el valor de la tabla

ADDWF PC ,1 ;W offset, si w tiene un 3 entonces va a bajar tres lugares el PC RETLW K1 ;comienza tabla RETLW K2 RETLW Kn ;Fin de la tabla

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 25: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Antes de la instrucción: PC PC Después de la instrucción CALL: PC + 1 TOS

TABLA PC Después de la instrucción RETLW: TOS PC Ki w RLF Rota f a la izquierda Sintaxis: [label] RLF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: Rotación a la izquierda de f Flags afectados: C Descripción: El contenido del registro "f" se rota una posición a la izquierda. El bit de más peso pasa al carry y el carry se introduce por el bit de menos peso de "f". Si "d" es 0, el resultado se coloca en el registro W. Si "d" es 1, el resultado queda en el registro "f". Ejemplo: RLF REG1,0 Antes de la instrucción: REG1 = 11100110 C = 0 Después de la instrucción: REG1 = 11100110 W = 11001100 C = 1 RRF Rota f a la derecha Sintaxis: [label] RRF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: Rotación a la derecha Flags afectados: C Descripción: El contenido del registro "f" se rota a la derecha. El bit de menos peso de "f" pasa al flag carry. El carry se coloca en el bit de más peso de "f". Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en "f". Ejemplo: RRF REG1 Antes de la instrucción: REG1 = 11100110 C = 0 Después de la instrucción: REG1 = 11100110 W = 01110011 C = 0

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 26: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

SLEEP Pasa a estado de reposo Sintaxis: [label] SLEEP Operandos: Ninguno Operación: ooh --> WDT; 0 --> WDT prescaler; 1 --> TO; 0 --> PD Flags afectados: TO, PD, GPWUF Descripción: Al salir, activa el bit de estado TO y borra el PD. El WDT y el prescaler se borran. Al entrar en el modo SLEEP, se detiene el oscilador. Ejemplo: SLEEP SUBWF Resta f - W Sintaxis: [label] SUBWF f,d Operandos: 0 <= f <= 32; d = 0 ó d = 1 Operación: (f) - (W) --> (dest) Flags afectados: C, DC, Z Descripción: Resta, por el método del complemento a 2, el contenido del registro "f" menos el contenido del registro W. Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el registro "f". Si el resultado es negativo, el carry se pone a 0. Ejemplo: SUBWF REG,1 Antes de la instrucción: REG = 1 W = 2 Después de la instrucción: REG = 0xFF W = 0xFF SWAPF Intercambio de f Sintaxis: [label] SWAPF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: (f<3:0>) --> (dest.<7:4>)

(f<7:4>) --> (dest.<3:0>) Flags afectados: Ninguno Descripción: Los cuatro bits de más peso del registro "f" se intercambian con los cuatro bits de menos peso del mismo registro. Si "d" es 0, el resultado se coloca en el registro W. Si "d" es 1, el resultado queda en el registro "f". Ejemplo: SWAPF REG,0 Antes de la instrucción: REG = 0x5A

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 27: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Después de la instrucción: REG = 0x5A W = 0xA5 XORLW W XOR literal Sintaxis: [label] XORLW k Operandos: 0 <= k <= 255 Operación: (W).XOR.K --> (W) Flags afectados: Z Descripción: Realiza la función lógica OR exclusiva (EOR) entre el contenido del registro W y la constante "k" de 8 bits. El resultado se almacena en el registro W. Ejemplo: XORLW 0xAF Antes de la instrucción: W = 0xB5 Después de la instrucción: W = 0x1A XORWF W XOR f Sintaxis: [label] XORWF f,d Operandos: 0 <= f <= 31; d = 0 ó d = 1 Operación: (W).XOR.(f) --> (dest.) Flags afectados: Z Descripción: Realiza la función lógica OR exclusiva (EOR) entre el contenido del registro W y el registro "f". Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1 el resultado se almacena en el registro "f". Ejemplo: XORWF REG,1 Antes de la instrucción: REG = 0xAF W = 0xB5 Después de la instrucción: REG = 0x1A W = 0xB5

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 28: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

MÁS REGISTROS DE FUNCIONES ESPECIALES. REGISTRO OPTION u OPTION_REG (Dirección 81h,181h) El Registro de OPTION_REG es un registro que puede ser leído o escrito y que contiene varios bits de control para configurar la asignación del preescaler al TMR0 o al WDT, la interrupción externa, el TMR0 y las resistencias de pull-up del PORTB. Nota.- Asignar el preescaler como 1: 1 al registro TMR0, asigna el preescaler al Watchdog.

Bit 7: #RBPU: Resistencia de Pull-up en, el PORTB

1=Resistencia de Pull-up desactivada 0= Resistencia de Pull-up activada

bit6 1:INTEDG:, Flanco, de control de interrupciones 1:Interrupción por flanco ascendente en el pin RB0/INT, 0:Interrupción por flanco: descendente en el pin RB0/INT bit 5: T0SC. Selección del tipo de Reloj para TMRO

1 = Los pulsos se introducen a través del, pin RA4/TOCK1 0 = Los Pulsos de reloj internos- Fosc/4

bit 4: T0SE: Tipo de flanco para TMR0

1 = Incremento de TMR0 en cada flanco, descendente por el pin RA4/TOCKI 0 = Incremento de TMR0 en cada flanco ascendente :por el pin RA4/TOCKI

bit 3: PSA:, Asignación del Preescaler

1 = El preescaler se le asigna al WDT 0 = El preescaler se le asigna al TMR0

bit 2-0: PS2:PS0: Rango de actuación del preescaler

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 29: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

REGISTRO INTCON (Dirección 0Bh, 8Bh, l0Bh, 18Bh) El registro INTCON es un registro de lectura y escritura que contiene los bit de habilitación de interrupciones por desbordamiento de TMR0 por cambio de nivel en el PORTB e interrupciones externas por la línea RBO/INT.

bit 7: GIE: bit de habilitación global de Interrupciones

1= Habilita el permiso de interrupciones 0= Inhabilita todas las interrupciones

bit 6: PEIE: bit de habilitación de interrupciones de los periféricos que no se controla con el registro INTCON

1= Habilita el permiso de interrupciones de los periféricos 0= Inhabilita las interrupciones de los periféricos

bit 5: T0IE: bit de habilitación de la interrupción por desbordamiento del TMR0

1= Habilita la interrupción 0= Inhabilita la interrupción

bit 4: INTE: bit de habilitación de la interrupción externa por el pin RB0/INT

1= Habilita la interrupción 0= Inhabilita la interrupción

bit 3: RBIE: bit de habilitación de interrupción por cambio de nivel en el PORTB

1= Habilita la interrupción 0= Inhabilita la interrupción

bit 2: T0IF: flag de indicación de desbordamiento de TMR0

1= El TMR0 se ha desbordado. Se borra por software 0= El TMR0 no se ha desbordado

bit 1: INTF: flag de estado de la interrupción externa INT

1= La interrupción externa se ha producido. Se borra por software 0= La interrupción externa no se ha producido

bit 0: RBIF: flag de indicación de interrupción por cambio de nivel en PORTB 1= Se ha producido un cambio de nivel en los pines RB7:RB4. Se borra por software.

0= No se ha producido un cambio de nivel en los pines RB7:RB4

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 30: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

MODULO TIMER0 El módulo Titner0 es temporizador/contador con las siguientes características: · El temporizador/contador dispone de 8 bits · Puede escribirse y leerse · Preescaler programable por Software de 8 bits · Puede trabajar con el reloj interno o con una señal de reloj externa · Dispone de una interrupción por desbordamiento al pasar de FFh a 00h · Selección de flanco ascendente o descendente para el flaco del reloj externo En la Figura 13 se muestra un diagrama de bloques del Tirner0 y el preescaler que comparte con el WDT. Puede encontrarse información adicional sobre el módulo Timer0 en el manual de referencia de los microcontroladores de la escala media (DS33023).

Figura 13.- Diagrama de bloques del Timer 0 Notas.-: 1. El preescaler es compartido con el WDT (En la figura 14 se puede ver un diagrama de bloques detallado 2. TOCS, TOSE, PSA, PS2:PS0 (OPTION_REG<5:0>) El modo temporizador se selecciona poniendo a cero el bit T0CS ( registro OPTION_REG <5>). En el modo temporizador, el módulo Timer0 se incremento en cada cielo de instrucción (sin el preescaler). Si el registro TMR0 se escribe, el incremento se inhibe durante los siguientes dos ciclos de instrucción. EL usuario puede trabajar teniendo en cuenta esto y ajustando el valor a cargar en el TMR0. El modo contador se selecciona poniendo a uno el bit T0CS (registro OPTION_REG <5>). El modo contador, Timer0 se incremento en cada flaco de subida o de bajada de la señal que le llega por RA4/TOCK1. El flanco de incremento se determina por el bit T0SE (registro OPTION_REG <4>). Poniéndose a cero T0SE se selecciona el flanco ascendente. Las restricciones de la señal de reloj externa se describen en la sección 5.2. El preescaler se comparte exclusivamente entre el Timer0 y el WDT. El preescaler no es de lectura/escritura. En la sección 5.3 se detalla el funcionamiento del preescaler.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 31: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Figura 14.- Diagrama de bloques del TMR0

Interrupción del Timer0. La interrupción de TMR0 se produce cuando el registro TMR0 se desborda al pasar de FFh a 00h. Este desbordamiento pone a uno el bit T0IF (INTCON<2>). La ininterrupción puede enmascararse poniendo a cero el bit T0IE (INTCON <5>). EL bit T0IF debe ponerse a cero por software al finalizar la rutina de atención a la interrupción del desbordamiento de TMRO. La ininterrupción de TMRO no saca al microcontrolador del estado de SLEEP, debido a que el temporizador está desactivado durante el modo SLEEP

Utilización del Timer0 con un Reloj Externo Cuando no se utiliza el preescaler, la entrada de reloj externa es igual a la salida del preescaler. Las sincronización de TOCKI con los relojes de fase interior se acopla, a la salida del preescaler en los ciclos Q2 y Q4 de los relojes de fase internos. Por consiguiente, es necesario que TOCKI está a nivel alto por al menos durante 2Tosc (y un pequeño retardo de 20ns) y a nivel bajo por lo menos 2Tosc (y un retardo RC de 20ns).Ver las características eléctricas del dispositivo deseado.

Preescaler Hay sólo un preescaler disponible que es está compartido y puede asignarse indistintamente al moduló de Timerl y el al WDT. La asignación del preescaler al Timer0 hace que no haya ningún preescaler para el WDT, y viceversa. Este preescaler no se puede leer ni escribir (ver la Figura 14).

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 32: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

El bit PSA y PS2:PS0 (OPTION_REG <3:0>) determinan la asignación del preescaler y el rango del preescaler. Cuando se le asigna al módulo del Tirner0 , todas las instrucciones, que escriben en el registro TMR0 (por ejemplo CLRF TMR0, MOVWF TMR0, BSF TMR0,x... etc.) ponen a cero el preescaler. Cuando se le asigna al WDT, una instrucción CLRWDT limpia el preescaler junto con el temporizador del WDT. EL preescaler no se puede leer ni escribir. TABLA DE REGISTROS ASOCIADOS AL TIMER0

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 33: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

MODULO CONVERTIDOR ANALÓGICO/DIGITAL (A/D) El módulo de conversión Analógico/Digital dispone de cinco entradas para los dispositivos de 28 pines y ocho para los otros dispositivos de la familia. A través de la entrada analógica se aplica la señal analógica a un condensador de captura y retención (sample and hold) que después se introduce en el convertidor. El convertidor de aproximaciones sucesiva da como resultado una palabra de 10 bits. El convertidor A/D puede seleccionar como tensión de referencia la interna VDD y masa o bien una externa que se introduzca entre RA3/AN3/VREF+ y RA3/AN3/VREF. Cuando se selecciona la tensión de referencia externa, hay que tener en cuenta que existen algunas limitaciones; el máximo voltaje aplicado a la patilla VREF+ (RA3/AN3) será VDD+0,3V y el mínimo VDD-2,5V. En cuanto a la tensión VREF- (RA2/AN2) la mínima tensión será VSS-0,3V y la máxima VREF+ - 2V, así por ejemplo, si la tensión de alimentación es de 5V, la tensión en RA3/AN3 no podrá exceder de 5V. Por lo que el máximo voltaje en VREF- será de 3V. Siempre se ha de cumplir que . El convertidor A/D tiene como característica especial el ser capaz de seguir trabajando mientras el dispositivo esté en el modo SEEP. Para ello el oscilador interno RC debe conectarse al conversar. El módulo de A/D tiene cuatro registros. Estos registros son: · ADRESH : Parte alta del resultado de la conversión · ADRESL : Parte baja del resultado de la conversión · ADCON0: Registro de Control 0 · ADCON1, Registro de Control 1 Los registros ADCON0 de control del funcionamiento del conversar se muestra seguidamente al igual que el registro ADCON1 de configuración de los pines del puerto. Los pines del PORTA pueden configurarse como entradas analógicas (RA, también puede ser entrada de tensión de referencia) o como E/S digital. Puede encontrarse información adicional sobre los convertidores A/D de rango medio de la familia PICmicroTm en el manual de referencia (DS33023). Registro ADCON0 (dirección lFh)

bit 7-6: ADCS1:ADCS0: bit de selección de reloj para el Convertidor A/D

00 Fosc/2 01 Fosc /8 10 Fosc/32 11 FRC (Procede del oscilador RC interno)

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 34: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

bit 5-3: CH2:CH0: bit de selección del canal analógico 000 = Canal 0, (RA0/AN0) 001 = Canal 1, (RA1/AN1) 010 = Canal 2, (RA2/AN2) 011 = Canal 3, (RA3/AN3) 100 = Canal 4, (RA4/AN4) 101 = Canal 5, (RA5/AN5); los PIC16F87X de 28 pines no tienen este canal 110 = Canal 6, (RA6/AN6); los PIC16F87X de 28 pines no tienen este canal 111 = Canal 7, (RA7/AN7),, los PIC 1 6F87X de 28 pines no tienen este canal

bit 2: GO/#DONE. bit de estado de la conversión A/D Si ADON=1 1= La conversión A/D está en marcha (mientras está a 1 se está realizando la conversión) 0 = La conversión ha finalizado. (el bit se pone a cero automáticamente por hardware cuando la conversión A/D finaliza) el resultado de la conversión aparece en ADRDES:ADRESL

bit 1: No implementado: Se lee como “0” bit 0: ADON: bit de puesta en marcha

1 = El convertidor A/D está operativo 0 = El convertidor A/D está apagado y no consume corriente.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 35: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Registro ADCON1 (dirección 9Fh)

bit 7: ADFM: Selecciona el formato del resultado de la conversión A/D 1 = Pone en el registro ARDESH los seis bit de mayor peso a “0” (alineación a la derecha). 0 = pone los 6 bit de menor peso del registro ADRESL a “0” (alineación a la izquierda). Por lo tanto los 16 bits que forman el registro ARDESH-ARDESL con ADFM=1 tiene los 6 bit de mayor peso a cero y con ADFM=0 los 6 bit de menor peso están a cero

bit 6-4: No implementados: Se leen como cero bit 3-0: PCFG3:PCFG0: bits de configuración de los canales de entrada del convertidor A/D. Se

utilizan para configurar las patillas como E/S digital o como entrada analógica de acuerdo con la siguiente tabla:

Los registros ADRESH:ADRESL contienen los 10 bits resultado de la conversión A/D. Cuando se completa la conversión A/D, el resultado se guarda en los registros y se pone a cero el bit GO/DONE y el flag de fin de conversión ADIF (PIR1<6>) se pone a 1.El diagrama de bloques del módulo conversar A/D es el de la Figura 24. Después de que el conversar A/D se ha configurado como se quiere, la selección del canal debe realizarse antes de hacer la adquisición. Los canales de entrada analógica deben tener los correspondientes bits del registro TRIS seleccionados como entradas. Para determinar el tiempo de muestreo, ver la sección 9.3.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC

Page 36: INNOVACIÓN TECNOLÓGICA ELECTRÓNICA - …etxesare.eu/PIC/16f87x/Tutorial16f87x.pdf · microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. ...

INTEEC

Para realizar una conversión A/D deben seguirse los siguientes pasos: 1. Configurar el módulo conversor A/D

· Configurar los pines que actúan como entradas analógicas, las señales que harán de tensión de referencia la que trabajarán como E/S digitales (ADDCON1). · Seleccionar el canal de entrada. A/D (ADCON0). · Seleccionar la fuente de la señal de reloj para la conversión A/D (ADON0). · Activar el módulo de conversión A/D (ADCON0)

2. Activar si, se desea, la interrupción. del módulo conversor A/D

· Poner a cero el bit ADIF · Poner a uno el bit ADIE · Poner a uno · Poner a una los bits habilitadores GIE y PEIE

3. Esperar el tiempo requerido para la adquisición 4. Inicio de la conversión

· Poner a 1 el bit GO/#DONE (ADCON0) 5. Tiempo de espera para terminar la conversión A/D que puede detectarse por:

· Exploración de bit GO/#DONE , que al finalizar la conversión toma el valor “0” · Esperar que se produzca una interrupción si se ha programado al finalizar la conversión. · Aunque no se autorice la interrupción el flag. ADIF se pone a “ 1 “ al finalizar la interrupción.

6. Leer el par de registros ARDESH:ADRESL donde se encuentran los 10 bits que resultan de la conversión y poner a cero el flag ADIF. 7. Para una nueva conversión volver a los pasos 1 y 2 , El tiempo de conversión por bit está definido por TAD, se exige un mínimo de 2*TAD para realizar una nueva conversión.

Innovación Tecnológica Electrónica Estudiantil En Ciencias INTEEC