Logo Studenta

PIC16F887-2Parcial - César Esquivel

¡Este material tiene más páginas!

Vista previa del material en texto

INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CURSO BÁSICO DE PIC 
16F887 
 
INTERFASES PERIFÉRICAS Y PROGRAMABLES I 
 
PRIMER PARCIAL 
 
PROFESOR: Valdés Martínez Ramón 
EQUIPO7 
Chávez Cantoriano Jorge Luis 
Esquivel González César Antar 
Lara Tufiño Erandi Aleli 
 
GRUPO: 7RM1 
 
FECHA DE ENTREGA: 10 - Septiembre – 2018 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
GENERALIDADES 
1. Desarrollo tecnológico e importancia de los microcontroladores. 
Hasta antes de la aparición de los microprocesadores en 1971, las aplicaciones digitales 
electrónicas se basaban en la lógica cableada, el problema era analizado y sintetizado en 
una función en base a la lógica de Boole siendo esta la solución a lo que se necesitaba. 
Cuando aparecieron los microprocesadores cambió el esquema de diseño, ahora las 
aplicaciones eran descompuestas en tareas más simples, el microprocesador se encargaba 
de llevar a cabo una serie de instrucciones para poder ejecutar cada una de las tareas, con 
este avance había veces en las que no era necesario rearmar el circuito para obtener otra 
aplicación, sino que era suficiente con modificar el programa y así obtener una nueva 
aplicación. 
El microprocesador es como un cerebro que se encarga de ejecutar operaciones 
aritméticas-lógicas, por tanto, no contaba con periféricos y tampoco tenía un lugar para 
almacenar un programa y los datos que se necesitaban para dicho programa. Es por eso por 
lo que se le tenían que añadir circuitos para darle soporte al procesador, y a ese conjunto 
de circuitos se le llamo <sistema mínimo>. 
El sistema mínimo se fue convirtiendo en un estándar, en 1976 la escala de integración 
mejoró y posibilitó sintetizar en un solo chip un sistema mínimo y se le llamo sistema A 
siendo este el primer microcontrolador. 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
Un microcontrolador se define como un procesador con un sistema mínimo en un mismo 
chip, que incluye: 
 Memoria para programa (RAM) y datos. 
 Periféricos de entrada/salida. 
 Conversores de AD y DA. 
 Módulos especializados en la transmisión y recepción de datos. 
Cabe señalar que 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. 
A continuación, se enlistan las principales características de los microcontroladores y de los 
microprocesadores en un cuadro comparativo para comprender las diferencias entre cada 
uno de ellos: 
MICROCONTROLADORES MICROPROCESADORES 
 
 Arquitectura cerrada: 
Anteriormente no se le permitía 
añadir ningún tipo de hardware, 
pero hoy en día únicamente se le 
puede agregar una memoria de 
usuario. 
 Set de instrucciones reducido 
(RISC) 
 Arquitectura Harvard: 
Arquitectura de computadora con 
pistas de almacenamiento y de 
señal físicamente separadas para 
las instrucciones y para los datos. 
 Se especializan en aplicaciones 
industriales: 
Se encuentran en teclados, mouse, 
electrodomésticos, en la industria 
automotriz, en procesamiento de 
imagen y video. 
 
 Arquitectura abierta: 
Se pueden sumar nuevos 
dispositivos en hardware en 
función a las necesidades. 
 Tienen mayor cantidad de 
instrucciones 
 Arquitectura Von Neuman: 
El CPU está conectada a una 
memoria principal única (casi 
siempre sólo RAM) donde se 
guardan las instrucciones y los 
datos. 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CONCEPTOS CLAVE: 
 Lógica cableada: Solución a una aplicación que se basaba en la lógica de Boole. 
 Microprocesadores: Es como el cerebro que se encarga de la ejecución de 
operaciones aritméticas lógicas. Se encarga de llevar a cabo una serie de 
instrucciones para ejecutar tareas. 
 Sistema Mínimo: Conjunto de circuitos que le dan soporte al microprocesador 
(memorias, periféricos, entre otros). 
 Microcontroladores: Se define como un procesador con un sistema mínimo 
integrado en un mismo chip que incluye: memoria para programa y datos, 
periféricos de E/S, conversores de señal y módulos de transmisión y recepción de 
datos. 
2. METODOLOGÍA DE ESTUDIO 
ᴥ Entender cómo funciona la arquitectura, es importante conocer como están 
conectados los elementos internamente para un mejor entendimiento de su 
funcionamiento. 
ᴥ Aplicar y entender la sintaxis y las instrucciones que tiene el dispositivo. 
ᴥ Plantear algoritmos y soluciones a las aplicaciones. 
ᴥ Aprender a usar las herramientas de programación y depuración. 
ᴥ Detectar y corregir los errores sintácticos y lógicos. 
ᴥ Optimizar el programa final. 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
Proceso de Diseño: 
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. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
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 de 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 de que falle en este punto retomamos el diseño 
original. 
Superada ambas fases procedemos a colocarlo sobre el hardware final que ha de operar. 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
3. MICROCONTROLADOR MICROCHIP 16F887: 
Las principales características con las que cuenta el PIC 16F887 son las siguientes: 
 Arquitectura RISC: 
o El microcontrolador cuenta con solo 35 instrucciones diferentes. 
o Todas las instrucciones son uniciclo excepto por las de ramificación que se 
realizan en dos ciclos máquina. 
 Frecuencia de operación 0-20MHZ 
 Oscilador interno de alta precisión: 
o Calibrado de fábrica. 
o Rango de frecuencia de 8MHz a 31KHz seleccionado por Software. 
 Voltaje de la fuente de alimentación de 2 V a 5.5V. 
 Ahorro de energía en el modo de reposo. 
 Brown-out Reset (BOR) con opción para controlar por software. 
 35 pines de entrada/salida 
o Alta corriente de fuente y de drenador para manejo de LED. 
o Resistencias pull-up programables individualmente por software. 
o Interrupciónal cambiar el estado del pin. 
 Memoria ROM de 8K con tecnología FLASH: 
o El chip se puede reprogramar hasta 100.000 veces. 
 Opción de programación serial en el circuito. 
o El chip se puede programar incluso incorporado en el dispositivo destino. 
 Pila con 8 niveles. 
 256 bytes de memoria EEPROM 
o Los datos se pueden grabar más de 1.000.000 veces. 
 368 bytes de memoria RAM 
 Convertidor A/D: 
o 14 canales 
o Resolución de 10 bits 
 3 temporizadores/contadores independientes 
 Temporizador perro guardián (WDT) 
 Módulo de comparación analógico con: 
o Dos comparadores analógicos. 
o Referencia de voltaje fija (0.6V) 
o Referencia de voltaje programable en el chip. 
 Módulo PWM incorporado 
 Módulo USART mejorado 
o Soporta las comunicaciones seriales RS-485, RS-232 y LIN2.0 
o Autodetección de baudios. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 Puerto Serie Síncrono Maestro (MSSP) 
o Soporta los modos SPI e I2C. 
 
A continuación, se muestra el siguiente diagrama del PIC16F887 para poder identificar los 
pines con los que cuenta: 
 
Para dar un mejor entendimiento mostraremos una tabla donde se indica para que sirve 
cada uno de los pines: 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
4.ARQUITECTURA 16F887 
Los PIC16F887 de Microchip pertenecen al tipo de procesador RICS que es un procesador 
de instrucciones reducidas, se caracteriza porque el número de instrucciones es pequeño 
(en este caso 35) y además casi todas se realizan en un ciclo máquina, que equivale a 4 ciclos 
de reloj, con excepción de las de bifurcación o de salto que se realizan en dos ciclos 
máquina. 
Este tipo de procesador emplea una arquitectura Harvard lo cual se refiere a que trabaja las 
zonas de memoria y de instrucciones de forma separada, lo cual hace que sea 2 veces más 
rápida a comparación de la arquitectura Von Neuman, que por el contrario trabaja los datos 
e instrucciones en conjunto. 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
En ambas arquitecturas observamos bloques de memoria (uno de instrucciones y otro de 
datos), cada bloque tiene posiciones y cada posición un valor y existen dos buses: 
 Bus de direcciones: Permite conocer el lugar o las coordenadas donde se encuentra 
la información. 
 Bus de datos: Bus donde estamos transmitiendo la información, y es bidireccional 
ya que lee y escribe los datos. 
En el caso de la arquitectura Von Neuman podemos apreciar que existe un único bus de 
direcciones y de datos. Podemos también observar como cada posición de memoria tiene 
una dirección, a su vez la memoria se divide en memoria de programa (ROM) y memoria de 
datos (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. 
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. 
5. ARQUITECTURA INTERNA PIC16F887 
Hemos señalado que el microcontrolador posee varios elementos en forma interna: el 
procesador, memoria de programa, memoria de datos, periféricos, contadores. Para 
comprender mejor como se conforma internamente presentaremos el siguiente diagrama 
de bloques: 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
De forma más simplificada tenemos que: 
 
Nos pareció necesario presentar la imagen anterior ya que en ella se pueden apreciar de 
mejor manera como está constituido internamente este dispositivo electrónico a grandes 
rasgos y de forma entendible. 
6. CICLO DE INSTRUCCIÓN 
Observemos el siguiente diagrama de tiempos: 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
 El oscilador o cristal genera pulsos, a cada uno de estos pulsos se le conoce como 
cuadratura Q1, Q2, Q3, Q4. 
 Toda instrucción tienes asociada dos procesos, cada uno ocupa un ciclo de 
instrucción: 
o Proceso1: Búsqueda, descarga los valores. 
o Proceso2: Ejecución, realiza la operación y despliega el resultado. 
 Primero se lleva a cabo la búsqueda, internamente el contador se incrementa en 
Q1. La búsqueda de la siguiente instrucción se lleva a cabo en Q4. 
 Los procedimientos de búsqueda y ejecución de una misma instrucción son 
secuenciales más son paralelos para diferentes instrucciones. 
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 componentes que constituyen el microcontrolador. Por ejemplo, 
el registro “trisa” que nos permite configurar el modo de trabajo de las líneas del 
puerto A 
 GFR (General Function register) Registros de propósito general, son posiciones de 
memoria que podemos usar para almacenar valores que emplean nuestros 
programas 
 tenemos una memoria EEPROM, con 256 posiciones, para acceder a la memoria no 
podemos leer o escribir directamente es decir colocar la dirección y obtener o dejar 
el valor. Para trabajarla debemos apoyarnos en registros adicionales de tal forma 
que la usamos indirectamente. 
Los bancos de memoria del PIC16F887 se encuentran de la siguiente manera: 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
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 debuger físicos. 
 MPLAB 
 
El MPLAB es un entorno de desarrollo que incluye varias herramientas: 
 Contiene un editor de textos que nos permite ingresar el programa expresado en 
códigos nemónico (o simplemente llamado ensamblador), normalmente este se 
guarda en un archivo con extensión ASM. 
 Cada nuevo proyecto puede contener a su vez varios archivos ASM que se relacionen 
a través de llamadas a rutinas, 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). 
 Cuando procedemos a llamar al programa ensamblador que lleva el MPLAB este es 
capaz de transformar el código nemónico (instrucciones) a los correspondientes 
valores binarios (lenguaje máquina) 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á observarel comportamiento del programa antes de proceder 
grabar el programa. 
 El archivo con extensión “.HEX” es el que contiene los códigos binarios (lenguaje 
máquina) a grabar en el microcontrolador. 
 ICD 
El ICD (In circuit debugger) es una herramienta que tiene componentes en hardware 
y en software. 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. 
 
 El software viene incluido en el MPLAB es de fácil uso y configuración. 
 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 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
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. 
 
 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: 
 
1. Una vez identificado el problema 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. 
2. Una vez en ASM procedemos a ensamblar y simular. 
3. Si toda está sin problemas 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 problema procedemos a 
depurar el error. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CURSO BÁSICO DE PIC 
16F887 
 
INTERFASES PERIFÉRICAS Y PROGRAMABLES I 
 
SEGUNDO PARCIAL 
PROFESOR: Valdés Martínez Ramón 
EQUIPO7 
Chávez Cantoriano Jorge Luis 
Esquivel González César Antar 
Lara Tufiño Erandi Aleli 
 
GRUPO: 7RM1 
 
FECHA DE ENTREGA: 17 - Octubre – 2018 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 Cómo hacer y simular un programa en MPLAB 
1.- Abrimos MPLAB y damos clic en Project y posteriormente New: 
 
 
 
 
2.- Le asignamos un nombre al proyecto y seleccionamos la carpeta en donde se va a 
guardar: 
 
 
 
3.- Ahora seleccionamos en la barra principal la opción que dice File y después New: 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
4.- En la ventana que se abre escribimos nuestro código: 
 
 
 
 
 
 
 
5.- Posteriormente debemos de simularlo, así que en la barra principal seleccionamos 
DebuggerSelect Tool  MPLABSIM: 
 
6.- Luego en Debugger nuevamente seleccionamos STIMULUS, en la ventana que aparece 
seleccionamos los puertos que utilizamos, y en Action nos aparecen las siguientes opciones: 
 Set High: Establecer alto 
 Set Low: Establecer bajo 
 Toggle: Intercambia en cada pulso, primero uno alto y después uno bajo 
 Pulse High: Pulso alto 
 Pulse Low: Pulso bajo 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
En nuestra práctica seleccionaremos Toggle debido a su característica, entonces la ventana 
nos queda de esta forma: 
 
 
 
 
 
 
 
 
7.- Después damos clic en View  Watch, en la ventana que aparece seleccionamos PORTB 
en la parte superior y lo agregamos, podemos observar cómo se encuentra en hexadecimal 
y binario: 
8.- Habiendo ya configurando lo anterior corremos nuestra simulación dando clic en el 
símbolo de “play” que se encuentra en la barra de herramientas, damos estímulos y 
finalmente verificamos el circuito con las combinaciones de las entradas: 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
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 entradas o salidas 
digitales: 
 Puerto A: Contiene 8 bits RA0- RA7 
 Puerto B: Contiene 8 bits RB0- RB7 
 Puerto C: Contiene 8 bits RC0- RC7 
 Puerto D: Contiene 8 bits RD0- RD7 
 Puerto E: Contiene 3 bits RE0- RE2 
La operación de configuración de los puertos en general implica la siguiente secuencia: 
1. Ingresar al banco 1. 
2. Configurar los puertos (registros TRISA, TRISB, TRISC, TRISD y TRISE) 
3. Regresar al banco 0. 
4. Escribir o leer los datos desde los puertos (registros PORTA, PORTB, PORTC, 
PORTD, PORTE). 
Cada una de las líneas de los puertos puede ser configurado como entrada o como salida. 
En el registro TRIS determinamos la configuración de los puertos. 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. 
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 especifica 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: 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
ᴥ Orientadas a byte : 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 usamosel 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: 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: 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. 
CLASIFICACIÓN DE LAS INSTRUCCIONES EN BASE A LAS 3 CATEGORÍAS: 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
3. Lectura y escritura en puertos: 
Ejercicio 1: 
Enunciado de la aplicación: 
Configurar el puerto A para entradas y el puerto B para salidas digitales, de esta forma 
cuando se detecte una señal de entrada en algún bit del puerto A esta se verá reflejada 
encendiendo un led en el mismo bit del puerto B. 
ALGORITMO 
1.- Configurar puertos de entrada y salida, al igual que las entradas analógicas o digitales. 
2.- Limpiar los puertos 
3.- Mover de puerto “A” a nuestro registro de trabajo(W). 
4.- Mover W al puerto “B”. 
5.- Regresar al punto 3. 
INSTRUCCIONES POR UTILIZAR 
ᴥ BANKSEL 
Nos posiciona en el banco correspondiente a la instrucción que coloquemos 
enseguida de BANKSEL. 
ᴥ CLEAR PORTX 
Limpia todos los bits del puerto que seleccionemos. 
ᴥ TRISX 
Define como entradas o salidas digitales el puerto que seleccionemos. 
ᴥ MOVF PORTX,W 
Mueve lo que tengamos en el registro del puerto “X” al registro de trabajo. 
ᴥ MOVWF X 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
Mueve lo que tengamos en el registro de trabajo al registro que seleccionemos. 
DIAGRAMA DE FLUJO 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO EN MPLAB 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
SIMULACIÓN EN PROTEUS 
 
7. Principales registros del PIC16F877 (STATUS): 
Hemos indicado que la memoria del datos del microcontrolador se divide en bancos de 
memoria, las posiciones inferiores estan destinadas a los registros especiales de función 
(SPECIAL FUNCTION REGISTER). En esta sección profundizaremos un poco mas 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: 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
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) 
Bit 4: -T0 Time out bit. 
 1 =Asumeel 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 Watchdog. 
 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 
Bit1:DCDigitcarry/borrowbit Usado como acarreo en las instrucciones de suma 
(ej:ADDWFyADDWL) 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. 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
8. Ejercicio 2: 
Enunciado de la aplicación: 
Suponga una lampara 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 PORTB (RB0, RB1 y RB2) y 
definimos la línea RB3 como salida tendríamos la siguiente tabla de operación: 
OUT IN 
RB3 RB2 RB1 RB0 
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 
 
DESARROLLO PARA PIC EN MPLAB 
ALGORITMO 
1.- Configurar puertos de entrada y salida, al igual que las entradas analógicas o digitales. 
2.- Limpiar los puertos 
3.- Definir o crear una variable 
4.- Mover de puerto B a nuestro registro de trabajo(W). 
5.- Mover W a “variable”. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
6.- Poner el bit 3 en 0. 
7.- Realizar las comparaciones con las combinaciones verdaderas. 
 Si M-PORTB-3==0  RB3=1 
 Si M-PORTB-5==0  RB3=1 
 Si M-PORTB-6==0  RB3=1 
 Para cualquier otra combinación RB3=0 
8.- Regresar al punto 4. 
INSTRUCCIONES NUEVAS POR UTILIZAR 
ᴥ BTFSS f, b (Bit Test File Skip if Set) 
Prueba el bit b del registro f, si es 1 se brinca una instrucción y si es 0 ejecuta la 
siguiente instrucción. 
ᴥ BTFSC f, b (Bit Test File Skip if Clear) 
Prueba el bit b del registro f, si es 0 se brinca una instrucción y si es 1 ejecuta la 
siguiente instrucción. 
ᴥ SUBWF f, d (Substrae W de f) 
A el registro f se le resta lo del registro de trabajo, si d=0 se almacena en W y si d=0 
se almacena en f. 
ᴥ EQU 
Se utiliza para crear una variable, se coloca el nombre de la variable EQU y 
posteriormente la localidad del registro de propósito general donde se va a guardar 
la variable. 
ᴥ BCF f, b BSF f, b 
Coloca a 0 el bit b del registro f. Coloca a 1 el bit b del registro f. 
 
DIAGRAMA DE FLUJO 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO EN MPLAB 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
SIMULACIÓN EN PROTEUSEjercicio 3: 
ENUNCIADO DE LA APLICACIÓN: 
Realizar una aplicación para un PIC16F887 con las siguientes características: 
 Se cuenta con 4 entradas PORT B0-B3 y una salida digital PORT B4 
 La salida se enciende con [1, 3, 7, 10, 15] 
OUT IN 
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 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DESARROLLO PARA PIC EN MPLAB 
ALGORITMO: 
1.- Configurar puertos de entrada y salida, al igual que las entradas analógicas o digitales. 
2.- Limpiar los puertos. 
3.- Definir o crear una variable. 
4.- Mover de puerto B a nuestro registro de trabajo (W). 
5.- Mover de W a “variable” 
6.- Poner el bit 4 en 0. 
7.- Realizar las comparaciones con las combinaciones verdaderas: 
 Si M-PORTB-1==0  RB4=1 
 Si M-PORTB-3==0  RB4=1 
 Si M-PORTB-7==0  RB4=1 
 Si M-PORTB-A==0  RB4=1 
 Si M-PORTB-F==0  RB4=1 
 Para cualquier otra combinación RB4=0 
8.- Regresar al paso 4. 
 
INSTRUCCIONES IMPORTANTES POR UTILIZAR 
ᴥ BTFSS f, b (Bit Test File Skip if Set) 
Prueba el bit b del registro f, si es 1 se brinca una instrucción y si es 0 ejecuta la 
siguiente instrucción. 
ᴥ BTFSC f, b (Bit Test File Skip if Clear) 
Prueba el bit b del registro f, si es 0 se brinca una instrucción y si es 1 ejecuta la 
siguiente instrucción. 
ᴥ SUBWF f, d (Substrae W de f) 
A el registro f se le resta lo del registro de trabajo, si d=0 se almacena en W y si d=1 
se almacena en f. 
ᴥ EQU 
Se utiliza para crear una variable, se coloca el nombre de la variable EQU y 
posteriormente la localidad del registro de propósito general donde se va a guardar 
la variable. 
ᴥ BCF f, b BSF f, b 
Coloca a 0 el bit b del registro f. Coloca a 1 el bit b del registro f. 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DIAGRAMA DE FLUJO: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO EN MPLAB 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
SIMULACIÓN EN PROTEUS 
 
Ejercicio 4: 
ENUNCIADO DE LA APLICACIÓN: 
Realizar una aplicación para un PIC16F887 con las siguientes características: 
 Se cuenta con 4 entradas PORT C0-C3 y una salida digital PORT C4 
 La salida se enciende con [0, 5, 9, 11, 14] 
OUT IN 
RC4 RC3 RC2 RC1 RC0 
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 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
DESARROLLO PARA PIC EN MPLAB 
ALGORITMO 
1.- Configurar puertos de entrada y salida, al igual que las entradas analógicas o digitales. 
2.- Limpiar los puertos. 
3.- Definir o crear una variable. 
4.- Mover de puerto B a nuestro registro de trabajo (W). 
5.- Mover de W a “variable” 
6.- Poner el bit 4 en 0. 
7.- Realizar las comparaciones con las combinaciones verdaderas: 
 Si M-PORTB-0==0  RB4=1 
 Si M-PORTB-5==0  RB4=1 
 Si M-PORTB-9==0  RB4=1 
 Si M-PORTB-B==0  RB4=1 
 Si M-PORTB-E==0  RB4=1 
 Para cualquier otra combinación RB4=0 
8.- Regresar al paso 4. 
INSTRUCCIONES IMPORTANTES POR UTILIZAR 
ᴥ BTFSS f, b (Bit Test File Skip if Set) 
Prueba el bit b del registro f, si es 1 se brinca una instrucción y si es 0 ejecuta la 
siguiente instrucción. 
ᴥ BTFSC f, b (Bit Test File Skip if Clear) 
Prueba el bit b del registro f, si es 0 se brinca una instrucción y si es 1 ejecuta la 
siguiente instrucción. 
ᴥ SUBWF f, d (Substrae W de f) 
A el registro f se le resta lo del registro de trabajo, si d=0 se almacena en W y si d=1 
se almacena en f. 
ᴥ EQU 
Se utiliza para crear una variable, se coloca el nombre de la variable EQU y 
posteriormente la localidad del registro de propósito general donde se va a guardar 
la variable. 
ᴥ BCF f, b BSF f, b 
Coloca a 0 el bit b del registro f. Coloca a 1 el bit b del registro f. 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DIAGRAMA DE FLUJO 
 
 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
SIMULACIÓN EN PROTEUS 
 
Ejercicio 5: 
ENUNCIADO DE LA APLICACIÓN: 
Diseñar una aplicación que simule a un comparador de 4 líneas. 
Considerando las líneas de entrada: 
Dato B Dato A 
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 
B3 B2 B1 B0 A3 A2 A1 A0 
 
Y las líneas de salida: 
Condición RA2 RA1 RA0 
A<B 0 0 1 
A=B 0 1 0 
A>B 1 0 0 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DESARROLLO PARA PIC EN MPLAB 
ALGORITMO 
1.- Limpiar cada uno de los puertos. 
2.- Configurar entradas y salidas y declarar que sean digitales. 
3.- Declarar las nuevas variables a utilizar. 
4.- Guardar lo del registro B en W y posteriormente lo de W a nuestras variables creadas. 
5.- Invertir los nibles. 
6.- Realizar la operación lógica AND para separar los valores. 
7.- Guardar dato A en W. 
8.- Restar al dato B lo de W con la instrucción SUBWF. 
9.- Evaluar el bit C del registro Status 
10.- Crear bucles de instrucciones para cada una de las comparaciones con ayuda de la 
instrucción BTFSC. 
11.- Regresar al paso 4. 
INSTRUCCIONES 
 SUBWF f, d: Substrae W de f, si d es 0 el resultado es almacenado en W y si d es 1 el 
resultado es almacenado devuelta en el registro f. 
Los bits afectados en el STATUS son: C, DC, Z. 
 SWAPF f,d: Intercambia los nibles de f. El nible superior e inferior del registro f son 
intercambiados. Si d es 0 el resultado es almacenado en el registro W y si d es 1 el 
resultado es almacenado en el registro f. 
Los bits afectados en el STATUS: Ninguno 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DIAGRAMA DE FLUJO 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
SIMULACIÓN EN PROTEUS 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
ARMADO EN PROTOBOARD 
 
Ejercicio 6-A: 
ENUNCIADO DE LA APLICACIÓN: 
Diseñar una aplicación que simule a un sumador de 2 datos. 
Considerando las líneas de entrada: 
Dato A Dato B 
RB4 RB3 RB2 RB1 RB0 RC3 RC2 RC1 RC0 
A4 A3 A2 A1 A0 B3 B2 B1 B0 
 
DESARROLLO PARA PIC EN MPLAB 
ALGORITMO 
1.- Limpiar cada uno de los puertos. 
2.- Configurar entradas y salidas y declarar que sean digitales. 
3.- Declarar las nuevas variables a utilizar. 
4.- Leer y guardar lo del registro B en W y posteriormente lo de W a nuestra primera variable 
creada. 
5.- Leer y guardar lo del registro C en W y posteriormente lo de W a nuestra segunda 
variable creada. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
6.- Usar la operación lógica en ambas variables para cerciorarnos que no haya alguna 
interferencia. 
7.- Sumar ambas variables mediante la instrucción ADDWF recordando que debemos 
utilizar como intermediario el registro de trabajo. 
8.- Asignarle al puertoD el resultado de la suma de ambas variables. 
9.- Regresar al paso 4. 
INSTRUCCIONES 
 ADDWF f, d: Suma lo de W y f, si d es 0 el resultado es almacenado en W y si d es 1 
el resultado es almacenado devuelta en el registro f. 
Los bits afectados en el STATUS son: C, DC, Z. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DIAGRAMA DE FLUJO 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO 
 
 
SIMULACIÓN EN PROTEUS 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
ARMADO EN PROTOBOARD 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
Ejercicio 6-B: 
ENUNCIADO DE LA APLICACIÓN: 
Diseñar una aplicación que sume dos números uno de 5 bits y otro de 4 bits y que muestre 
el resultado en base decimal en dos displays. 
Considerando las líneas de entrada: 
Dato B Dato A 
RB4 RB3 RB2 RB1 RB0 RA3 RA2 RA1 RA0 
B4 B3 B2 B1 B0 A3 A2 A1 A0 
 
Y considerar para las salidas el puerto C y el puerto D respectivamente para cada uno de 
los displays. 
ALGORITMO 
1.- Cargar la librería del PIC16F887 
2.- Limpiar cada uno de los puertos. 
3.- Configurar cada uno de los puertos, cuales son entrada y cuales son salida. 
4.- Declarar e indicar la dirección de las variables que vamos a crear. 
5.- Leer el puerto A y guardarlo en el registro de trabajo W. 
6.- Aplicar la operación lógica AND para invertir los bits. 
7.- Leer el puerto B y guardarlo en el registro de trabajo W. 
8.- Aplicar la operación lógica AND para invertir los bits. 
9.- Utilizar la instrucción suma y sumar Dato A y dato B. 
10.- Llamar a la subrutina “display “(donde se encuentra la configuración de ellos). 
11.- Mover lo del registro de trabajo a nuestra variable UNID. 
12.- Llamar a la subrutina tabla donde se encuentran las configuraciones para cada uno de 
los números que se mostrarán en el display. 
13.- Mover lo del registro de trabajo a nuestra variable DEC. 
14.- Llamar nuevamente a la subrutina tabla. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
15.- Mover lo del registro de trabajo al puerto D. 
16.- Regresar al paso 5. 
INSTRUCCIONES NUEVAS POR UTILIZAR 
 ADDWF f, d: Esta instrucción suma el contenido el registro W y del registro f. 
 CALL: Llama a la subrutina “K”. 
 INCF f, d: Incrementa a f en 1. 
 RETLW k: Retorno con K en W. 
DIAGRAMA DE FLUJO 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
SIMULACIÓN EN PROTEUS 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
Ejercicio 7: 
ENUNCIADO DE LA APLICACIÓN: 
Diseñar un circuito de control y potencia para arranque y paro de un motor de CD. 
 
ALGORITMO 
1.- Cargar librería del PIC16F887 
2.- Limpiar cada uno de los puertos. 
3.- Configurar los puertos, seleccionando que bits serán entradas y cuales salidas. 
(B0=arranque, B1=paro, B2= salida). 
4.- Declarar variable (Flag1) así como la dirección en la que se va a guardar. 
5.- Leer el bit B1; si B1=1 Flag1=0 
6.- Leer el bit B0; si B0=1 Flag1=1 
7.- Si Flag1=0 regresar a 5. 
8.- Si Flag1=1 B2=1 y regresar al paso 5. 
 
INSTRUCCIONES 
*INCF f,d: Incrementa el registro f 
El resultado de esta operación lo coloca en el destino d. 
Si d=0 el resultado lo coloca en el acumulador 
Si d=1 el resultado se coloca en el mismo registro f 
Si el contenido del registro se encuentra en 0xFF y se ejecuta un 
Incremento el resultado es 0x00 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DIAGRAMA DE FLUJO 
 
CÓDIGO 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
SIMULACIÓN EN PROTEUS 
 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
Ejercicio 8: 
ENUNCIADO DE LA APLICACIÓN: 
Diseñar una aplicación que por medio de sensores y un motor de CD, muevan una 
plataforma entre ellos y realice una secuencia de movimiento. 
Considerando las líneas de entrada: 
SENSORES BOTONES 
RB5 RB4 RB3 RB2 RB1 RB0 
S4 S3 S2 S1 BP BA 
 
Y las líneas de salida: 
MOVIMIENTO RD0 RD1 
Motor gira a la 
derecha 
1 0 
Motor gira a la 
izqueirda 
0 1 
 
 
ALGORITMO 
1. Seleccionar el Banco 0 
2. Limpiar los puertos. 
3. Limpiar la información de ANSEL y ANSELH 
4. Seleccionar el banco 1 
5. Configurar entradas y salidas TRISB y TRISD. 
6. Regresar al Banco 0. 
7. Definir variables: FLAG. 
8. Preguntar por el botón de paro. Si el botón esta apretado ir a BP. 
9. Preguntar si S1=1. Si el sensor está activado regresar al paso 8. 
10. Preguntar por el botón de arranque. Si está activado ir BA, si no regresar al paso 8. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
11. Al oprimir el botón de arranque o paro se regresará a la etiqueta ‘PRINCIPAL’ donde se 
correrá la secuencia. 
12. Al activarse ‘PRINCIPAL’ se pregunta por FLAG y se comienza a correr la SECUENCIA 1. 
13. En la secuencia 1 se gira el motor hacia la derecha y se pregunta por el sensor 3 (PORTB 
4). 14. Si se detecta el sensor 3 la secuencia se dirige hacia APAGADO_1 donde se activa la 
segunda secuencia. Si el sensor no es detectado, se pregunta por el botón de paro. Si esta 
oprimido se dirige a REACOMODO_1 de lo contrario, se regresa al paso 13. 
15. En REACOMODO_1 se pregunta por el sensor 1 y en caso de estar oprimido se dirige a 
PARO_E en donde se limpia el bit 1 del PORTD y se regresa al paso 8. 
16. Si se continúa a la secuencia 2, se gira el motor hacia la izquierda y se pregunta por el 
sensor 2 (PORTB 3). 
17. Si se detecta el sensor 2 la secuencia se dirige hacia APAGADO_2 donde se activa la 
tercera secuencia. Si el sensor no es detectado, se pregunta por el botón de paro. Si esta 
oprimido se dirige al paso 15. 
18. Si se continúa a la secuencia 3, se gira el motor hacia la derecha y se pregunta por el 
sensor 4 (PORTB 5). 
19. Si se detecta el sensor 4 la secuencia se dirige hacia APAGADO_3 donde se activa la 
cuarta secuencia. Si el sensor no es detectado, se pregunta por el botón de paro. Si esta 
oprimido se dirige a paso 15. 
20. Si se continúa a la secuencia 4, se gira el motor hacia la izquierda y se pregunta por el 
sensor 1 (PORTB 2). 
21. Si se detecta el sensor 1 la secuencia se dirige hacia APAGADO_4 donde se activa la 
quinta secuencia. Si el sensor no es detectado, se pregunta por el botón de paro. Si esta 
oprimido se dirige a paso 15. 
22. Si se continúa a la secuencia 5, se gira el motor hacia la derecha y se pregunta por el 
sensor 4 (PORTB 3). 
23. Si se detecta el sensor 4 la secuencia se dirige hacia APAGADO_5 donde se activa la sexta 
secuencia. Si el sensor no es detectado, se pregunta por el botón de paro. Si esta oprimido 
se dirige a paso 15. 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
24. Si se continúa a la secuencia6, se gira el motor hacia la derecha y se pregunta por el 
sensor 1 (PORTB 2). 
25. Si se detecta el sensor 4 la secuencia se dirige hacia APAGADO_6 donde se regresa al 
paso 12. Si el sensor no es detectado, se pregunta por el botón de paro. Si esta oprimido se 
dirige a paso 15. 
 
INSTRUCCIONES 
 BTFSC 
Verifica que el bit tenga un 0 lógico, y de igualmanera, si es cierto, se salta la 
instrucción siguiente, y si es falsa entonces hace la siguiente. 
 BTFSS 
Verifica que el bit del puerto o variable especificado se encuentre en 1 lógico, si la 
respuesta es cierta entonces se salta la siguiente instrucción, mientras que si no lo 
es, realiza la sig instrucción. 
 BCF 
Pone en cero un bit en específico de un registro. 
 BSF 
Pone en uno un bit en específico de un registro. 
 
 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DIAGRAMA DE FLUJO 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
CÓDIGO 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
 
SIMULACIÓN EN PROTEUS 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
Ejercicio 9: 
ENUNCIADO DE LA APLICACIÓN: 
Diseñar una aplicación en la que se muestre un texto diseñado previamente en una LCD. 
DESARROLLO PARA PIC EN MPLAB 
ALGORITMO 
1.- Seleccionar el microcontrolador. 
2.- Cargamos librería. 
3.- Declaramos variables. 
4.- Limpiamos puertos y el registro de banco ansel. 
5.- Declaramos puertos de entrada y salida. 
6.- Creamos un retardo. 
7.- Creamos una subrutina para escribir los comandos en la LCD y llamamos al retardo. 
8.- Creamos una subrutina para mostrar los datos en la LCD y llamamos al retardo. 
9.- Configuramos el texto a mostrar en la LCD. 
INSTRUCCIONES 
 Call 
Sirve para hacer llamadas a funciones en ensamblador. 
 BCFN 
Sirve para poner en cero un bit en específico de un registro. 
 BSF 
Sirve para poner en 1 un bit en específico de un registro. 
 DECFSZ 
Sirve para decrementar cierta cantidad a una variable y guardarle en ella misma 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
DIAGRAMA DE FLUJO 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
CÓDIGO 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
 
 
 
 
 
 
 
 
INSTITUTO POLITÉCNICO NACIONAL 
Escuela Superior de Ingeniería Mecánica y Eléctrica UA 
Interfaces Periféricas y Programables I 
 
SIMULACIÓN EN PROTEUS

Continuar navegando