Pic16f887 Entregar

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 171

é

é í ó

á
í
Curso Básico de PIC 16F887
Generalidades
Historia e importancia de los microcontroladores
Metodología de estudio
Microcontroladores Microchip 16F87X
Arquitectura 16F87X
Arquitectura interna 16F87x
Ciclo de instrucción
Organización de la memoria
Herramientas
Módulo 1: Manejo de Puertos Digitales

Registros para el manejo de puertos digitales


Descripción general de las instrucciones
Lectura y escritura en puertos
Partes de un programa en ASM
Primer programa en ensamblador
Uso del MPLAB
Principales registros del PIC16F887 (STATUS)
Ejercicios
1. Desarrollo tecnológico e importancia de los microcontroladores.

Hasta antes de la aparición de los microprocesadores (1971), la mayor parte de las


aplicaciones digitales en electrónica se basaban en la llamada lógica cableada, es decir, si
existía un problema este era analizado y se sintetizaba una función en base a la lógica de
boole que era la solución al problema planteado.
Con la aparición de los microprocesadores, se varió el esquema de diseño de tal forma que
una aplicación era descompuesto en una serie de tareas más simples, el microprocesador
ejecutaba una serie de pasos o instrucciones para llevar a efecto cada una de las tareas,
en ocasiones no era necesario volver a armar un circuito para solucionar otra aplicación
sino que se cambiaba las instrucciones (programa) para obtener otra aplicación desde
luego el microprocesador es como el cerebro que ejecuta operaciones de índole aritméticas
y lógicas por tanto no manejaba líneas externas (periféricos) más aún tampoco tenía un
lugar donde almacenar el programa y los datos que necesitaba el programa para encontrar
la respuesta al problema. El microprocesador buscaba una instrucción y la ejecutaba; al
conjunto de circuitos (hardware) que daban el soporte necesario al microprocesador se le
llamo sistema mínimo.
Con el pasar de los años el sistema mínimo se convirtió en un estándar, por otro lado la
escala de
Integración mejoro y posibilito (1976) sintetizar en un solo chip un sistema mínimo, al cual
se le llamo SISTEMA A que no era otra cosa que el primer microcontrolador.
En consecuencia definimos así a un microcontrolador; como un procesador con su sistema
mínimo en un chip (incluye memoria para programa y datos, periféricos de entrada / salida,
conversores de AD y DA, módulos especializados en la transmisión y recepción de datos).
Desde luego que hay diferencias sustanciales como la arquitectura cerrada de un
microcontrolador, en cambio en un microprocesador es abierta, podemos sumar nuevos
dispositivos en hardware en función a las necesidades que la aplicación demande.
Otra diferencia entre los microcontroladores y los microprocesadores es que los primeros
cuentan con un set de instrucciones reducido en cambio la mayoría de los
microprocesadores tienen mayor cantidad de instrucciones. Por otro lado la mayoría de los
microcontroladores posee una arquitectura Harvard frente a una arquitectura Von Neumann
de los microprocesadores.
Los microcontroladores se especializan en aplicaciones industriales para resolver
dificultades planteadas específicas por ejemplo: los encontramos en los teclados o mouse
de las computadoras, son el cerebro de electrodomésticos, también los encontramos en la
industria automotriz, en el procesamiento de imagen y video. Cabe señalar que los el
aumento progresivo de la escala de integración y las técnicas de fabricación hacen que
cada vez aparezcan microcontroladores más poderosos y rápidos.
Desarrollo Tecnológico de los Microcontrolador
2. Metodología de estudio
En el presente curso pretendemos aprender a usar microcontroladores. Aprender significa:
 Entender cómo funciona la arquitectura.
 Comprender y aplicar las instrucciones que tiene el dispositivo.
 Plantear soluciones a aplicaciones.
 Aprender a usar las herramientas de programación y depuración. (ICD)
 Detectar y corregir los errores sintácticos y lógicos.
 Optimizar el programa final.

En el desarrollo de texto implementaremos circuitos simples pero demostrativos de las


bondades y posibilidades de los microcontroladores. El proceso de diseño puede ser
expresado a través del siguiente diagrama de flujo:

Como podemos apreciar todo principia en una idea la cual se ha de plasmar en diagramas
de flujo o autómatas o alguna otra metodología que ayude al modelamiento, una vez
superado este punto
Procedemos a usar un editor de texto para codificar el diagrama de flujo a través de las
instrucciones con que cuenta el microcontrolador.
A continuación presentamos ese archivo a un programa ensamblador (si es que usamos el
lenguaje ensamblador) o un compilador (si usamos otro lenguaje como el C o Basic) aquí
se depuran los errores sintácticos que son errores en la estructura del lenguaje de
programación.
Una vez que superamos esa etapa procedemos a usar un software, para simular el
programa verificando que la solución es válida. En caso que la simulación indique errores
procedemos a replantear la solución retomando el punto inicial. Si la solución es la que
deseamos procedemos a grabar el programa (debidamente compilado) en el
microcontrolador haciendo uso de una herramienta (grabador de microcontroladores). En
este punto es posible aplicar un emulador o un ICD a fin de verificar que los resultados
elaborados por el simulador son apropiados, el emulador o ICD a diferencia del simulador
trabaja sobre hardware real. En caso que falle en este punto retomamos el diseño original.
Superada ambas fases procedemos a colocarlo sobre el hardware final que ha de operar.
Metodologia de Estudio.
3. Microcontroladores Microchip 16F887
Casi todos los fabricantes de microprocesadores lo son también de microcontroladores, en
el mercado existen una serie de marcas bastante conocidas y reconocidas como es el caso
de Microchip, Motorola, Hitachi, etc. Hemos seleccionado a Microchip y en particular la serie
16F887, motivos para usar este dispositivo sobran, el principal de ellos es la abundante
información y herramientas de diseño existente en el mercado (tanto local como
internacional). También salta a la vista el hecho que es sencillo en el manejo y contiene un
buen promedio elevado en los parámetros (velocidad, consumo, tamaño, alimentación).

Características del PIC 16F887:

 Arquitectura RISC
 El microcontrolador cuenta con solo 35 instrucciones diferentes
 Todas las instrucciones son uni-ciclo excepto por las de ramificación
 Frecuencia de operación 0-20 MHz
 Oscilador interno de alta precisión
 Calibrado de fábrica
 Rango de frecuencia de 8mhz a 31khz seleccionado por software
 Voltaje de la fuente de alimentación de 2.0V a 5.5V
 Consumo: 220ua (2.0V, 4mhz), 11ua (2.0 V, 32 kHz) 50na (en modo de espera)
 Ahorro de energía en el Modo de suspensión
 Brown-out Reset (BOR) con opción para controlar por software
 35 pines de entrada/salida
 Alta corriente de fuente y de drenado para manejo de LED
 Resistencias pull-up programables individualmente por software
 Interrupción al cambiar el estado del pin
 Memoria ROM de 8K con tecnología FLASH
 El chip se puede re-programar hasta 100.000 veces
 Opción de programación serial en el circuito
 El chip se puede programar incluso incorporado en el dispositivo destino.

 256 bytes de memoria EEPROM


 Los datos se pueden grabar más de 1.000.000 veces
 368 bytes de memoria RAM
 Convertidor A/D:
14 canales
 Resolución de 10 bits
 3 temporizadores/contadores independientes
 Temporizador perro guardián
 Módulo comparador analógico con
 Dos comparadores analógicos
 Referencia de voltaje fija (0.6V)
 Referencia de voltaje programable en el chip
 Módulo PWM incorporado
 Módulo USART mejorado
 Soporta las comunicaciones seriales RS-485, RS-232 y LIN2.0
 Auto detección de baudios
 Puerto Serie Síncrono Maestro (MSSP)
 Soporta los modos SPI e I2C
El siguiente diagrama da cuenta de los pines del PIC16F887:

Descripción de Pines

La mayoría de los pines del microcontrolador PIC16F887 son multipropósito como se


muestra en la figura anterior. Por ejemplo, la asignación RA3/AN3/Vref+/C1IN+ para el
quinto pin del microcontrolador indica que éste dispone de las siguientes funciones:

 RA3 Tercera entrada/salida digital del puerto A


 AN3 Tercera entrada analógica
 Vref+ Referencia positiva de voltaje
 C1IN+ Entrada positiva del comparador C1

La funcionalidad de los pines presentados anteriormente es muy útil puesto que permite un
mejor aprovechamiento de los recursos del microcontrolador sin afectar a su
funcionamiento. Estas funciones de los pines no se pueden utilizar simultáneamente, sin
embargo se pueden cambiar en cualquier instante durante el funcionamiento. Las
siguientes tablas se refieren al microcontrolador DIP de 40 pines.
Caracteristicas PIC16F887.
4. Arquitectura 16F887
Los PIC16F887 de Microchip pertenecen al tipo de procesador RICS que es un procesador
de instrucciones reducidas, se caracteriza por que el número de instrucciones es pequeño
y además casi todas se realizan en la misma cantidad de tiempo, por otro lado posee
unidades que trabajan en paralelo conectadas por pipes o tuberías. Este tipo de procesador
emplea una arquitectura Harvard lo que significa que trabaja las zonas de memoria de
programa y datos en forma separada. En el siguiente diagrama se muestra la arquitectura
Von Neumann frente a la Harvard:

En ambas arquitecturas observamos bloques de memoria, cada bloque tiene posiciones y


cada posición un valor. Para recoger o dejar un valor en una determinada posición es
necesario primero indicar cuál es la dirección a leer o escribir de la memoria, en
consecuencia hay un grupo de líneas que nos permiten hacer esa función conocida como
el bus de direcciones, también existe un bus de datos que son líneas paralelas por donde
discurren los valores de cada dirección.
En el caso de la arquitectura Von Neumann podemos apreciar que existe un único bus de
direcciones y de datos. Podemos apreciar como cada posición de memoria tiene una
dirección, a su vez la memoria se divide en memoria de programa (conocida como ROM) y
memoria de datos (conocida como RAM).
En el caso de la arquitectura Harvard existen dos bloques de memoria separados. Un
bloque para
Instrucciones y otro para datos. Note como hay dos buses independientes de direcciones y
el bus de instrucciones solo tiene una dirección, a diferencia del bus de datos que es de
naturaleza bidireccional. Todo esto sugiere que puede existir una dirección por ejemplo la
0. Entonces tenemos una instrucción en la posición 0 y también un dato en la 0. En el caso
de la arquitectura Von Neumann esa dirección es de programa o de instrucción pero no de
ambas.
La arquitectura Harvard mejora el ancho de banda por que el bus de datos es de 14 bits
frente a los de 8 de un bus tradicional Von Neumann por tanto en una sola lectura puede
llevar mayor cantidad de datos.
Arquitectura 16F887
5. Arquitectura interna 16F887
Hemos señalado que el microcontrolador posee varios elementos en forma interna: el
procesador, memoria de programa, memoria de datos, periféricos, contadores.
Observemos el siguiente diagrama de bloques del PIC16F887:
Unidad central de procesamiento (CPU)
Con el propósito de explicar en forma clara y concisa, sin describir profundamente el
funcionamiento de la CPU, vamos a hacer constar que la CPU está fabricada con la
tecnología RISC ya que esto es un factor importante al decidir qué microcontrolador utilizar.
RISC es un acrónimo derivado del inglés Reduced Instruction Set Computer, lo que
proporciona al PIC16F887 dos grandes ventajas:

La CPU cuenta con sólo 35 instrucciones simples. Cabe decir que para poder programar
otros microcontroladores en lenguaje ensamblador es necesario saber más de 200
instrucciones
El tiempo de ejecución es igual para casi todas las instrucciones y tarda 4 ciclos de reloj.
La frecuencia del oscilador se estabiliza por un cristal de cuarzo. Las instrucciones de salto
y de ramificación tardan ocho ciclos de reloj en ejecutarse. Esto significa que si la velocidad
de operación del microcontrolador es 20 MHz, el tiempo de ejecución de cada instrucción
será 200nS, o sea, el programa ejecutará 5millones de instrucciones por segundo.

Memoria
El PIC16F887 tiene tres tipos de memoria: ROM, RAM y EEPROM. Como cada una tiene
las funciones, características y organización específicas, vamos a presentarlas por
separado.
Arquitectura interna 16F887

8 LVL Stack Memory TIMER1

TIMER2
Registro de
Trabajo (W)

Puertos Entrada y Salida

Instrucciones de Código y Control

Fuente de Alimentación RELOJ INTERNO


6. Ciclo de instrucción
Observemos el siguiente diagrama de tiempos:
El oscilador o cristal genera pulsos, cada uno de los cuales se les llama cuadratura Q1, Q2,
Q3 y Q4. Toda instrucción tiene asociada dos procesos uno de búsqueda y otro de
ejecución, cada uno de ellos ocupa un ciclo de instrucción. La primera tarea que se lleva a
cabo es la búsqueda, internamente el contador de programa se incrementa en Q1. La
búsqueda de la siguiente instrucción se lleva a cabo en Q4. La instrucción es ejecutada en
el siguiente ciclo de instrucción como lo muestra el diagrama.
También debemos notar que los procedimientos de búsqueda y ejecución de una misma
instrucción son secuenciales más son paralelos para diferentes instrucciones, es decir que
mientras se ejecuta una instrucción la ALU ya está buscando la siguiente por tanto se
asume que el tiempo de ejecución de una instrucción es un ciclo de instrucción salvo que
sea una instrucción de salto o bifurcación en cuyo caso el tiempo es de dos ciclos de
instrucción dado que el procesador no sabe hacia dónde va a saltar lo normal es introducir
un ciclo muerto a fin que evalué la condición necesaria y recién proceda a saltar.
Ciclo de instrucción
7. Organización de la memoria.

La memoria se divide en memoria de datos y programa. La de datos a su vez se divide en:

 SFR (Special Function Register) Registros de propósito especial, son registros que
ayudan a configurar el hardware interno así como sirven para escribir o leer valores
de los diferentes componente que constituyen el microcontrolador. Por ejemplo el
registro “trisa” que nos permite configurar el modo de trabajo de las líneas del puerto
Am.

 GFR (General Function register) Registros de propósito general, son posiciones de


memoria que podemos usar para almacenar valores que emplean nuestros
programa.

La memoria ROM se utiliza para guardar permanente el programa que se está ejecutando.
Es la razón por la que es frecuentemente llamada “memoria de programa”. El PIC16F887
tiene 8Kb de memoria ROM (en total 8192 localidades). Como la memoria ROM está
fabricada con tecnología FLASH, su contenido se puede cambiar al proporcionarle un
voltaje de programación especial (13V). No obstante, no es necesario explicarlo en detalles
puesto que se realiza automáticamente por un programa especial en la PC y un simple
dispositivo electrónico denominado programador.

Memoria EEPROM
Similar a la memoria de programa, el contenido de memoria EEPROM está
permanentemente guardado al apagar la fuente de alimentación. Sin embargo, a diferencia
de la ROM, el contenido de la EEPROM se puede cambiar durante el funcionamiento del
microcontrolador. Es la razón por la que esta memoria (256 localidades) es perfecta para
guardar permanentemente algunos resultados creados y utilizados durante la ejecución del
programa.

Memoria RAM
Es la tercera y la más compleja parte de la memoria del microcontrolador. En este caso
consiste en dos partes: en registros de propósito general y en los registros de funciones
especiales (SFR). Todos estos registros se dividen en cuatro bancos de memoria de los
que vamos a hablar más tarde en este capítulo. Aunque los dos grupos de registros se
ponen a cero al apagar la fuente de alimentación, además están fabricados de la misma
forma y se comportan de la manera similar, sus funciones no tienen muchas cosas en
común.
Bancos de la memoria RAM
La memoria RAM está dividida en cuatro bancos. Antes de acceder a un registro al escribir
un programa (para leer o cambiar su contenido), es necesario seleccionar el banco que contiene ese
registro. Más tarde vamos a tratar dos bits del registro STATUS utilizados para selección del
banco. Para simplificar el funcionamiento, los SFR utilizados con más frecuencia tienen la
misma dirección en todos los bancos, lo que permite accederlos con facilidad.
Organización de la memoria
8. Herramientas
Para programar es necesario contar con herramientas en hardware y software, en el
mercado existen muchas herramientas que van de ensambladores a simuladores,
emuladores o Debugger físicos.

MPLAB
El MPLAB es un entorno de desarrollo es decir es un recipiente que incluye varias
herramientas:
Contiene un editor de textos que no permite ingresar el programa expresado en códigos
nemónico (o simplemente llamado ensamblador), normalmente este se guarda en una
archivo con extensión ASM.
Una vez que hemos ingresado el programa dentro de un archivo creamos un proyecto
dentro del MPLAB el proyecto puede contener a su vez varios archivos ASM que se
relacionen a través de llamadas a rutinas o compartan y/o variables, adicionalmente el
proyecto tiene un grupo de variables que debemos configurar como es el tipo de
microcontrolador que vamos a usar ya que el MPLAB soporta todas las familias de
microcontroladores Microchip (MPLAB es producido por Microchip). A continuación
procedemos a llamar al programa ensamblador que lleva el MPLAB capaz de transformar
los código nemónicos (instrucciones) a los correspondientes valores binarios que a su vez
grabaremos en el microcontrolador. El ensamblador (MPASMWIN) también genera otros
archivos de salida que ayudan en el diseño de aplicaciones. Dentro del MPLAB
encontramos también al MPSIM que es un potente simulador que nos permitirá observar el
comportamiento del programa antes de proceder grabar el programa. El archivo .HEX es el
que contiene los códigos binarios a grabar en el microcontrolador. (El MPLAB es un
software de libre distribución que se encuentra disponible en el homenaje de microchip
www.microchip.com)

ICD El ICD (In Circuit Debugger) es una herramienta que tiene componentes en hardware
y en software. El software viene incluido en el MPLAB es de fácil uso y configuración. ICD
es una característica incluida en algunos microcontroladores de Microchip. Se habilita
mediante un bit al momento de grabar el microcontrolador de tal forma que el
microcontrolador ejecuta el programa hasta una determinada instrucción, en ese momento
el microcontrolador se detiene y procese a transmitir vía puerta serial todos los datos que
tiene en los bancos de memoria (SFR y los GFR). De esta forma podemos ver en la pantalla
del ordenador lo que pasa internamente en el microcontrolador cuando ejecutamos un
programa. El hardware es otro componente del ICD consiste en una serie de circuitos que
ejecutan la grabación (transistores que trabajan como interruptores en corte y saturación)
así como un microcontrolador (PIC16F876) que recibe los datos y los transmite a la
computadora. Finalmente el ICD se conecta a una tarjeta básica pero efectiva llamada
DEMOBOARD. El ICD es una herramienta potente en el sentido que permite corregir
rápidamente los errores lógicos que siempre se presentan en la programación.

GRABADORES
Los grabadores de microcontroladores, toman como entrada un archivo HEX para grabarlo
en un
Microcontrolador. Generalmente los grabadores son herramientas que trabaja con un
circuito conectado al puerto paralelo, la idea es tomar el contenido del archivo HEX y
depositarlo en la memoria de programa del PIC. Uno de los más populares es el NOPPP,
en internet está disponible el programa ejecutable, el programa fuente y el circuito. Es un
excelente punto de partida para entender cómo se lleva a cabo el proceso de grabación de
un PIC. Las herramientas descritas anteriormente trabajan íntimamente, si graficamos la
forma como se relacionan podríamos expresar la idea a través del siguiente diagrama:

Una vez identificado la dificultad planteamos la solución a través de un algoritmo de allí en


un diagrama de flujo, el diagrama de flujo se puede codificar en cualquier lenguaje de
programación de allí que presentamos dos caminos o en ensamblador o en C, si elegimos
el C es necesario compilar el código para obtener el equivalente en ASM. Una vez en ASM
procedemos a ensamblar y simular. Si todo está sin dificultades procedemos a grabar el
programa. El MPLAB genera un archivo HEX que puede ser leído por el NOPPP o el ICD
que es el que a su vez graba el programa dentro del microcontrolador. Con el ICD
verificamos el correcto funcionamiento del programa si encontramos algún error
procedemos a depurar el error.
Herramientas
Módulo 1: Manejo de Puertos Digitales

1. Registros para el manejo de puertos digitales


El PIC16F887 contiene 5 puertos que pueden ser configurados como entrada o salida
digitales (A, B, C, D, E). El puerto A contiene 6 bits (RA0-5). El puerto B (RB0-7), el puerto
C (RC0-7) y el puerto D (RD0-7) tienen cada uno 8 líneas. El puerto E solo cuenta con 3
líneas (RE0-2). La operación de configuración de los puertos en general implica la siguiente
secuencia:
 Ingresar al banco 1
 Configurar los puertos (registros TRISA, TRISB, TRISC, TRISD y TRISE)
 Regresar al banco 0
 Escribir o leer datos desde los puertos. (Registros PORTA, PORTB, PORTC,
PORTD y PORTE )

Hemos indicado que la memoria de datos del PIC16F887 se divide en cuatro bancos: 0, 1,
2 y 3. En las posiciones inferiores de ambos bancos se encuentran los registros especiales
de función (SFR). En la posición 0x05, 0x06, 0x07, 0x08 y 0x09 respectivamente se
encuentran los registros PORTA, PORTB, PORTC, PORTD y PORTE que se usan para
leer o escribir datos en tanto que en las posiciones 0x85, 0x86, 087, 0x88 y 0x89 se
encuentran los registros TRISA, TRISB, TRISC, TRISD y TRISE respectivamente, es allí
donde se configuran los puertos. Cabe señalar que el PORTB también aparece en el banco
2 en la posición de memoria 0x106 y el TRISB en la posición de memoria 0x186.

Cada una de las líneas de los puertos puede ser configurado como entrada o como salida.
En los registros TRIS determinamos la configuración de los puertos. Los registros son una
suerte de mascara. Por ejemplo si escribimos un 0 en el bit 0 del TRISA la línea RA0 se
comportará como una línea de salida. Si colocamos a 1 el bit 0 del TRISA a la línea RA0
se comportará como entrada. A través de los valores que escribamos en los registros TRIS
determinamos el comportamiento de los puertos. La escritura y lectura de valores desde los
puertos se hace a través de los registros PORT que se encuentran en el Banco 0 (y banco
2 para el puerto B). Desde luego si configuramos un puerto como entrada (lectura) los
valores que escribamos en el no tendrán efecto porque fue configurado como entrada y no
como salida. A través de las instrucciones MOV podemos leer o escribir valores
NOTA.- El puerto A es un puerto multifunción que se puede configurar como digital o como
analógico este modo de funcionamiento dependerá del registro ADCON1 (banco 1 posición
0x1F). Por el momento no profundizaremos en el tema sino cuando llegamos al módulo
ADC. Solo nos bastará saber que el debemos configurar los bits de la siguiente manera:

2. Descripción general de las instrucciones


Los programas están compuestos por instrucciones. El PIC16F887 cuenta con 35
instrucciones que iremos desarrollando conforme avancemos en el curso. Cada instrucción
está representada por 14 bits. Los 14 bits a su vez se dividen en:
 Código de operación (OPCODE), que específica cual es la instrucción a la que
hacemos referencia, por ende cada instrucción tiene un código en particular.
 Operadores, cada instrucción es aplicada sobre determinados operadores, parte de
los 14 bits están destinados a especificar quienes son los registros o valores que se
verán afectados como resultado de la aplicación de la instrucción.
Las instrucciones están divididas en tres clases:
Orientadas a byte Instrucciones cuya representación es:

Las instrucciones orientadas a byte reservan los 7 bits de menor peso para indicar la
dirección del registro que será operado. Una vez que se lleva a efecto la operación usamos
el bit d para indicar donde será almacenado el resultado. Si d es 0 el resultado se almacena
en el registro de trabajo W, si d es 1 el resultado será guardado en el mismo registro (o file)
que se operó.

Orientadas a bit Representada por:

Las operaciones orientas a bit buscan escribir o leer una posición (bit) dentro de un file o
registro. Una vez más los 7 bits inferiores son destinados para indicar la dirección de registro
o file que vamos a trabajar y los siguientes tres bit especifican el bit dentro del registro.

Literales o de control Con formato:


Las instrucciones de control son las que ayudan a formar bucles dentro de los programas
así como sirven para llamar a rutinas o procedimientos (instrucciones CALL o GOTO). En
este caso en particular se emplea los 11 bits inferiores para enviar la dirección a la cual el
contador de programa (PC) saltará. Los bits superiores de la instrucción sirven para
identificar a la instrucción.
En ocasiones es necesario cargar constantes a los registros del microcontrolador, las
instrucciones literales nos sirven para mover las constantes a un registro en particular, en
este caso empleamos los 8 bits inferiores para definir la constante que deseamos
almacenar, en tanto que los bits restantes sirven para identificar la instrucción.

El siguiente es un cuadro resumen de las instrucciones clasificadas en función a las


categorías que hemos descrito:
3. Lectura y escritura en puertos.

Desarrollar un programa que configure las líneas del puerto A como entrada y las líneas del
puerto B como salida. Y que muestre en forma permanente la entrada del puerto A en el
puerto B. Si desarrollamos el algoritmo se reduce a:

1. Configurar PA como entrada y PB salida


2. W= PA
3. PortB=W
4. Ir paso 2
El diagrama de flujo se resume

4. Partes de un programa en ASM


DIRECTIVAS
Antes de codificar el diagrama anterior es conveniente revisar algunos conceptos breves
de las partes que componen un programa en ensamblador para el PIC16F887 usando el
MPLAB. Además de las instrucciones que necesitamos es necesario revisar las directivas
de compilación que son comandos que permiten mejorar la programación.
 Directiva ORG

Sirve para indicar la dirección de memoria en la cual será colocado el código generado a
continuación. Si el ORG no es indicado se empieza en la dirección 0. Ejemplo:
Indica que el siguiente “nop” se colocará en la dirección 0x04 de la dirección de programa.
 DIRECTIVA EQU

Permite asignar el valor de expresión al identificador. El general el identificador es un


nombre que le es más familiar al programador. Ejemplo:

 DIRECTIVA END

Es de uso obligatorio y siempre se coloca al final del programa sirve para marcar el final del
programa. El
MPLAB solo reconoce las líneas que estén escritas previas a la aparición de la directiva.

 DIRECTIVA LIST
Sirve para indicarle al MPLAB cuál es el formato del archivo *.list dentro de los parámetros
está el tipo de procesador que se va a emplear. Ejemplo:

 DIRECTIVA INCLUDE

Sirve para incluir en el ensamblado el archivo indicado por el parámetro “file”. Es como si el
“file” fuera parte del archivo, como si se hubiera situado en la posición en la cual la directiva
aparece. El parámetro “file” puede incluir el path o camino en el cual se encuentra el fichero
a incluir. En caso se omita asumirá los directorios del MPLAB y del archivo fuente.

Incluye el archivo “p16F887.inc” que contiene las etiquetas genéricas del PIC16F887

 PRIMERAS INSTRUCCIONES
Sintaxis: [ label ] BSF f,b
Operandos: 0 ≤ f ≤ 127
0≤b≤7
Operación: 1 → (f<b>)
Afecta Status: No
Descripción: El bit 'b' del registro 'f' es puesto a 1-lógico.

 BCF Bit Clear f


Sintaxis: [ label ] BCF f,b
Operandos: 0 ≤ f ≤ 127
0≤b≤7
Operación: 0 → (f<b>)
Afecta Status: No
Descripción: El bit 'b' del registro 'f' es puesto a o-lógico.

 CLRF Clear f
Sintaxis: [ label ] CLRF f
Operandos: 0 ≤ f ≤ 127
Operación: 00h → (f)
1→Z
Afecta Status: Z
Descripción: El contenido del registro ’f’ es puesto a 0-lógicos y el bit Z del STATUS es
puesto a 1-lógico.

 GOTO Unconditional Branch


Sintaxis: [ label ] GOTO k
Operandos: 0 ≤ k ≤ 2047
Operación: k → PC<10:0>
PCLATH<4:3> → PC<12:11> Status
Afecta Status: No
Descripción: GOTO es un salto incondicional.
Los once primeros bits son cargados en el registro PC bits <10:0>. Los bits superiores de
PC son cargados de PCLATH<4:3>. GOTO es una instrucción que demora dos ciclos de
instrucción.

 MOVLW Move Literal to W


Sintaxis: [ label ] MOVLW k
Operandos: 0 ≤ k ≤ 255
Operación: k → (W)
Afecta Status: No
Descripción: Los ocho bits literales de 'k' son cargados dentro del registro W.

 MOVWF Move W to f
Sintaxis: [ label ] MOVWF f
Operandos: 0 ≤ f ≤ 127
Operación: (W) → (f)
Afecta Status: No
Descripción: Mueve el dato del registro W al registro 'f'.
Con las directivas y las instrucciones mostradas procedemos a elaborar el código del primer
programa.

5. Primer programa en ensamblador:


6. Uso del MPLAB

A) Nociones previas
MPLAB. Es un entorno de desarrollo que incluye varias herramientas que ayudan a
desarrollar aplicaciones en torno a microcontroladores de la familia Microchip. Incluye
un editor, un ensamblador (MPASMWIN), un simulador (MPSIM), el software del
PICSTART (programador), software para el ICD (in Circuit Debugger).

PROYECTO. Es un recipiente que contiene los archivos con el código de la aplicación.


Un proyecto puede contener uno o más archivo de código.

SIMULACIÓN. Acción por la cual podemos observar en pantalla el desarrollo de


programa como si estuviéramos dentro del microcontrolador. También podemos
manipular las señales de entrada. Es necesario indicar que todo lo que vemos se realiza
en la memoria del computador, a diferencia de los emuladores (ICD) que nos presentan
los datos que hay dentro del dispositivo.

B) Pasos a ejecutar en MPLAB

1. Ingresar al MPLAB:
Inicio-> Programas-> Microchip MPLAB-> MPLAB o haga doble click sobre el
icono del programa en el escritorio:

2. Cree un proyecto:
Primero con ayuda del explorador de WINDOWS cree una carpeta de trabajo:
C:\Users\Victrm\Documents\MPLAB\CURSO

La idea es contar con una carpeta en la cual coloquemos


nuestros trabajos. El MPLAB cuenta, como toda
aplicación en WINDOWS, con una barra de menús, una
barra de iconos y una de estado en la parte inferior. Abra
el menú PROJECT y elija la opción NEW. Asigne un
nombre al proyecto y asegúrese que el proyecto sea
creado en la carpeta CURSO como lo muestra la
siguiente figura: Presione el botón OK.
3. Edite el programa:
Ahora que contamos con el recipiente el siguiente paso consiste en adicionar el código;
para eso nos apoyaremos en el editor. Abra un nuevo archivo: Ingrese al menú FILE y
elija la opción NEW.
Notara como se muestra un documento nuevo.
Ingrese el código en ensamblador que necesita.

4. Ensamble el programa.
Una vez realizado el programa se procede a
compilarlo y para ello se dirige el cursor a la pestaña
“Project” y posteriormente se selecciona la opción
“Quick nombre del archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará
el proceso de compilación. Una vez terminado el
proceso aparecerá la leyenda “BUILD SUCCEDED”
como lo muestra la figura 2. En el caso de que el
programa no haya presentado errores en de sintaxis. Figura 1. Pestaña Project.

Figura 2. Ventana de compilación satisfactoria.

5. Verificar programa en MPLAB


 Seleccionar MPLAB SIM
Para la simulación del programa realizado se
procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo

Dentro de la simulación en MPLAB se requiere de la


configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo cuaderno
de trabajo en donde se configurarán las entradas y la
naturaleza de las señales que se le van a suministrar
para proceder en la simulación.

Figura 4. Stimulus.
En la figura 5. Se muestra un
ejemplo de configuración para el
Stimulus en el cual el puerto A
sirve está configurado como
entrada y cada uno de los pines
tienen configurados la opción
“Toggle” comportándose como un
interruptor que con un click puede
dar una señal lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo


Otra herramienta por configurar es el “Watch” que nos
servirá para observar los cambios que presentan cada
uno de los registros presentes dentro del
microcontrolador. Estos registros pueden ser
configurados de tal forma que nos muestran el valor en
binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View”
en donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se
muestra en la figura 7, agregando los registros que se
quiere observar su comportamiento y añadiendo
pestañas dependiendo de la forma en la que se desea
que se muestre el valor que está tomando el registro en
diferentes momentos de la simulación.

Figura 6. Watch.

Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

 Probar las configuraciones


Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en pasar lo que se tiene en el puerto
A a la variable y posteriormente realizar la comparación para encender o apagar la lámpara
y gracias al simulador de MPLAB se comprobó el correcto funcionamiento del programa.
7. Principales registros del PIC16F887 (STATUS)

Hemos indicado que la memoria de los datos del microcontrolador se divide en bancos de
memoria, las posiciones inferiores están destinadas a los registros especiales de función
(SPECIAL FUNCTION REGISTER). En esta sección profundizaremos un poco más acerca
de los principales registros y observaremos el uso que se les puede dar en el desarrollo del
programa.

El registro de Estado (STATUS)


El STATUS es un archivo o registro que ocupa la posición la posición 0x03 de los bancos
de memoria:

El STATUS es un registro del microcontrolador que almacena información relacionada con:


 La última operación aritmética lógica realizada en la ALU
 El estado de Reset del microcontrolador
 El banco de memoria que actualmente se tiene en uso

El STATUS contiene los siguientes bits:

Bit 7: IRP Register Bank Select Bit (es un bit que se usa para las operaciones de
direccionamiento indirecto 0 = Si se trabaja sobre el banco 0 ó 1 (posiciones de memoria
que van desde 00h hasta FFh) 1 = Si trabajamos con el banco 2 ó 3 (posiciones de memoria
que van desde 100h hasta 1FFh)

Bit 6-5: RP1, RP0 Register Bank Select (bits usando en el direccionamiento directo)
00 = Banco 0, (posiciones de memoria 00-7Fh)
01 = Banco 1, (posiciones de memoria 80-FFh)
10 = Banco 2, (posiciones de memoria 100-17Fh)
11 = Banco 3, (posiciones de memoria 180-1FFh)
Los bancos pueden contener hasta 128 posiciones.

Bit 4: -T0 Time out bit


1 = Asume el valor de 1 después de encenderse el PIC o por la aplicación de la instrucción
CLRWDT o por la aplicación de la instrucción SLEEP
0 = Cuando se ha vencido el periodo programado en el Watch Dog

Bit 3: -PD Power down bit


1 = Después de encender el microcontrolador o por la aplicación de una instrucción
CLRWDT
0 = Cuando se ejecuta la instrucción SLEEP
Bit 2: Z Zero Bit
1 = Cuando el resultado de una instrucción aritmética lógica da por resultado 0.
0 = Si el resultado de la operación aritmética o lógica da por resultado un valor distinto de
cero
Bit 1: DC Digit carry/borrow bit usado como acarreo en las instrucciones de suma (ej:
ADDWF y ADDWL) en caso se lleve a cabo una operación de resta se procede a tomarlo
como bit de préstamo). Este bit trabaja con los 4 bits inferiores o nible bajo.
1 = Si se ha producido el acarreo en el nible bajo.
0 = No se ha producido acarreo en el nible bajo
Bit 0: C: Carry/borrow bit Similar al anterior con la diferencia que toma el acarreo de todo
el registro es decir trabaja en 8 bits.
1 = Si se ha producido el acarreo en el nible bajo
0 = No se ha producido acarreo en el nible bajo

Los tres bits que se encuentran en la parte inferior son bits que reportan el estado de la
ALU tras la ejecución de una instrucción. Estos bits son de lectura. Los bits pueden ser de
escritura si y solo si la instrucción no afecta el estado de los bits Z, DC y C. Las instrucciones
que no afectan al STATUS son BCF, BSF, SWAP y MOVWF. Si quisiéramos colocar todos
los bits del STATUS a 0 lógico la aplicación de la instrucción CLRF STATUS fallaría por
que la instrucción afecta a los bis Z, DC y C. De hecho los bits C y DC conservarían el valor
previo a la aplicación de la instrucción CRLF STATUS en tanto que el bit Z se colocaría a 1
por que el resultado de la última operación fue un 0.
Los bits que se encuentran en medio (-T0 y -PD) son usados para registrar si el
microcontrolador está trabajando y cuál es el modo de operación. El microcontrolador puede
estar encendido y a su vez tiene dos modos de operación: activo y reposo (o bajo consumo).
Los bits también reportan el estado del WATCHDOG, cuando el periodo de tiempo del
WATCHDOG se ha vencido el bit -T0 se coloca a 1. Es necesario indicar que ambos bits
son solo de lectura y se modifican en función al modo de operación de microcontrolador
(visto desde el punto de vista de la alimentación o consumo de energía). En consecuencia
la aplicación de la instrucción CLRF STATUS fallaría también porque no es posible
modificar el estado de los bits.
Los bits localizados en la parte superior del registro STATUS son relacionados al uso de
los bancos la combinación de los mismo determina cual es el banco actual con el que
estamos trabajando. Las instrucciones recomendables para manipular los bits son BSF y
BCF. Los bits superiores son de lectura y escritura.

Observaciones
Cuando se aplican las instrucciones de rotación de bits a la izquierda o derecha (RLF o
RRF) el bit de C es el valor que se emplea para llenar el agujero producido por la instrucción,
motivo por el cual es necesario colocar el bit C a cero o uno lógico dependiendo si
deseamos que la posición libre sea cubierta por uno de los dos valores.
La instrucción SWAPF no modifica el estado de los bits Z, DC y C pero eso no implica que
la aplicación de la instrucción sobre el STATUS vaya a lograr el intercambio de los nibles.
Al aplicar las instrucciones seguramente los bits IRP, RP1, RP0, Z, DC y C se
intercambiarán uno a uno pero los bits -T0 y -PD no serán intercambiados ya que son de
lectura.
Cuando una instrucción es ejecutada puede afectar el estado del STATUS, este hecho
resulta aparentemente irrelevante más la ayuda que presta es valiosa en la elaboración de
soluciones por ejemplo:

Considere la instrucción:

movf REGISTRO, 1. (O lo que es lo mismo movf REGISTRO, F)


La instrucción lleva el contenido desde el file REGISTRO hacia el W (registro de trabajo) y
nuevamente lo deja donde lo encontró (REGISTRO). Esta operación parece intrascendente
pero es una forma bastante práctica y simplificada de preguntar si el valor contenido en el
file REGISTRO es 0. Porque recordemos que el bit Z se pone a 1 si la última instrucción
aplicada en la ALU dio como resultado 0. En este caso en particular solo se movió entonces
si se movió un 0 y se devolvió a su posición seguramente el bit Z será colocado 1.

8. Ejercicios.

Ejercicio 1: Suponga una lámpara que debe ser prendida o apagada desde tres
puntos. Diseñe un programa que la encienda si y solo si hay dos interruptores
activados.

Supongamos que tenemos los tres interruptores dispuestos en el PORTA (RA0, RA1 y
RA2) y definimos la línea RA3 como salida tendríamos la siguiente tabla de
funcionamiento operacional:

Salida Entrada
RA3 RA2 RA1 RA0
0 0 0 0
0 0 0 1
0 0 1 0
1 0 1 1
0 1 0 0
1 1 0 1
1 1 1 0
0 1 1 1

En función a la tabla de verdad anterior podríamos establecer el siguiente algoritmo:

1. Configurar puertos (RA0-2 entradas; RA3 salida)


2. Limpiar puertos
3. Definir variable
4. Guardar valor leído en PORTA a W
5. Cargar valor de W en variable
6. Realizar las comparaciones con 0x03, 0x05, 0x06.
 Variable – 0x03 == 0
 Variable – 0x05 == 0 RA3 = 1
 Variable – 0x06 == 0
 Otra combinación RA3 = 0
7. Regresar al paso 4
Definiciones previas.

Como se puede apreciar en el algoritmo anterior es necesario contar con instrucciones


que nos permitan realizar bifurcaciones en el programa. Para ello revisaremos las
instrucciones de control de salto y bifurcación.
BTFSS Bit Test f, Skip if Set
Sintaxis: [etiqueta] SBTFSS f, d
Operandos: 0 <= f <= 127
0<= b <= 7
Operación: Salta si es (f<b>)=1

Bits afectados en el STATUS: None


Descripción: Si el bit 'b' del registro 'f' es 0 entonces la siguiente instrucción es ejecutada.
Si el bit 'b' del registro 'f' es 1 la siguiente instrucción es descartada y una instrucción NOP
es ejecutada en su lugar lo que ocasiona que esta instrucción ocupe 2 ciclos de
instrucción.

BTFSC Bit Test f, Skip if Clear


Es la instrucción complementaria a la anterior, la sintaxis y demás valores son
exactamente los mismos solo que en este caso el salto se produce cuando el bit 'b' del
registro 'f' es 0.

SUBWF Substrae W de f
Sintaxis: [etiqueta] SUBWF f, d
Operandos: 0 <= f <= 127 d= [0,1]
Operación: (f) – (W) → (destino)

Creación de una variable


La mayor parte de los programas manejan datos, los datos son guardados en variables.
Las variables siempre se crean en una zona de memoria tipo RAM. En el caso del
PIC16F887 disponemos de espacio en todos los bancos de memoria a partir de la
posición 0x20. En el programa podemos crear una variable en la posición la 0x20 para
almacenar datos o efectuar operaciones aritméticas lógicas en ella:

movwf 0x20; RAM [0x20] =W


bsf 0x20, 5; RAM [0x20] bit 5 =1
Pese a que el manejo es correcto este no resulta el más apropiado sobre todo si el
programa es extenso.
Para hacerlo simple nos apoyamos en la directiva de compilación EQU que permite definir
equivalencias:
VARIABLE EQU 0x20
movwf VARIABLE; VARIABLE]=W
bsf VARIABLE, 5; VARIABLE bit 5 =1
Diseño del programa.

Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa
3. Compilar programa

Una vez realizado el programa se procede a compilarlo y para ello se dirige el cursor a la
pestaña “Project” y posteriormente se selecciona la opción
“Quick nombre del archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el
proceso de compilación. Una vez terminado el proceso
aparecerá la leyenda “BUILD SUCCEDED” como lo muestra
la figura 2. En el caso de que el programa no haya
presentado errores en de sintaxis.
Figura 1. Pestaña Project.

Figura 2. Ventana de compilación satisfactoria.


4. Verificar programa en MPLAB
 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo

Dentro de la simulación en MPLAB se requiere de la


configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo cuaderno
de trabajo en donde se configurarán las entradas y la
naturaleza de las señales que se le van a suministrar
para proceder en la simulación.

Figura 4. Stimulus.
En la figura 5. Se muestra un
ejemplo de configuración para el
Stimulus en el cual el puerto A
sirve está configurado como
entrada y cada uno de los pines
tienen configurados la opción
“Toggle” comportándose como un
interruptor que con un click puede
dar una señal lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo

Otra herramienta por configurar es el “Watch” que nos


servirá para observar los cambios que presentan cada
uno de los registros presentes dentro del
microcontrolador. Estos registros pueden ser
configurados de tal forma que nos muestran el valor en
binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View”
en donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se
muestra en la figura 7, agregando los registros que se
quiere observar su comportamiento y añadiendo
pestañas dependiendo de la forma en la que se desea
que se muestre el valor que está tomando el registro en
diferentes momentos de la simulación.

Figura 6. Watch.
Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

 Probar las configuraciones

Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en pasar lo que se tiene en el puerto
A a la variable y posteriormente realizar la comparación para encender o apagar la lámpara
y gracias al simulador de MPLAB se comprobó el correcto funcionamiento del programa.
Simulación en Proteus

1. Realizar el circuito

Figura 10. Circuito en Proteus del programa 1 en PIC.

2. Cargar el archivo .HEX en el PIC


Para cargar el archivo obtenido
de MPLAB se da doble click
sobre le Microcontrolador y
aparecerá una pestaña en la que
estará la opción “Program File”,
dando click en el icono con una
carpeta se abrirá el
administrador de archivos
permitiéndonos seleccionar el
archivo que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.


3. Simular

Figura 12. Simulación del ejercicio 1 en PIC.

4. Circuito en Protoboard.
Se armó el circuito en protoboard y quedando de la siguiente manera.

Figura 13. Conexión del ejercicio 1 en PIC.

5. Programación del PIC con el software PG4UW


Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.
Figura 14. Selección del programador.

Posteriormente se procede a elegir el


microcontrolador utilizando la opción “Select
device…” ubicada en la pestaña “Device” como se
muestra en la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar
para este caso se procede a buscar el PIC16F887
y se selecciona.

Figura 15. Pestaña device.


Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.


Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.


Ejercicio 2. Plantear la solución, elaborar el diagrama de flujo y programa en
lenguaje ensamblador para un PIC16F887 con las siguientes características:
a) Se cuenta con 4 entradas PORT B0-B3 y una salida digital PORTB4.
b) La salida S2 enciende con Fs2= [0, 5, 9, 11, 14]
Entradas y salidas
Salida Entrada
RB4 RB3 RB2 RB1 RB0
1 0 0 0 0
1 0 1 0 1
1 1 0 0 1
1 1 0 1 1
1 1 1 1 0
Para las demás combinaciones RB4 será 0
Algoritmo

1. Seleccionar microcontrolador y librerías


2. Configurar puertos (RB0-3 entradas; RB4 salida)
3. Limpiar puertos
4. Definir variable (MPORTB)
5. Leer puertos.
6. Guardar valor leído en PORTB en MPORTB
7. Realizar las comparaciones con 0x03, 0x05, 0x06.
 MPORTB = 0x00
 MPORTB = 0x05 RB4 = 1
 MPORTB = 0x09
 MPORTB = 0x0B
 MPORTB = 0x0E
 Otra combinación RB4 = 0
Regresar al paso 5.

Definiciones previas:
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:
Para esta aplicación utilizamos las siguientes nuevas instrucciones:
MOVF f,w mueve el dato del registro f al registro W
BCF f,d pone en 0 el bit d del registro f
SUBWF f,W resta el dato en el registro f menos el dato del registro de trabajo
BTFSC f,d si el bit d del registro f es cero salta una instrucción si no continua
con la siguiente
BSF f,d pone en 1 el bit d del registro f

Diseño del programa:


Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa
3. Compilar programa

Una vez realizado el programa se procede a


compilarlo y para ello se dirige el cursor a la pestaña
“Project” y posteriormente se selecciona la opción
“Quick nombre del archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el
proceso de compilación. Una vez terminado el proceso
aparecerá la leyenda “BUILD SUCCEDED” como lo
muestra la figura 2. en el caso de que el programa no haya
presentado errores en de sintaxis. Figura 1. Pestaña Project.

Figura 2. Ventana de compilación satisfactoria.

4. Verificar programa en MPLAB


 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo


Dentro de la simulación en MPLAB se requiere de la
configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo cuaderno
de trabajo en donde se configurarán las entradas y la
naturaleza de las señales que se le van a suministrar
para proceder en la simulación.

Figura 4. Stimulus.

En la figura 5. se muestra un ejemplo de configuración


para el Stimulus en el cual el puerto B sirve esta
configurado como entrada y cada uno de los pines
tienen configurados la opción “Toggle” comportándose
como un interruptor que con un click puede dar una
señal lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo


Otra herramienta por configurar es el “Watch” que nos servirá para observar los cambios
que presentan cada uno de los registros presentes
dentro del microcontrolador. Estos registros pueden
ser configurados de tal forma que nos muestran el
valor en binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View”
en donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se
muestra en la figura 7, agregando los registros que se
quiere observar su comportamiento y añadiendo
pestañas dependiendo de la forma en la que se desea
que se muestre el valor que esta tomando el registro
en diferentes momentos de la simulación.

Figura 6. Watch.

Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

 Probar las configuraciones


Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en encender el PIN RB4 de nuestro
puerto B cuando la combinación de los puertos RB0-RB3 sea la correcta y gracias al
simulador de MPLAB se comprobó el correcto funcionamiento del programa.

Simulación en Proteus

1. Realizar el circuito
Figura 10. Circuito en Proteus del programa 2 en PIC.

2. Cargar el archivo .HEX en el PIC

Para cargar el archivo obtenido de MPLAB se


da doble click sobre le Microcontrolador y
aparecerá una pestaña en la que estará la
opción “Program File”, dando click en el icono
con una carpeta se abrirá el administrador de
archivos permitiéndonos seleccionar el archivo
que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.

3. Simular
Figura 12. Simulación del ejercicio 2 en PIC.

4. Circuito en Protoboard.
Se armo el circuito en protoboard y quedando de la siguiente manera.

Figura 13. Conexión del ejercicio 2 en PIC.

Programación del PIC con el software PG4UW


Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.
Figura 14. Selección del programador.

Posteriormente se procede a elegir el


microcontrolador utilizando la opción “Select
device…” ubicada en la pestaña “Device” como se
muestra en la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar
para este caso se procede a buscar el PIC16F887
y se selecciona.

Figura 15. Pestaña device.


Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.


Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.


Ejercicio 3. Plantear la solución, elaborar el diagrama de flujo y programa en
lenguaje ensamblador para un PIC16F887 con las siguientes características:
a) Se cuenta con 4 entradas PORT B0-B3 y una salida digital PORTB4.
b) La salida S2 enciende con Fs2= [1, 3, 7, 10, 15]
Entradas y salidas

Salida Entrada
RB4 RB3 RB2 RB1 RB0
1 0 0 0 1
1 0 0 1 1
1 0 1 1 1
1 1 0 1 0
1 1 1 1 1
Para las demás combinaciones RB4 será 0

Algoritmo

1. Seleccionar microcontrolador y librerías


2. Configurar puertos (RB0-3 entradas; RB4 salida)
3. Limpiar puertos
4. Definir variable (MPORTB)
5. Leer puertos.
6. Guardar valor leído en PORTB en MPORTB
7. Realizar las comparaciones con 0x03, 0x05, 0x06.
 MPORTB = 0x01
 MPORTB = 0x03 RB4 = 1
 MPORTB = 0x07
 MPORTB = 0x0A
 MPORTB = 0x0F
 Otra combinación RB4 = 0
8. Regresar al paso 5.
Definiciones previas:
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:

Para esta aplicación utilizamos las siguientes nuevas instrucciones:


MOVF f,w mueve el dato del registro f al registro W
BCF f,d pone en 0 el bit d del registro f
SUBWF f,W resta el dato en el registro f menos el dato del registro de trabajo
BTFSC f,d si el bit d del registro f es cero salta una instrucción si no continua
con la siguiente
BSF f,d pone en 1 el bit d del registro f

Diseño del programa:


Programación en MPLAB

5. Crear nuevo archivo


6. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa
7. Compilar programa

Una vez realizado el programa se procede a


compilarlo y para ello se dirige el cursor a la pestaña
“Project” y posteriormente se selecciona la opción
“Quick nombre del archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el
proceso de compilación. Una vez terminado el proceso
Figura 1. Pestaña Project.
aparecerá la leyenda “BUILD SUCCEDED” como lo muestra
la figura 2. en el caso de que el programa no haya presentado
errores en de sintaxis.

Figura 2. Ventana de compilación satisfactoria.

8. Verificar programa en MPLAB


 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo


Dentro de la simulación en MPLAB se requiere de la
configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo cuaderno
de trabajo en donde se configurarán las entradas y la
naturaleza de las señales que se le van a suministrar
para proceder en la simulación.

Figura 4. Stimulus.

En la figura 5. se muestra un ejemplo de configuración


para el Stimulus en el cual el puerto B sirve esta
configurado como entrada y cada uno de los pines
tienen configurados la opción “Toggle” comportándose
como un interruptor que con un click puede dar una
señal lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo


Otra herramienta por configurar es el “Watch” que nos
servirá para observar los cambios que presentan cada
uno de los registros presentes dentro del
microcontrolador. Estos registros pueden ser
configurados de tal forma que nos muestran el valor en
binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View” en
donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se muestra
en la figura 7, agregando los registros que se quiere
observar su comportamiento y añadiendo pestañas
dependiendo de la forma en la que se desea que se
muestre el valor que esta tomando el registro en
diferentes momentos de la simulación.

Figura 6. Watch.

Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

 Probar las configuraciones


Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en encender el PIN RB4 de nuestro
puerto B cuando la combinación de los puertos RB0-RB3 sea la correcta y gracias al
simulador de MPLAB se comprobó el correcto funcionamiento del programa.

Simulación en Proteus

5. Realizar el circuito

Figura 10. Circuito en Proteus del programa 3 en PIC.


6. Cargar el archivo .HEX en el PIC

Para cargar el archivo obtenido de MPLAB se


da doble click sobre le Microcontrolador y
aparecerá una pestaña en la que estará la
opción “Program File”, dando click en el icono
con una carpeta se abrirá el administrador de
archivos permitiéndonos seleccionar el archivo
que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.


7. Simular

Figura 12. Simulación del ejercicio 3 en PIC.

8. Circuito en Protoboard.
Se armo el circuito en protoboard y quedando de la siguiente manera.
Figura 13. Conexión del ejercicio 3 en PIC.

Programación del PIC con el software PG4UW


Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.

Figura 14. Selección del programador.


Posteriormente se procede a elegir el
microcontrolador utilizando la opción “Select
device…” ubicada en la pestaña “Device” como se
muestra en la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar
para este caso se procede a buscar el PIC16F887
y se selecciona.

Figura 15. Pestaña device.


Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.


Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.


Ejercicio 4. Diseñar un programa que simule un comparador de 4 líneas.
Entradas y salidas.

Algoritmo

1. Configurar puertos (RB0-7 entradas; RA0-2 salida)


2. Limpiar puertos
3. Definir variables (Dato_A, Dato_B, M_PortB)
4. Separar los Nibles (Dato A = Nible Bajo | Dato B= Nible Alto | Invertir el Dato
B con Swap)
5. Hacer la comparación de Dato A – Dato B
Si Z = 1, A=B, Encender RA1
Si Z = 0 y C=0, A<B, Encender RA0
Si Z = 0 y C=1, A>B, Encender RA2
6. Regresar al paso 4.
Definiciones previas:
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:

Para nuestra práctica vamos a utilizar el puerto B del PIC como entradas y el puerto A
como salidas.
Para esta aplicación utilizamos las siguientes nuevas instrucciones:
MOVF f,w mueve el dato del registro f al registro W
MOVF w,f mueve el dato del registro w al registro f
BCF f,d pone en 0 el bit d del registro f
BSF f,d pone en 1 el bit d del registro f
BTFSC f,d si el bit d del registro f es cero salta una instrucción si no continua
con la siguiente
BTFSS f,d si el bit d del registro f es uno salta una instrucción si no continua
con la siguiente
SWAP f Intercambia los Nibles altos y bajos del registro
ANDWF Hace la función lógica AND entre el registro de trabajo y el registro f

Diseño del programa:


Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa
3. Compilar programa

Una vez realizado el programa se procede a compilarlo y para


ello se dirige el cursor a la pestaña “Project” y posteriormente
se selecciona la opción “Quick nombre del archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el proceso
de compilación. Una vez terminado el proceso aparecerá la
leyenda “BUILD SUCCEDED” como lo muestra la figura 2. en
el caso de que el programa no haya presentado errores en
de sintaxis. Figura 1. Pestaña Project.

Figura 2. Ventana de compilación satisfactoria.

4. Verificar programa en MPLAB


 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo


Dentro de la simulación en MPLAB se requiere de la
configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo cuaderno
de trabajo en donde se configurarán las entradas y la
naturaleza de las señales que se le van a suministrar
para proceder en la simulación.

Figura 4. Stimulus.

En la figura 5. se muestra un ejemplo de


configuración para el Stimulus en el cual
el puerto B sirve esta configurado como
entrada y cada uno de los pines tienen
configurados la opción “Toggle”
comportándose como un interruptor que
con un click puede dar una señal lógica
binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo


Otra herramienta por configurar es el “Watch” que nos
servirá para observar los cambios que presentan cada
uno de los registros presentes dentro del
microcontrolador. Estos registros pueden ser
configurados de tal forma que nos muestran el valor en
binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View” en
donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se
muestra en la figura 7, agregando los registros que se
quiere observar su comportamiento y añadiendo
pestañas dependiendo de la forma en la que se desea
que se muestre el valor que esta tomando el registro en
diferentes momentos de la simulación.

Figura 6. Watch.

Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.


 Probar las configuraciones

Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en comparar los dos números de 4
bits almacenados en los nibles alto y bajo del puerto B, y dependiendo de la comparación
se encenderán una de las 3 lamparas ubicadas en el PortA, representando mayor, menor
o igualdad y gracias al simulador de MPLAB se comprobó el correcto funcionamiento del
programa.

Simulación en Proteus

1. Realizar el circuito
Figura 10. Circuito en Proteus del programa 4 en PIC.

2. Cargar el archivo .HEX en el


PIC
Para cargar el archivo obtenido de
MPLAB se da doble click sobre le
Microcontrolador y aparecerá una
pestaña en la que estará la opción
“Program File”, dando click en el
icono con una carpeta se abrirá el
administrador de archivos
permitiéndonos seleccionar el
archivo que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.

3. Simular
Figura 12. Simulación del ejercicio 4 en PIC.

4. Circuito en Protoboard.
Se armó el circuito en protoboard y quedando de la siguiente manera.

Figura 13. Conexión del ejercicio 5 en PIC.

Figura 13. Conexión del ejercicio 4 en PIC.

Programación del PIC con el software PG4UW


Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.

Figura 14. Selección del programador.

Posteriormente se procede a elegir el


microcontrolador utilizando la opción “Select
device…” ubicada en la pestaña “Device” como se
muestra en la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar
para este caso se procede a buscar el PIC16F887
y se selecciona.

Figura 15. Pestaña device.


Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.


Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.


Ejercicio 5. Planteamiento de la aplicación
Diseñar un programa que haga la suma de un número de 5 bits y uno de 4 bits:
a) Uno en el que el resultado sea mostrado en binario a través de leds.
b) Uno en el que el resultado sea mostrado en decimal a través de 2 displays de 8
segmentos
Entradas y salidas

Resultado RC3 RC2 RC1 RC0 RB4 RB3 RB2 RB1 RB0
00000010 0 0 0 1 0 0 0 0 1
00000100 0 0 1 0 0 0 0 1 0
00001000 0 1 0 0 0 0 1 0 0
00010111 1 0 1 0 0 1 1 0 1
00101110 1 1 1 1 1 1 1 1 1

Algoritmo
a) El resultado sea mostrado en binario a través de leds.
1. Seleccionar microcontrolador y librerías
2. Configurar puertos (Puerto B,C entradas y Puerto D salidas)
3. Limpiar puertos
4. Definir variables (MPORTB y MPORTC)
5. Leer port B y mandarlo a la variable MPORTB (enmascarado con AND
b'00011111')
6. Leer port C y mandarlo a la variable MPORTC (enmascarado con AND
b'00001111')
7. Realizamos la suma de MPORTB y MPORTC.
8. Mostrar el resultado en portD.
9. Regresar al paso 5.
Definiciones previas:
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:

El visualizador de siete segmentos (llamado también display por calco del inglés) es
una forma de representar caracteres en equipos electrónicos. Está compuesto de siete
segmentos que se pueden encender o apagar individualmente. Cada segmento tiene la
forma de una pequeña línea. Se podría comparar a escribir números con cerillas o
fósforos de madera.

El visualizador de 7 segmentos es un componente que se utiliza para la representación de


caracteres (normalmente números) en muchos dispositivos electrónicos, debido en gran
medida a su simplicidad. Aunque externamente su forma difiere considerablemente de un
led típico, internamente están constituidos por una serie de leds con unas determinadas
conexiones internas, estratégicamente ubicados de tal forma que forme un número '8'.

Segmentos e identificación de los mismos.

Cada uno de los segmentos que forman la pantalla están marcados con siete primeras
letras del alfabeto ('a'-'g'), y se montan de forma que permiten activar cada segmento por
separado, consiguiendo formar cualquier dígito numérico. A continuación se muestran
algunos ejemplos:

 Si se activan o encienden todos los segmentos se forma el número "8".


 Si se activan sólo los segmentos: "a, b, c, d, e, f," se forma el número "0".
 Si se activan sólo los segmentos: "a, b, g, e, d," se forma el número "2".
 Si se activan sólo los segmentos: "b, c, f, g," se forma el número "4".

Para esta aplicación utilizamos las siguientes nuevas instrucciones:


MOVF f,w mueve el dato del registro f al registro W
MOVF w,f mueve el dato del registro w al registro f
BCF f,d pone en 0 el bit d del registro f
BSF f,d pone en 1 el bit d del registro f
ANDWF Hace la función lógica AND entre el registro de trabajo y el registro f
ADDWF Hace la función aritmética de suma entre el registro de trabajo y el
registro f
INCF Incrementa el registro f en +1
CALL Nombre Llama a una subrutina definida en nuestro programa
SUBWF f,W resta el dato en el registro f menos el dato del registro de trabajo
BTFSS f,d si el bit d del registro f es 1 salta una instrucción si no continua con
la siguiente

Diseño del programa:


Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa
3. Compilar programa

Una vez realizado el programa se procede a compilarlo y


para ello se dirige el cursor a la pestaña “Project” y
posteriormente se selecciona la opción “Quick nombre del
archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el
proceso de compilación. Una vez terminado el proceso
aparecerá la leyenda “BUILD SUCCEDED” como lo muestra
la figura 2. en el caso de que el programa no haya
presentado errores en de sintaxis. Figura 1. Pestaña Project.

Figura 2. Ventana de compilación satisfactoria.


4. Verificar programa en MPLAB
 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo

Dentro de la simulación en MPLAB se requiere de la


configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo cuaderno
de trabajo en donde se configurarán las entradas y la
naturaleza de las señales que se le van a suministrar
para proceder en la simulación.

Figura 4. Stimulus.
En la figura 5. se muestra un ejemplo de
configuración para el Stimulus en el
cual el puerto B y C sirven y estan
configurado como entradas y cada uno
de los pines tienen configurados la
opción “Toggle” comportándose como
un interruptor que con un click puede
dar una señal lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo

Otra herramienta por configurar es el “Watch” que nos


servirá para observar los cambios que presentan cada uno
de los registros presentes dentro del microcontrolador.
Estos registros pueden ser configurados de tal forma que
nos muestran el valor en binario para cada uno de sus 8
bites.
Para abrir la ventana se debe de ir a la opción “View” en
donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta herramienta
la cual se debe configurar, como se muestra en la figura 7,
agregando los registros que se quiere observar su
comportamiento y añadiendo pestañas dependiendo de la
forma en la que se desea que se muestre el valor que esta
tomando el registro en diferentes momentos de la
simulación.

Figura 6. Watch.

Figura 7. Ventana Watch.


 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

 Probar las configuraciones

Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en realizar la suma de un número de


5 bits del PuertoB y uno de 4 bits del PuertoC y gracias al simulador de MPLAB se comprobó
el correcto funcionamiento del programa.

Simulación en Proteus

1. Realizar el circuito
Figura 10. Circuito en Proteus del programa 5a en PIC.

2. Cargar el archivo .HEX en el PIC


Para cargar el archivo obtenido de
MPLAB se da doble click sobre le
Microcontrolador y aparecerá una
pestaña en la que estará la opción
“Program File”, dando click en el
icono con una carpeta se abrirá el
administrador de archivos
permitiéndonos seleccionar el
archivo que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.

3. Simular
Figura 12. Simulación del ejercicio 5a en PIC.

 Circuito en Protoboard.
Se armo el circuito en protoboard y quedando de la siguiente manera.

Figura 13. Conexión del ejercicio 5a en PIC.

Programación del PIC con el software PG4UW


Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.

Figura 14. Selección del programador.

Posteriormente se procede a elegir el


microcontrolador utilizando la opción “Select device…”
ubicada en la pestaña “Device” como se muestra en
la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar para
este caso se procede a buscar el PIC16F887 y se
selecciona.

Figura 15. Pestaña device.


Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.


Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.


Algoritmo
b) Resultado sea mostrado en decimal a través de 2 displays de 8 segmentos.
1. Seleccionar microcontrolador y librerías
2. Configurar puertos (Puerto A, B entradas y Puerto C, D salidas a excepción
de RC7 Y RD7 que son declaradas como entradas porque no se usaran)
3. Limpiar puertos
4. Definir variables (MPORTA, MPORTB, UNI, DEC)
5. Leer port A y mandarlo a la variable MPORTA (enmascarado con AND
b'00011111')
6. Leer port B y mandarlo a la variable MPORTB (enmascarado con AND
b'00001111')

7. Realizamos la suma de MPORTA y MPORTB.


8. Llamamos a la subrutina conversión a bcd.y operación (separa nuestras
decenas (DEC) y unidades (UNI))
9. Llamamos a la subrutina display donde están nuestra tabla para el display.
10. Mostramos las decenas en el puerto C y las unidades en el Puerto D.
11. Regresar al paso 5.
Definiciones previas:
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:

El visualizador de siete segmentos (llamado también display por calco del inglés) es
una forma de representar caracteres en equipos electrónicos. Está compuesto de siete
segmentos que se pueden encender o apagar individualmente. Cada segmento tiene la
forma de una pequeña línea. Se podría comparar a escribir números con cerillas o
fósforos de madera.

El visualizador de 7 segmentos es un componente que se utiliza para la representación de


caracteres (normalmente números) en muchos dispositivos electrónicos, debido en gran
medida a su simplicidad. Aunque externamente su forma difiere considerablemente de un
led típico, internamente están constituidos por una serie de leds con unas determinadas
conexiones internas, estratégicamente ubicados de tal forma que forme un número '8'.

Segmentos e identificación de los mismos.

Cada uno de los segmentos que forman la pantalla están marcados con siete primeras
letras del alfabeto ('a'-'g'), y se montan de forma que permiten activar cada segmento por
separado, consiguiendo formar cualquier dígito numérico. A continuación se muestran
algunos ejemplos:

 Si se activan o encienden todos los segmentos se forma el número "8".


 Si se activan sólo los segmentos: "a, b, c, d, e, f," se forma el número "0".
 Si se activan sólo los segmentos: "a, b, g, e, d," se forma el número "2".
 Si se activan sólo los segmentos: "b, c, f, g," se forma el número "4".

Para esta aplicación utilizamos las siguientes nuevas instrucciones:


MOVF f,w mueve el dato del registro f al registro W
MOVF w,f mueve el dato del registro w al registro f
BCF f,d pone en 0 el bit d del registro f
BSF f,d pone en 1 el bit d del registro f
ANDWF Hace la función lógica AND entre el registro de trabajo y el registro f
ADDWF Hace la función aritmética de suma entre el registro de trabajo y el
registro f
INCF Incrementa el registro f en +1
CALL Nombre Llama a una subrutina definida en nuestro programa
SUBWF f,W resta el dato en el registro f menos el dato del registro de trabajo
BTFSS f,d si el bit d del registro f es 1 salta una instrucción si no continua con
la siguiente

Diseño del programa:


Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa
3. Compilar programa

Una vez realizado el programa se procede a compilarlo y


para ello se dirige el cursor a la pestaña “Project” y
posteriormente se selecciona la opción “Quick nombre del
archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el
proceso de compilación. Una vez terminado el proceso Figura 1. Pestaña Project.
aparecerá la leyenda “BUILD SUCCEDED” como lo muestra la figura 2. en el caso de que
el programa no haya presentado errores en de sintaxis.

Figura 2. Ventana de compilación satisfactoria.

4. Verificar programa en MPLAB


 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo

Dentro de la simulación en MPLAB se requiere de la


configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo
cuaderno de trabajo en donde se configurarán las
entradas y la naturaleza de las señales que se le van a
suministrar para proceder en la simulación.
Figura 4. Stimulus.
En la figura 5. se muestra un ejemplo
de configuración para el Stimulus en
el cual el puerto A y B estan
configurados como entrada, los
puertos C y D como salidas y cada
uno de los pines tienen configurados
la opción “Toggle” comportándose
como un interruptor que con un click
puede dar una señal lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo

Otra herramienta por configurar es el “Watch” que nos


servirá para observar los cambios que presentan cada
uno de los registros presentes dentro del
microcontrolador. Estos registros pueden ser
configurados de tal forma que nos muestran el valor
en binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View”
en donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se
muestra en la figura 7, agregando los registros que se
quiere observar su comportamiento y añadiendo
pestañas dependiendo de la forma en la que se desea
que se muestre el valor que esta tomando el registro
en diferentes momentos de la simulación.

Figura 6. Watch.
Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

 Probar las configuraciones


Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en realizar la suma de un número de


5 bits del PuertoB y uno de 4 bits del PuertoC además de mostrarlo a través de 2 displays
de 8 segmentos y gracias al simulador de MPLAB se comprobó el correcto funcionamiento
del programa.

Simulación en Proteus

1. Realizar el circuito
Figura 10. Circuito en Proteus del programa 5b en PIC.

2. Cargar el archivo .HEX en el PIC

Para cargar el archivo obtenido de


MPLAB se da doble click sobre le
Microcontrolador y aparecerá una
pestaña en la que estará la opción
“Program File”, dando click en el icono
con una carpeta se abrirá el
administrador de archivos
permitiéndonos seleccionar el archivo
que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.

3. Simular
Figura 12. Simulación del ejercicio 5b en PIC.

4. Circuito en Protoboard.
Se armo el circuito en protoboard y quedando de la siguiente manera.

Figura 13. Conexión del ejercicio 5b en PIC.

Programación del PIC con el software PG4UW


Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.
Figura 14. Selección del programador.

Posteriormente se procede a elegir el


microcontrolador utilizando la opción “Select
device…” ubicada en la pestaña “Device” como se
muestra en la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar
para este caso se procede a buscar el PIC16F887
y se selecciona.

Figura 15. Pestaña device.


Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.


Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.


Ejercicio 6. Diseñar un programa que nos permita encender y apagar un motor,
dándole prioridad al paro.
a) Uno para un motor de corriente directa.
b) Uno para un motor de corriente alterna.
Entradas y salidas

Salida Entrada
RB2 RB1 (Arranque) RB0 (Paro)
0 0 0
0 0 1
1 1 0
0 1 1

Algoritmo

6. Seleccionar microcontrolador y librerías


1. Configurar puertos (Puerto B0 arranque, B1 paro y B2 salida)
2. Limpiar puertos
3. Definir variables (FLAG1)
4. Leer B1 (Paro por prioridad), si B1 = 1; Flag1=0
5. Leer B0 (Arranque baja prioridad), si B1 = 0 y B0 = 1; Flag1=1
6. Si Flag1 = 0, regresar a 1.1.5.
7. Si Flag1 = 1 y B2 = 1, regresar a 1.1.5.
8. Regresar al paso 4.

Definiciones previas.
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:
Para nuestra práctica vamos a utilizar el puerto A del PIC RA0-RA2 como entradas y RA3
como salida
Para esta aplicación utilizamos las siguientes nuevas instrucciones:
MOVF f,w mueve el dato del registro f al registro W
MOVF w,f mueve el dato del registro w al registro f
BCF f,d pone en 0 el bit d del registro f
BSF f,d pone en 1 el bit d del registro f
BTFSS f,d si el bit d del registro f es 1 salta una instrucción si no continua con
la siguiente

Optoacoplador: También llamado optoaislador o aislador acoplado ópticamente, es un


dispositivo de emisión y recepción que funciona como un interruptor activado mediante la
luz emitida por un diodo LED que satura un componente optoelectrónico, normalmente en
forma de fototransistor o fototriac. De este modo se combinan en un solo dispositivo
semiconductor, un fotoemisor y un fotorreceptor cuya conexión entre ambos es óptica.
Estos elementos se encuentran dentro de un encapsulado que por lo general es del tipo
DIP. Se suelen utilizar para aislar eléctricamente a dispositivos muy sensibles.
La figura de la izquierda muestra un optoacoplador
4N35 formado por un LED y un fototransistor. La
tensión de la fuente de la izquierda y la resistencia en
serie establecen una corriente en el LED emisor
cuando se cierra el interruptor S1. Si dicha corriente
proporciona un nivel de luz adecuado, al incidir sobre
el fototransistor lo saturará, generando una corriente
en R2. De este modo la tensión de salida será igual a
cero con S1 cerrado y a V2 con S1 abierto.

El motor de corriente continua, denominado también motor de corriente directa,


motor CC o motor DC (por las iniciales en inglés direct current), es una máquina que
convierte energía eléctrica en mecánica, provocando un movimiento rotatorio, gracias a la
acción de un campo magnético.
Un motor de corriente continua se compone principalmente de dos partes. El estátor da
soporte mecánico al aparato y contiene los polos de la máquina, que pueden ser o bien
devanados de hilo de cobre sobre un núcleo de hierro, o imanes permanentes. El rotor es
generalmente de forma cilíndrica, también devanado y con núcleo, alimentado con
corriente directa a través de delgas, que están en contacto alternante con escobillas fijas
(también llamadas carbones).
El principal inconveniente de estas máquinas es el mantenimiento, muy costoso y
laborioso, debido principalmente al desgaste que sufren las escobillas al entrar en
contacto con las delgas.
Algunas aplicaciones especiales de estos motores
son los motores lineales, cuando ejercen tracción
sobre un riel, servomotores y motores paso a
paso. Además existen motores de CC sin
escobillas (brushless en inglés) utilizados en el
aeromodelismo por su bajo par motor y su gran
velocidad.
Es posible controlar la velocidad y el par de estos
motores utilizando técnicas de control de motores
de corriente continua.

Se denomina motor de corriente alterna a aquellos motores eléctricos que funcionan


con este tipo de alimentación eléctrica. Un motor es una máquina motriz, esto es, un
aparato que convierte una forma determinada de energía en energía mecánica de
rotación o par. Un motor eléctrico convierte la energía eléctrica en fuerzas de giro por
medio de la acción mutua de los campos magnéticos.

Un generador eléctrico, por otra parte, transforma energía mecánica de rotación en


energía eléctrica y se le puede llamar una máquina generatriz de fem (fuerza eléctrica
motriz). Las dos formas básicas son el generador de corriente continua y el generador de
corriente alterna, este último más correctamente llamado alternador.

Todos los generadores necesitan una máquina motriz (motor) de algún tipo para producir
la fuerza de rotación, por medio de la cual un conductor puede cortar las líneas de fuerza
magnéticas y producir una fem. La máquina más simple de los motores y generadores es
el alternador.
Diseño del programa:
Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa
3. Compilar programa

Una vez realizado el programa se procede a compilarlo y


para ello se dirige el cursor a la pestaña “Project” y
posteriormente se selecciona la opción “Quick nombre del
archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el
proceso de compilación. Una vez terminado el proceso
aparecerá la leyenda “BUILD SUCCEDED” como lo muestra
la figura 2. en el caso de que el programa no haya
presentado errores en de sintaxis. Figura 1. Pestaña Project.

Figura 2. Ventana de compilación satisfactoria.

4. Verificar programa en MPLAB


 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo


Dentro de la simulación en MPLAB se requiere de
la configuración del Stimulus ya que este nos
permitirá generar señales asíncronas para que así
se puedan observar de mejor manera las
condiciones de trabajo del programa, así como sus
respuestas a las diferentes señales que se le dan
por medio del puerto configurado como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo
cuaderno de trabajo en donde se configurarán las
entradas y la naturaleza de las señales que se le
van a suministrar para proceder en la simulación.

Figura 4. Stimulus.

En la figura 5. se muestra un ejemplo de


configuración para el Stimulus en el cual el puerto
B sirve como entradas (RB0-RB1), como salidas
(RB2) y cada uno de los pines tienen configurados
la opción “Toggle” comportándose como un
interruptor que con un click puede dar una señal
lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo


Otra herramienta por configurar es el “Watch” que nos
servirá para observar los cambios que presentan cada
uno de los registros presentes dentro del
microcontrolador. Estos registros pueden ser
configurados de tal forma que nos muestran el valor
en binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View”
en donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se
muestra en la figura 7, agregando los registros que se
quiere observar su comportamiento y añadiendo
pestañas dependiendo de la forma en la que se desea
que se muestre el valor que esta tomando el registro
en diferentes momentos de la simulación.

Figura 6. Watch.

Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

 Probar las configuraciones


Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en manipular un motor por medio del
microcontrolador con un botón de arranque y otro de paro, dándole prioridad al botón de
paro y gracias al simulador de MPLAB se comprobó el correcto funcionamiento del
programa.

Simulación en Proteus

1. Realizar el circuito
Figura 10. Circuito en Proteus del programa 6 en PIC.

2. Cargar el archivo .HEX en el PIC


Para cargar el archivo obtenido de
MPLAB se da doble click sobre le
Microcontrolador y aparecerá una
pestaña en la que estará la opción
“Program File”, dando click en el icono
con una carpeta se abrirá el
administrador de archivos
permitiéndonos seleccionar el archivo
que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.

3. Simular
Figura 12. Simulación del ejercicio 6 en PIC.

4. Circuito en Protoboard.
Se armo el circuito en protoboard y quedando de la siguiente manera.

Figura 13. Conexión del ejercicio 6 en PIC.

Programación del PIC con el software PG4UW


Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.
Figura 14. Selección del programador.

Posteriormente se procede a elegir el


microcontrolador utilizando la opción “Select
device…” ubicada en la pestaña “Device” como se
muestra en la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar
para este caso se procede a buscar el PIC16F887
y se selecciona.

Figura 15. Pestaña device.


Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.


Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.


Ejercicio 7. Crear un programa de control para determinar la secuencia de una placa
acoplada a un tornillo sin fin conectado a un motor con 4 sensores magnéticos.
Secuencia

S1 S2 S3 S4
Arranque

Algoritmo

1. Seleccionar microcontrolador y librerías


2. Configurar puertos (Puerto B, RB0-1 Entradas, RB2-3 Salidas)
3. Limpiar puertos
4. Definir variables (FLAG1)
5. Leer datos de entrada (Botón de Paro o Botón de Arranque)
6. Si el programa empieza en la posición inicial ejecutar secuencia, si no,
desactivar motor 1 y activar motor 2 hasta ponerlo en posición inicial.
7. Preguntar por el botón de paro en la ejecución de cada paso de la secuencia.
8. Si el botón de paro es presionado, se dirigirá al paso 5.

Definiciones previas.
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:

Optoacoplador: También llamado optoaislador o aislador acoplado ópticamente, es un


dispositivo de emisión y recepción que funciona como un interruptor activado mediante la
luz emitida por un diodo LED que satura un componente optoelectrónico, normalmente en
forma de fototransistor o fototriac. De este modo se combinan en un solo dispositivo
143
semiconductor, un fotoemisor y un fotorreceptor cuya conexión entre ambos es óptica.
Estos elementos se encuentran dentro de un encapsulado que por lo general es del tipo
DIP. Se suelen utilizar para aislar eléctricamente a dispositivos muy sensibles.

La figura de la izquierda muestra un optoacoplador


4N35 formado por un LED y un fototransistor. La
tensión de la fuente de la izquierda y la resistencia en
serie establecen una corriente en el LED emisor
cuando se cierra el interruptor S1. Si dicha corriente
proporciona un nivel de luz adecuado, al incidir sobre
el fototransistor lo saturará, generando una corriente
en R2. De este modo la tensión de salida será igual a
cero con S1 cerrado y a V2 con S1 abierto.

144
Sensor electromagnético:
Se basa en el principio de que una variación en el flujo magnético sobre una bobina,
genera una fuerza electromotriz.

El efecto hall se refiere a la generación de un potencial en un conductor por el que circula


una corriente y hay un campo magnético perpendicular a esta.
Tiene como limitación:

 La temperatura cambia la resistencia del material.


 Hay un error de cero debido a inexactitudes físicas.

Tiene como ventajas:

 Salida independiente de la velocidad de variación del campo magnético.


 Inmune a las condiciones ambientales.
 Sin contacto.

Se puede aplicar a la medida de campos magnéticos, medida de desplazamientos, etc.

Para esta aplicación utilizamos las siguientes nuevas instrucciones:

145
MOVF f,w mueve el dato del registro f al registro W
MOVF w,f mueve el dato del registro w al registro f
BCF f,d pone en 0 el bit d del registro f
BSF f,d pone en 1 el bit d del registro f
BTFSS f,d si el bit d del registro f es 1 salta una instrucción si no continua con
la siguiente

Diseño del programa:

146
Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

147
 Diseñar el programa

148
149
3. Compilar programa

Una vez realizado el programa se procede a compilarlo y


para ello se dirige el cursor a la pestaña “Project” y
posteriormente se selecciona la opción “Quick nombre del
archivo.ASM”.
Aparecerá la pestaña “Output” en la que se indicará el
proceso de compilación. Una vez terminado el proceso
aparecerá la leyenda “BUILD SUCCEDED” como lo muestra
la figura 2. en el caso de que el programa no haya
presentado errores en de sintaxis. Figura 1. Pestaña Project.

Figura 2. Ventana de compilación satisfactoria.

4. Verificar programa en MPLAB


 Seleccionar MPLAB SIM

Para la simulación del programa realizado se


procede a seleccionar la herramienta “MPLAM
SIM” la cual se encuentra dentro de la pestaña
“Debugger” en la opción “Select Tool”.

Figura 3. Pestaña Debugger/Select Tool.

 Seleccionar Stimulus y configurarlo

150
Dentro de la simulación en MPLAB se requiere de la
configuración del Stimulus ya que este nos permitirá
generar señales asíncronas para que así se puedan
observar de mejor manera las condiciones de trabajo
del programa, así como sus respuestas a las diferentes
señales que se le dan por medio del puerto configurado
como entrada.
Esta opción se encuentra dentro de la pestaña
“Debugger” la cual se debe de crear un nuevo cuaderno
de trabajo en donde se configurarán las entradas y la
naturaleza de las señales que se le van a suministrar
para proceder en la simulación.

Figura 4. Stimulus.

En la figura 5. se muestra un ejemplo de


configuración para el Stimulus en el cual el puerto
B esta configurado como entradas y salidas RB0-
RB1 son arranque y paro, RB2-RB3 son las
salidas a los motores y RB4-RB7 son las entradas
de los sensores electromagnéticos y cada uno de
los pines tienen configurados la opción “Toggle”
comportándose como un interruptor que con un
click puede dar una señal lógica binaria.

Figura 5. Ventana Stimulus.

 Seleccionar Watch y configurarlo

151
Otra herramienta por configurar es el “Watch” que nos
servirá para observar los cambios que presentan cada
uno de los registros presentes dentro del
microcontrolador. Estos registros pueden ser
configurados de tal forma que nos muestran el valor
en binario para cada uno de sus 8 bites.
Para abrir la ventana se debe de ir a la opción “View”
en donde encontraremos el nombre “Watch”.
Al seleccionarlo aparecerá la ventana de esta
herramienta la cual se debe configurar, como se
muestra en la figura 7, agregando los registros que se
quiere observar su comportamiento y añadiendo
pestañas dependiendo de la forma en la que se desea
que se muestre el valor que esta tomando el registro
en diferentes momentos de la simulación.

Figura 6. Watch.

Figura 7. Ventana Watch.

 Correr programa
Finalmente, con todas las herramientas configuradas se procede a correr el programa
manipulando en la barra de herramientas las opciones que se presentan para la simulación
del programa en MPLAB mostradas en la figura 8.

Figura 8. Opciones de simulación.

152
 Probar las configuraciones

Figura 9. Operación del programa.

Para el caso de este programa la aplicación consiste en reproducir la secuencia de un


motor, la cual está regulado a través de sensores electromagnéticos y el microprocesador
y gracias al simulador de MPLAB se comprobó el correcto funcionamiento del programa.

Simulación en Proteus

1. Realizar el circuito

153
Figura 10. Circuito en Proteus del programa 7 en PIC.

2. Cargar el archivo .HEX en el PIC


Para cargar el archivo obtenido de
MPLAB se da doble click sobre le
Microcontrolador y aparecerá una
pestaña en la que estará la opción
“Program File”, dando click en el icono
con una carpeta se abrirá el
administrador de archivos
permitiéndonos seleccionar el archivo
que queremos utilizar.

Figura 11. Edición del microcontrolador 16F887.

3. Simular

154
Figura 12. Simulación del ejercicio 7 en PIC.

4. Circuito en Protoboard.
Se armo el circuito en protoboard y quedando de la siguiente manera.

Figura 13. Conexión del ejercicio 7 en PIC.

Programación del PIC con el software PG4UW

155
Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.

Figura 14. Selección del programador.

Posteriormente se procede a elegir el


microcontrolador utilizando la opción “Select device…”
ubicada en la pestaña “Device” como se muestra en la
figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar para
este caso se procede a buscar el PIC16F887 y se
selecciona.

Figura 15. Pestaña device.

156
Figura 16. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 17. Pestaña file.

157
Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 19. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 20. Verificación exitosa.

158
Ejercicio 8. Desplegar un mensaje a través de una pantalla LCD configurada a través de
un microcontrolador.
Mensaje a desplegar.
Equipo 1.0
Grupo: 7RM1

Algoritmo

1. Seleccionar microcontrolador y librerías.


2. Configurar puertos.
3. Limpiar puertos.
4. Configuración de LCD.
5. Desplegar mensaje.

Definiciones previas.
Marco Teórico
PIC16F887
El siguiente diagrama da cuenta de los pines del PIC16F887:

LCD: Una pantalla de cristal líquido o LCD (sigla del inglés Liquid Crystal Display) es una
pantalla delgada y plana formada por un número de píxeles en color o monocromos
colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos
electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica.

Característica:
Cada píxel de un LCD típicamente consiste en una capa de moléculas alineadas entre
dos electrodos transparentes, y dos filtros de polarización, los ejes de transmisión de cada
uno que están (en la mayoría de los casos) perpendiculares entre sí. Sin cristal líquido
159
entre el filtro polarizante, la luz que pasa por el primer filtro sería bloqueada por el
segundo (cruzando) polarizador.

Para esta aplicación utilizamos las siguientes nuevas instrucciones:


MOVF f,w mueve el dato del registro f al registro W
MOVF w,f mueve el dato del registro w al registro f
BCF f,d pone en 0 el bit d del registro f
BSF f,d pone en 1 el bit d del registro f
BTFSS f,d si el bit d del registro f es 1 salta una instrucción si no continua con
la siguiente
DECFSZ decrementa el registro, y salta la instrucción si el bit Z del registro
STATUS es 0
NOP quema un ciclo maquina
CALL manda a llamar a una subrutina definida por nosotros
RETURN Regresa un valor y se posiciona después de la instrucción CALL que
mando a llamar la subrutina.

Diseño del programa:

160
Programación en MPLAB

1. Crear nuevo archivo


2. Editar el programa
 Cargar librerías

 Configurar puertos de I/O digitales

 Diseñar el programa

161
162
163
164
Simulación en Proteus

1. Realizar el circuito

165
Figura 1. Circuito en Proteus del programa 8 en PIC.

2. Cargar el archivo .HEX en el PIC


Para cargar el archivo obtenido
de MPLAB se da doble click
sobre le Microcontrolador y
aparecerá una pestaña en la que
estará la opción “Program File”,
dando click en el icono con una
carpeta se abrirá el
administrador de archivos
permitiéndonos seleccionar el
archivo que queremos utilizar.

Figura 2. Edición del microcontrolador 16F887.

3. Simular

166
Figura 3. Simulación del ejercicio 8 en PIC.

4. Circuito en Protoboard.
Se armo el circuito en protoboard y quedando de la siguiente manera.

Figura 4. Conexión del ejercicio 8 en PIC.

167
Programación del PIC con el software PG4UW
Para programar el PIC conectamos el programador universal a la computadora por medio
del puerto USB.
La primera pestaña que nos aparecerá será para elegir el tipo de programador que tenemos
y el tipo de conexión, una vez seleccionado daremos click en “Conect” y si el programador
se conecta correctamente aparecerá un mensaje en la pantalla indicándolo.

Figura 5. Selección del programador.

168
Posteriormente se procede a elegir el
microcontrolador utilizando la opción “Select
device…” ubicada en la pestaña “Device” como se
muestra en la figura 15.
A continuación, se abrirá una ventana con todas las
opciones de microcontroladores para programar
para este caso se procede a buscar el PIC16F887
y se selecciona.

Figura 6. Pestaña device.

169
Figura 7. Selección del microcontrolador 16F887.

Una vez seleccionado el microcontrolador procedemos a cargar el programa deseado, es


que tiene terminación .HEX.

Figura 8. Pestaña file.

170
Teniendo ya seleccionado el programa
procedemos a colocar el PIC en el programador,
luego en el software realizamos las operaciones
de Blank y Errase para dejar listo el PIC para ser
Figura 18. Opciones de programación. programado.
Después damos click en “Program” y aparecerá
la siguiente ventana donde colocaremos las opciones como se muestra en la figura 19.

Figura 9. Configuración de los fusibles para PIC.

Una vez realizado este proceso damos click en


“Verify” para comprobar si el PIC se programó
correctamente y de ser así se procede a colocar el
microcontrolador en circuito previamente armado
en la protoboard.

Figura 10. Verificación exitosa.

171

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy