Está en la página 1de 14

Universidad Nacional Autónoma de México

Facultad de estudios Superiores “Aragón”


Ingeniería en Computación

COMPARADORES DEL
PIC16F887

Profesora
Bernal Díaz Arcelia

Integrantes
Flores Cano Karen
Gallegos Alvarado Sergio Antonio
Hernández Moreno Jesús Alfredo

Materia
Microprocesadores y Microcontroladores

Grupo
2857

Trabajo
Práctica #2
Fecha
08 de abril de 2011
Objetivo General
Conocer las características de los comparadores del PIC16F887, así como tener noción de las aplicaciones que

pueden generar. Esto con el fin de realizar un programa el cual tendrá como propósito realizar una comparación.

Objetivos Específicos
 Conocer cómo funciona los comparadores del PIC16F887

 Conocer que aplicaciones pueden realizarse con los comparadores PIC16F887


 Diseñar un programa que compare una señal

 Implementar el diseño y el programa en un circuito armado

Introducción
Un circuito comparador combinatorio compara dos entradas binarias (A y B de n bits) para indicar la relación de

igualdad o desigualdad entre ellas por medio de "tres banderas lógicas" que corresponden a las relaciones A igual
B, A mayor que B y A menor que B. Cada una de estas banderas se activara solo cuando la relación a la que
corresponde sea verdadera, es decir, su salida será 1 y las otras dos producirán una salida igual a cero.

Mediante álgebra de Boole y diagramas se quiere mostrar cómo se puede construir fácilmente un comparador
binario de n bits a partir de comparadores más simples de dos y cuatro bits para implementar de manera rápida
uno de estos circuitos combinatorios.

Comúnmente se necesitan realizar comparaciones en ciertos procesos, por esa razón los PIC tienen integrados
módulos comparadores, en el caso del PIC16F887 contiene un módulo comparador que contiene dos
comparadores analógicos.

Comparadores se utilizan para interconectar circuitos analógicos a un circuito digital mediante la comparación de

dos voltajes analógicos y proporciona una indicación digital de sus magnitudes relativas.

Los comparadores son la construcción de señal mixta muy útiles, ya que proporcionan una funcionalidad análoga

independiente de la ejecución del programa. El módulo comparador análogo incluye las siguientes características:
• Control independiente de comparación

• Programación de selección de entrada

• La salida del comparador está disponible interna y externamente


• Polaridad de la salida programable

• Cambio de Interrupciones

• modo Sleep
• Sincronización de salida a la entrada de reloj temporizador Timer1

La siguiente figura muestra la estructura de los comparadores analógico dentro del PIC16F887
Cuestionario
1. Que es una interrupción y cuántos tipos existen
Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está realizando para

ejecutar otro proceso y posteriormente vuelva a tomar el control y continúe con la tarea que estaba realizando.
Existen 10 fuentes de interrupción estas son

 Interrupción externa RB0/INT

 Interrupción por cambio lógico en el puerto B (pines RB7 a RB4)

 Interrupción por desborde del timer 0 (TMR0)

 Interrupción por desborde del timer 1 (TMR1)


 Interrupción por comparación exitosa en TMR2

 Interrupción del comparador

 Interrupción del transmisor del USART


 Interrupción del receptor del USART
 Interrupción del módulo CCP

 Interrupción del EEPROM


Aunque el PIC cuenta con 10 fuentes distintas de interrupción solamente tiene un vector de interrupción por lo
que si se habilitan varias interrupciones al momento de presentarse cualquiera de ellas el programa saltara a la

misma rutina de interrupción

2. Que es un salto condicional y cuantos existen además explica detalladamente cada


una de ellas
Las instrucciones de salto condicional, que son aquéllas que producen un salto en función de que se cumpla o no
una condición. Estas instrucciones son el único medio para realizar bifurcaciones condicionales en un programa.

El repertorio de instrucciones del PIC16F84 incluye cuatro instrucciones de salto condicional clasificadas en dos
grupos:

Aquéllas que pueden producir el salto en función del estado de un bit.


Son muy poderosas ya que permiten al programa tomar decisiones en función del estado de un bit de cualquier

registro o puerto de entrada/salida.

Instrucción "btfsc f,b" esta instrucción puede actuar de dos formas:

Si el bit número 'b' del registro 'f es "l" la instrucción que sigue a ésta se ejecuta normalmente.

Si el bit número 'b' del registro 'f es "0" la instrucción que sigue a ésta se ignora y se salta.

Instrucción "btfss f,b" esta instrucción actúa de forma contraria a la instrucción anterior:
Si el bit número 'b' del registro T es "0" la instrucción que sigue a ésta se ejecuta normalmente.

Aquéllas que pueden producir el salto en función del contenido de un registro distinto de cero.
Las instrucciones de salto condicional "decfsz" e "incfsz" pueden producir el salto en función del contenido de un

registro distinto de cero y son casos especiales de las de incremento y decremento de un registro analizadas en el
capítulo 8. Estas instrucciones podrían categorizarse dentro del grupo de instrucciones aritméticas ya que

efectivamente operan de forma aritmética (decrementando o incrementando) sobre los registros. Pero, a diferencia

de las otras, además pueden alterar el flujo lineal del programa y por eso se las incluye en este grupo. Su forma de
actuar se describe a continuación:

Instrucción "decfsz f,d" esta instrucción decrementa en una unidad el contenido del registro T. Almacena el

resultado en W si 'd' = 0 (en cuyo caso 'f no varía) y en el registro T si 'd' = 1. Después de decrementar, pueden

ocurrir dos casos:


Si el resultado es distinto de cero la instrucción que sigue a esta se ejecuta normalmente.

Si el resultado es cero la instrucción que sigue a esta se ignora y se salta.

Instrucción "incfsz f,d" esta instrucción incrementa en una unidad el contenido del registro T. Almacena el
resultado en W si 'd' = 0 (en cuyo caso 'f no varía) y en el registro T si 'd' = 1. Después de incrementar, pueden

ocurrir dos casos:


Si el resultado es cero (porque al incrementarse se ha desbordado y ha pasado del número b'l 1111111* al
b'00000000') la instrucción que sigue a esta se ignora y se salta.

3. Que es el registro “status” y que es cada bit de dicho registro


El registro STATUS contiene: el estado aritmético de datos en el registro W, el estado RESET, los bits para

seleccionar el banco para los datos de la memoria.

IRP - Registro de selección de Banco (usado para direccionamiento indirecto)

1 - Bancos 0 y 1 son activos (localidades de memoria 00h-FFh)

0 - Bancos 2 y 3 son activos (localidades de memoria 100h-1FFh)


RP1,RP0 - Registro de selección de banco (usado para direccionamiento directo).

RP1 RP01 Banco

Activo
0 0 Banco 0

0 1 Banco 1

1 0 Banco 2

1 1 Banco 3
TO - Time-out bit (bit de salida del temporizador)

Después de encender el microcontrolador, después de ejecutarse la instrucción CLRWDT que reinicia al WDT
(temporizador) o después de ejecutarse la instrucción SLEEP que pone al microcontrolador en el modo de bajo

consumo.

PD - Power-down bit (bit de apagado)


Después de encender el microcontrolador, después de ejecutar la instrucción CLRWDT que reinicia al WDT.

Después de ejecutarse la instrucción SLEEP que pone al microcontrolador en el modo de bajo consumo.

Z - Zero bit (bit cero)

El resultado de una operación lógica o aritmética es 0.

El resultado de una operación lógica o aritmética es distinto de 0.


DC - Digit carry/borrow bit (bit de acarreo/préstamo de dígito)

Cambia al sumar o al restar si ocurre un "desbordamiento" o un "préstamo" en el resultado.

Hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado.
No hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado.
Carry/Borrow bit (bit de acarreo/préstamo)

Cambia al sumar o al restar si ocurre un "desbordamiento" o un "préstamo" en el resultado, o sea si el resultado es


mayor de 255 o menor de 0.
Ocurrió acarreo en el bit más significativo (MSB) del resultado.

No ocurrió acarreo en el bit más significativo (MSB) del resultado.

4. Explica en que consiste la instrucción “goto” y “call” además explica la diferencia de


cada una de ellas
La instrucción GOTO llama a la subrutina cargada en el PC, la instrucción CALL guarda la dirección de vuelta en la

pila y después llama a la subrutina situada en la dirección cargada en el PC, Es similar a GOTO pero coloca en la
pila la dirección de la siguiente instrucción que se debe ejecutar después realiza la llamada de la subrutina.

5. Da 4 ejemplos detallados donde se puede utilizar la comparación de registros


Operaciones aritméticas

Cuando se realiza una operación de suma o resta envía estos datos a los registros y pasa por el comparador para
determinar si es mayor o menor para esto se ocupa los registros Z y C de WF

Condiciones

Cuando se realiza una operación de comparación en los registros generalmente se usan en los saltos condiciones
Operaciones Booleanas

Cuando se realiza una operación booleana altera el valor de los registros y pasa por el comparador para

determinar si es verdadero o falso.


6. Que es un salto incondicional
Es un evento que no necesita evaluar si se cumplen las condiciones solo realiza un salto hacia una sección de

código.

Semejante a la instrucción “goto”, simplemente transferir el control a otro punto del programa.
7. Dibuja la carta asm del programa de componentes realizado por el PIC16F887

Prog_comparador.asm

Configura
 Puertos B, C, D, E como digitales.

 Todos los bits del Puerto B y C como Entrada

 los bits del Puerto D como Salida

Principal

Obtiene la señal de PORTB y envía a WREG

Realiza una resta PORTC y WREG

Escribe en WREG = „11110000‟


PORTB > PORTC

NO
PORTB < PORTC

SI

Escribe en WREG = „10101010‟

NO
PORTB == PORTC

SI

Escribe en WREG = „11111111‟

Mueve el valor de WREG a PORTD


8. Explica detalladamente los bits C y Z de los registros “status” de la capa de WF
Z - Zero bit (bit cero)

El resultado de una operación lógica o aritmética es 0.

El resultado de una operación lógica o aritmética es distinto de 0.

Carry/Borrow bit (bit de acarreo/préstamo)

Cambia al sumar o al restar si ocurre un "desbordamiento" o un "préstamo" en el


resultado, o sea si el resultado es mayor de 255 o menor de 0.

Ocurrió acarreo en el bit más significativo (MSB) del resultado.

No ocurrió acarreo en el bit más significativo (MSB) del resultado.

Código fuente
#include <P16F887.INC>
__config _CONFIG2, _WDT_OFF & _XT_OSC
ORG 00h
Init
BANKSEL ANSELH ; Se posiciona sobre el banco que contenga ANSELH.
CLRF ANSELH ; Se limpia para que ANSELH contenga 0 y se configure como digital
el puerto B, C, D, E.

BANKSEL TRISB ; Se posiciona sobre el banco que contenga TRISB.


MOVLW 0xFF ; Mueve 0xFF a W
MOVWF TRISB ; Configura todos los bits del puerto B como entrada.
MOVWF TRISC ; Configura todos los bits del puerto C como entrada.
CLRF TRISD ; Configura todos los bits del puerto D como salida.

BANKSEL PORTB ; Se posiciona sobre el banco que contenga PORTB.


CLRF PORTB ; Limpiamos el puerto B.
CLRF PORTC ; Limpiamos el puerto C.
BANKSEL TRISB ; Se posiciona sobre el banco que contenga TRISB.
MOVLW 0xFF ; Se mueve hacia WORK el valor 11111111 para configurar como entrada
MOVWF TRISB ; Recuperamos de WORK el valor y lo colocamos en TRISB.
CLRF TRISC ; Limpiamos TRISC, para que se comporte como salida.

BANKSEL PORTB ; Se posiciona sobre el banco que contenga PORTB.


Main ; Inicio de réplica.
MOVF PORTB, W ; Movemos el valor del puerto de entrada B a WORK.
SUBWF PORTC, W ; Resta el valor W con el valor del puerto C y el valor lo pone en W

MOVLW b’11110000; Mueve el valor indicador de que B>C a WORK.


BTFSC STATUS, C ; Verifica que C tenga un 1 para continuar con la
instrucción inmediata de lo contrario la salta.
; En caso que B<C se produce un acarreo.
MOVLW b'01010101'; Mueve el valor indicador de que B<C a W
BTFSC STATUS,Z ;Verifica que Z tenga un 1 para continuar con la
instrucción inmediata de lo contrario la salta.
; En caso de que la operación de la resta sea 0 Z no los
indica con un 1.
MOVLW b'11111111'; Mueve el valor indicador de que B==C a W
MOVWF PORTD ; Mueve el valor de W a PORTD como resultado de la
comparación
GOTO Main ; Regresa a Main
END

Esquema
Foto al Circuito original
Esquema del circuito

Numero Dispositivo Valor


1 Broche VCC
2 Regular de voltaje 7805 5v
3 Capacitor 10µf
4 Capacitor 100µf
5 Resistencia R1 330Ω
6 LED -
7 Grupo de resistencias R2 … R9 1 KΩ
8 Piano -
9 PIC 16F887 -
10 Reloj 20Mhz
11 Capacitor 33µf
12 Capacitor 33µf
13 Grupo de resistencias R10 … R17 1kΩ
14 Grupo de LED -
15 Capacitor de cerámica 104Z 0.1µf
16 Resistencia 1kΩ
Resultados

Se limpia para que ANSELH contenga 0 y se configure como digital el puerto B, C, D, y E, Se posiciona
sobre TRISB.

Configura todos los bits del puerto B y el puerto C como entrada.

Configura TRISD coomo salida y se posciociona sobre el registro del puerto B


Se Recibe la senal del Pierto B y se manda a W, posteriormente se recibe la senal del puerto C y se resta

con el dato que esta en W.

Realiza una comparacion y evalua si es el puerto B es mayor, o menor que el puerto C, y manda una
senal de respuesta al puerto D y regresa al Inicio del programa

Se realizó el programa de acuerdo a las especificaciones del maestro. Los datos del puerto del puerto B se
restaban con los datos del puerto C, comparando que el valor del puerto B > al valor del puerto C y se enviaban
los resultados al puerto D.

Se realizaron las simulaciones con éxito y se obtuvieron los resultados deseados. El circuito funcionó de acuerdo a
las especificaciones.

Conclusiones
Para poder realizar aplicaciones mas complejas se nesesitan trabajar con comparadores, ya que con los mismos se
pueden realizar diferentes circuitos como semaforos, cerraduras combinacionales, etc. Pero antes de realizar el

programa es necesario conocer y entender la configuración, arquitectura y funcionamiento interno del los

comparadores.

En conclusion se lograron los objetivos propuestos anteriormente, como conocer el funcionamiento de los

compzradores analogicos del PIC16F887, ademas que se realizo el programa y el circuito, finalmente fue una

experiencia satisfactoria conocer mas a fondo el PIC16F887.


Bibliografía
Microchip. (30 de Diciembre de 2009). Recuperado el 08 de abril de 2011, de PIC16F887:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en026561

Wikipedia. (28 de Marzo de 2011). Recuperado el 08 de abril de 2011, de Wikipedia:


http://en.wikipedia.org/wiki/PIC_microcontroller

Margni, G. L. (30 de Agosto de 2003). Universidad de la República Oriental de Uruguay.


Recuperado el 08 de abril de 2011, de Facultad de Ingeniería:
www.fing.edu.uy/inco/grupos/mina/pGrado/.../IntroduccionPics.doc

MikroElektronika. (1999). capitulo-3-microcontrolador-pic16f887. Recuperado el 07 de Abril de


2011, de capitulo-3-microcontrolador-pic16f887:
http://www.mikroe.com/eng/chapters/view/81/capitulo-3-microcontrolador-pic16f887/

También podría gustarte