Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TESINA
“CUBO LED CONTROLADO VÍA BLUETOOTH”
TÉCNICO
EN SISTEMAS DIGITALES
P R E S E N T A:
ASESORES:
Por otra parte, agradezco a mi asesor de tesis, Ing. Armando Herrera Martínez por
haberme guiado en el desarrollo del proyecto y haber respetado las ideas u
opiniones que se plantearon sobre éste.
RESUMEN.....................................................................................................................6
OBJETIVO.....................................................................................................................7
INTRODUCCIÓN...........................................................................................................8
I. JUSTIFICACIÓN.................................................................................................8
II. ANTECEDENTES...............................................................................................9
III. ESTADO DEL ARTE.....................................................................................10
El diodo Led.........................................................................................................10
El microcontrolador............................................................................................10
Bluetooth..............................................................................................................11
IV. DESCRIPCIÓN DEL TRABAJO....................................................................12
CUERPO DEL TRABAJO...........................................................................................13
CAPITULO 1: MICROCONTROLADORES FUNDAMENTOS Y APLICACIONES
CON PIC...................................................................................................................13
1.1 Introducción a los microcontroladores y microprocesadores............13
1.2 Arquitectura del microcontrolador.........................................................15
1.3 Las características generales del microcontrolador PIC.....................17
1.4 Familias de Microcontrolador..................................................................19
1.5 La memoria en los microcontroladores.................................................21
1.6 El set de instrucciones.............................................................................23
1.7 El microcontrolador PIC16F886...............................................................25
CAPITULO 2: Diodo emisor de luz: Tecnología LED..........................................27
2.1 El diodo emisor de luz (LED)...................................................................27
2.2 Funcionamiento........................................................................................28
2.3 Aplicaciones..............................................................................................29
2.4 El led Azul ultra brillante..........................................................................30
CAPITULO 3: Comunicación Inalámbrica Bluetooth..........................................31
3.1 Descripción del Bluetooth...........................................................................31
3.2 Funcionamiento del Bluetooth....................................................................32
3.3 Protocolo Bluetooth.....................................................................................34
3.4 Arquitectura Bluetooth.................................................................................35
3.5 Módulo Bluetooth HC05...............................................................................36
CAPITULO 4: Prototipo de cubo led.....................................................................37
4.1 Construcción del prototipo..........................................................................38
4.2 Construcción de la estructura cúbica........................................................39
CAPITULO 5: Diseño Electrónico del prototipo cubo LED................................40
5.1 Diseño del diagrama en ISIS........................................................................40
5.2 Diseño del PCB ARES..................................................................................41
CAPITULO 6: Programación en MPLAB con lenguaje ensamblador...............42
CONCLUSIONES........................................................................................................43
REFERENCIAS...........................................................................................................44
ANEXOS......................................................................................................................44
RESUMEN
Lo primero fue realizar una estructura cúbica de doscientos dieciséis leds’, teniendo
que ocupar treinta y seis por cuadrado, se controlaron a través de un
microcontrolador de gama media PIC16F886, los led’s que se utilizan son azules
ultra brillantes, debido a que éstos ocupan menor amperaje y los lúmenes que
desprenden son mayores. Se procedió a diseñar los circuitos de comunicación y
control del cubo en software de diseño electrónico (Proteus), y se pasaron con ayuda
de éstos a placas de cobre.
En síntesis, se realizó una estructura cúbica con led’s ultra brillantes azules, en el
prototipo de cubo el microcontrolador actúa como el cerebro, pues éste predispone
de rutinas a las que se puede iniciar mediante la comunicación Bluetooth, para esto
se creó una red scatternet, que comunica un piconet maestro esclavo, la red se creó
mediante el módulo Bluetooth HC05, pues éste comunica al microcontrolador como
esclavo.
6
OBJETIVO
Por medio de un cubo formado por led’s, con la ayuda del PIC16F886 y un módulo
Bluetooth HC05 se accede a controlar rutinas del prototipo, una rutina dentro del
prototipo comprende diferentes frecuencias, movimientos dentro de las coordenadas
que harán ver diferentes figuras dentro del cubo, e incluso activar o desactivar
rutinas a la selección del usuario.
En primer término, se programan tres rutinas que pueden ser seleccionadas por el
usuario, la primera refleja la palabra IPN, activa letra por letra de tal manera que
primero se observa la I, después de un breve tiempo la P y posterior la N.
En segundo término, la segunda rutina es una serie de efectos de una cara que
recorrerá los cuatro puntos cardinales desde el centro del cubo, es decir, arriba,
abajo, izquierda y derecha.
En tercer término, la rutina final es una pared giratoria que se desplazara por los 4
puntos cardinales respecto al eje, norte, sur, este y oeste. Esto hará ver el efecto que
se recorren 6 leds alrededor del cubo.
7
INTRODUCCIÓN
I. JUSTIFICACIÓN
El punto vital del proyecto se enfoca en un prototipo capaz de ser manipulado por un
usuario externo cualquiera. A través del prototipo se entiende que las aplicaciones
del diodo, así como de los microcontroladores son accesibles para cualquier persona
y que, por otra parte, permitan el desarrollo de proyectos de todo tipo.
8
II. ANTECEDENTES
9
III. ESTADO DEL ARTE
El diodo Led
Los diodos emisores de luz led, en ellos está basado gran parte del proyecto, pues
los leds siempre se han utilizado en el mundo de la tecnología como indicadores
lumínicos, ya que son dispositivos semiconductores que emiten luz cuando por el
circula una corriente eléctrica. La tecnología led ha dado su paso más reciente con
los leds de luz blanca que son los que pueden sustituir a las bombillas de luz,
principalmente porque consumen menos energía eléctrica la cual se enfoca al
cuidado del medio ambiente. El led se define por sus siglas como diodo emisor de luz,
no es más que un pequeño chip de material semiconductor, que cuando es atravesado
por una corriente eléctrica, en sentido apropiado, emite luz monocromática sin producir
calor, es decir un componente electrónico semiconductor, con polaridad por lo que se
usará en funciones de señalización, estética y, actualmente iluminación.
Su estructura consta de un hilo muy fino, entre el cátodo y el ánodo, que podría dar
apariencia de fragilidad, pero no es así; porque no tiene que ponerse incandescente
(de hecho, apenas se calienta) y no está al aire, sino incrustado dentro del epoxi.
Está basado el proyecto en diodos led debido a sus principales beneficios, como lo son
el tamaño, el mínimo voltaje y corriente, a que no se calientan, debido a ello no son
necesario disipadores de calor, potencia que manejan, etcétera. Específicamente, el
led azul ultra brillante, nos ofrece todas estas características.
10
El microcontrolador
Cabe decir que hay tres clases de microcontroladores, los de gama baja, media y alta,
cada una de las cuales tiene propósitos y aplicaciones diferentes, pues alguna de ellas
maneja instrucciones lógicas más potentes, lo cual sirve para generar diferentes
objetivos y funciones dentro del código de programa.
11
Bluetooth
Una comunicación Bluetooth ocurre entre la capa radio de un maestro y la capa radio
de un esclavo. Las especificaciones radio de uno y otro agente son simétricas, de
esta forma el mismo dispositivo puede operar como maestro y como esclavo al
mismo tiempo, en distintas piconets. Cada interfaz radio tiene una dirección única de
48 bits, BD_ADDR. Si unimos al menos un maestro y varios esclavos (hasta 7
esclavos) tenemos una red ad-hoc, llamada piconet. Todas las unidades de una
misma piconet, comparten un mismo canal.
12
IV. DESCRIPCIÓN DEL TRABAJO
13
CUERPO DEL TRABAJO
CAPITULO 1: MICROCONTROLADORES FUNDAMENTOS Y APLICACIONES
CON PIC
El microprocesador
15
1.2 Arquitectura del microcontrolador
Von Neumann
La arquitectura von Neumann toma el nombre del matemático John von Neumann que
propuso la idea de un ordenador con el programa almacenado (stored-program
computer). J. von Neumann trabajo en el equipo de diseñadores de la computadora
ENIAC (Electronic Numerical Integrator and Calculator) diseñada en la Universidad de
Pennsylvania durante la Segunda Guerra Mundial.
La arquitectura von Neumann utiliza una memoria única para instrucciones y datos.
Esto significa que con un mismo bus de direcciones se localizan (direccionan)
instrucciones y datos y que por un único bus de datos transitan tanto instrucciones
como datos. El mismo serial de control que emite la CPU para leer un dato, sirve para
leer una instrucción. No hay señales de control diferentes para datos e instrucciones.
Debe quedar claro que, aunque se use memoria ROM para almacenar el programa y
RAM para los datos, para la CPU no hay tal distinción, sino que ROM y RAM forman un
conjunto (una memoria de lectura y escritura) para el cual la CPU emite señales de
control, de dirección y de datos.
16
Harvard Imagen 1.2.1: Estructura a bloques de la
arquitectura Von
El termino Neumann,https://www.slideshare.net/TitilaBich
arquitectura Harvard se debe al nombre del lugar donde Howard Aiken
a/arquitectura-von-neumann-57477722
diseño los ordenadores Mark I, II, III y IV. Estos ordenadores fueron los primeros en
utilizar memorias separadas para instrucciones y datos, una concepción diferente al
ordenador de programa almacenado.
La arquitectura von Neumann requiere menos líneas que la Harvard para conectar la
CPU con la memoria, lo cual significa una conexión más simple entre ambas. Pero con
esta arquitectura es imposible manipular simultáneamente datos e instrucciones,
debido a la estructura de buses físicos, algo que si es posible en la arquitectura
Harvard, que tiene buses separados. Esto confiere a la arquitectura Harvard la ventaja
de una mayor velocidad de ejecución de los programas.
17
1.3 Las características generales del microcontrolador PIC
18
contribuye a una operación segura es el perro guardián (WDT: Watchdog
Timer), dispositivo que no existe en los ordenadores personales.
V. Bajo consumo. Dado que hay muchas aplicaciones donde se desea utilizar
baterías como fuente de alimentación, es altamente deseable que el
microcontrolador consuma poca energía.
VI. Protección de los programas frente a copias. Se trata de proteger la información
almacenada en la memoria, es decir, el programa de la aplicación, contra
lecturas furtivas de la memoria del microcontrolador. Los microcontroladores
disponen de mecanismos que les protegen de estas acciones.
VII. Todos están basados en la arquitectura Harvard, con memorias de pro-
grama y de datos separadas.
VIII. Todos los microcontroladores PIC aplican la técnica del segmentado (pipeline)
en la ejecución de las instrucciones, en dos etapas, de modo que las
instrucciones se ejecutan en un ciclo de instrucción, equivalente a cuatro pulsos
del oscilador principal del microcontrolador, excepto las instrucciones de
transferencia de control que toman dos ciclos de instrucción.
IX. Otra característica común a los microcontroladores PIC es la forma en que esta
implementada la pila. La pila no forma parte de la memoria de datos, sino que
ocupa un espacio independiente y tiene además una profundidad limitada,
según el modelo de PIC. En estos microcontroladores no hay un puntero de pila
(registro SP: Stack Pointer), tan común en la mayoría de los microprocesadores
y en muchos microcontroladores.
X. Todos los microcontroladores PIC cuentan con un temporizador que trabaja
como perro guardián y tienen un cierto número de bits para configurar el
dispositivo, a los que se accede al programar el microcontrolador. Mediante
alguno de los bits de configuración, se puede proteger la memoria de programa
frente a copias no autorizadas.
XI. Muchos microcontroladores PIC pueden ser programados en el propio circuito
de la aplicación (ICSP: In-Circuit Serial Programming), utilizando un pequeño
fluffier° de líneas.
19
1.4 Familias de Microcontrolador
20
XXX - 14 - - 13 10 1 x 16 I2C SPI 3
368 64
PIC16H 1.75 64 14 20 0- 10 2 2x81x USART - -
VXXX - 3.5 - - 12 16 I2C SPI
128 20
Arquitectura de la gama alta de 8 bits, palabra de instrucción de 16 bits
PIC18F 4- 256 18 32 - 4- 10 or 0-3 0-2x8 USB2.0 0 - -
XXX 128 - - 48 16 12 2-3x CAN2.0 5
393 80 16 USART
6 I2C SPI
PIC18F 8 - 102 28 40 - 10 - 10 2 0-2x8 USB2.0 2 - -
XXJXX 128 4 - - 48 16 2-3x USART 5
393 10 16 Ethernet
6 0 I2C SPI
PIC18F 8 - 768 28 64 10 - 10 2 1 x 8 3 x USART 2 -
XXKXX 64 - - 13 16 I2C SPI
393 44
6
Tabla 1 1: Familias de los Microcontroladores PICS y sus principales características
21
1.5 La memoria en los microcontroladores
22
ventana de cristal, por lo que una vez programados no se puede borrar ni alterar
su información. En los microcontroladores PIC, la letra 'C' en el nombre del
dispositivo indica que la memoria es OTP o EPROM. El PIC16C74B/JW es un
dispositivo con memoria EPROM, porque el sufijo JW indica que el encapsulado
dispone de una ventana de cuarzo para el borrado. Los dispositivos
PIC16C72A/P y PIC16C74B/SO son OTP con encapsulado plástico DIP y SOIC
para montaje en superficie, respectivamente.
IV. EEPROM: La memoria EEPROM es una memoria no volátil de lectura y
escritura. La escritura de la memoria se realiza por medios eléctricos. Las celdas
pueden ser escritas individualmente sin una operación previa de borrado. La
memoria se puede reprogramar un número finito, aunque muy grande, de veces
(del orden de 106).
V. FLASH En las memorias FLASH se pueden leer y escribir celdas individual-
mente, aunque, en general, para escribir en una celda hay que borrar primero su
información. El borrado de estas memorias se realiza por bloques de celdas de
memoria, no celda a celda. Esto las diferencias de las memorias EEPROM.
Borrar es poner todos los bits del bloque de celdas en 0. La operación de
escritura consiste en poner selectivamente a 1 los bits deseados. Con una
operación de escritura se puede poner a 1 un bit que está en 0, pero para poner
en 0 un bit que está en 1 hay que borrar el bloque de celdas correspondiente.
Entonces, a menudo, una operación de escritura de información en una celda de
memoria flash se convierte en una operación de lectura - borrado - escritura del
bloque de celdas donde se desea escribir la información. Todas las operaciones
de borrado, lectura y escritura se realizan con la tensión de funcionamiento
normal del dispositivo, sin necesidad de una tensión mayor.
Todas las instrucciones se ejecutan en un ciclo. La única excepción pueden ser las
instrucciones de ramificación condicional o las instrucciones que cambian el contenido
del contador de programa. En ambos casos, dos ciclos de reloj son necesarios para la
ejecución de la instrucción, mientras que el segundo ciclo se ejecuta como un NOP
(No operación). Las instrucciones de un ciclo consisten en cuatro ciclos de reloj. Si se
utiliza un oscilador de 4 MHz, el tiempo nominal para la ejecución de la instrucción es
1μS. En cuanto a las instrucciones de ramificación, el tiempo de ejecución de la
instrucción es 2μS. Juego de instrucciones de los microcontroladores PIC de 14 bits:
24
bit de Acarreo
COMF f,d Complementar f f -> d Z 1 1, 2
Instrucciones orientadas a bit
BCF f,b Poner a 0 el bit b 0 -> f(b) 1 1, 2
del registro f
BSF f,b Poner a 1 el bit b 1 -> f(b) 1 1, 2
del registro f
Instrucciones de control de programa
BTFSC f,b Saltar si bit b de Skip if f(b) = 0 1 (2) 3
registro f es 0
BTFSS f,b Saltar si bit b de Skip if f(b) = 1 1 (2) 3
reg. f es 1
DECFSZ f,d Disminuir f en 1. f-1 -> d skip if Z 1 (2) 1, 2,
Saltar si el =1 3
resultado es 0
INCFSZ f,d Incrementar f en 1. f+1 -> d skip if 1 (2) 1, 2,
Saltar si el Z=0 3
resultado es 1
GOTO k Saltar a una k -> PC 2
dirección
CALL k Llamar a una PC -> TOS, k -> 2
subrutina PC
RETURN Retornar de una TOS -> PC 2
subrutina
RETLW k Retornar con literal k -> W, TOS -> 2
en W PC
RETFIE Retornar de una TOS -> PC, 1 -> 2
interrupción GIE
Otras instrucciones
NOP No operación TOS -> PC, 1 -> 1
GIE
CLRWDT Reiniciar el 0 -> WDT, 1 -> TO, PD 1
temporizador perro TO, 1 -> PD
guardián
SLEEP Poner en estado de 0 -> WDT, 1 -> TO, PD 1
reposo TO, 0 -> PD
Tabla 1 2: El set de instrucciones de un PIC de gama media con 35 instrucciones lógicas, de control y
literales.
25
1.7 El microcontrolador PIC16F886
26
XXIV. Soporta 1,000,000 ciclos de borrado/escritura en memoria EEPROM
XXV. Retención de datos mayor a 40 años
XXVI. Protección de código y datos programable
XXVII. Encapsulado DIP de 28 pines
27
CAPITULO 2: Diodo emisor de luz: Tecnología LED
Su estructura consta de un hilo muy fino, entre el cátodo y el ánodo, que podría dar
apariencia de fragilidad, pero no es así; porque no tiene que ponerse incandescente
(de hecho, apenas se calienta) y no está al aire, sino incrustado dentro del epoxi.
28
Imagen 2.1: Estructura del diodo emisor de
2.2 Funcionamiento luz, https://www.tr3sdland.com/2011/11/el-
diodo-led/
El LED es un componente electrónico que pertenece a la familia de los diodos pero
que tiene la propiedad de emitir luz cuando se le aplica una corriente eléctrica. Como
todo Diodo se encuentra construido a base de materiales cuya combinación
determinan tipo de luz, color. En el caso del Diodo LED, se encuentra construido en
base a un diodo se Silicio, el cual se “Dopa” con determinados elementos existentes en
la Tabla Periódica y estos le confieren características específicas, este Dopaje puede
ser de dos Tipos: El Dopaje N y el Dopaje P.
Se aplica voltaje a través del LED de manera que el ánodo sea positivo respecto del
cátodo. Esto causa una corriente de electrones que fluye en este sentido. Así, el
cátodo da electrones a la capa de emisión y el ánodo los sustrae de la capa de
conducción, seguidamente la capa de emisión comienza a cargarse negativamente
(por exceso de electrones), mientras que la capa de conducción se carga con huecos
(por carencia de electrones). Las fuerzas electrostáticas atraen a los electrones y a los
huecos, los unos con los otros, y se recombinan (en el sentido inverso de la carga no
habría recombinación y el dispositivo no funcionaría).
1. Cátodo (-),
2. Capa de emisión,
3. Emisión de radiación (luz),
4. Capa de conducción,
5. Ánodo (+).
29
2.3 Aplicaciones
30
Desventajas:
Las principales desventajas que podemos encontrar en el uso de la tecnología Leds
son las siguientes.
31
CAPITULO 3: Comunicación Inalámbrica Bluetooth
Cada unidad de la piconet utiliza su identidad maestra y reloj nativo para seguir en el
canal de salto. Cuando se establece la conexión, se añade un ajuste de reloj a la
propia frecuencia de reloj nativa de la unidad esclava para poder sincronizarse con el
reloj nativo del maestro. El reloj nativo mantiene siempre constante su frecuencia, sin
embargo, los ajustes producidos por las unidades esclavas para sincronizarse con el
maestro, sólo son válidos mientras dura la conexión.
Dentro de la misma área pueden coexistir diversas piconets ya que cada piconet
tiene una unidad maestra distinta con su propia secuencia de saltos de canales y de
fase. A medida que tenemos más piconets en la misma área de cobertura, la
probabilidad de colisión aumenta produciendo una degradación del espectro y
reduciendo el rendimiento del sistema.
33
una unidad abandona una piconet, la esclava informa el maestro actual que ésta no
estará disponible por un determinado periodo, que será en el que estará activa en
otra piconet. Una unidad maestra también puede cambiar de piconet, pero en este
caso el tráfico de la piconet en la cual está activa deja de tener tráfico hasta la vuelta
de la unidad maestra. La maestra que entra en una nueva piconet, en principio, lo
hace como esclava, a no ser que posteriormente ésta solicite actuar como maestra.
34
3.3 Protocolo Bluetooth
La pila está constituida por dos clases de protocolos. Una primera clase llamada de
protocolos específicos que implementa los protocolos propios de Bluetooth. Y una
segunda clase formada por el conjunto de protocolos adoptados de otras
especificaciones. Esta división en clases en el diseño de la pila de protocolos de
Bluetooth permite aprovechar un conjunto muy amplio de ventajas de ambas. Por un
lado, al implementar protocolos específicos de Bluetooth permite utilizar los
beneficios que aporta la adopción de la tecnología Bluetooth. Por otro lado, la
utilización de protocolos no específicos ofrece la ventaja de la interacción de esta
tecnología con protocolos comerciales ya existentes. Así como la posibilidad de que
Bluetooth este abierto a implementaciones libres o nuevos protocolos de aplicación
de uso común. La pila de protocolos se puede dividir en cuatro capas lógicas:
35
3.4 Arquitectura Bluetooth
Una comunicación Bluetooth ocurre entre la capa radio de un maestro y la capa radio
de un esclavo. Las especificaciones radio de uno y otro agente son simétricas, de
esta forma el mismo dispositivo puede operar como maestro y como esclavo al
mismo tiempo, en distintas piconets. Cada interfaz radio tiene una dirección única de
48 bits, BD_ADDR. Si unimos al menos un maestro y varios esclavos (hasta 7
esclavos) tenemos una red ad-hoc, llamada piconet. Todas las unidades de una
misma piconet, comparten un mismo canal.
Para identificar un dispositivo activo dentro de una piconets, usamos una dirección
de bits AM_ADDR. Este valor no es fijo y cambia de dispositivo cuando alguno se
desconecta.
La comunicación nunca ocurre entre esclavos, siempre tienen que ser entre un
maestro y un esclavo. Por otro lado, el esclavo de una piconet debe sincronizar su
reloj interno y su tasa de saltos en frecuencia, ya que como hemos comentado, en
cada piconet se usa una secuencia de frequency hopping diferente.
36
3.5 Módulo Bluetooth HC05
Para poder controlar el cubo led de una manera inalámbrica optamos por la
comunicación Bluetooth, mediante el módulo Bluetooth HC05 que nos permite crear
una piconet maestro esclavo, de ésta manera el microcontrolador actúa como
esclavo y cualquier dispositivo inteligente como maestro. El módulo ofrece el servicio
de puerto serie (RFCOMM), creando un enlace de datos transparente entre una PC,
Celular, Tablet o cualquier dispositivo con Bluetooth maestro y el microcontrolador. La
salida del módulo es una señal serial asíncrona a 9600 baudios que puede ser
recibida e interpretada fácilmente por cualquier microcontrolador.
37
CAPITULO 4: Prototipo de cubo led
Materiales
Microcontrolador PIC 16F886
216 LED azul ultra brillante
Placa Fenólica una cara virgen (30x20CM) y (20x20CM)
Soldadura de estaño 22mm
Cautín de punta
Pasta de soldar
Multiplexor 74164 (8bits)
Resistencia de valor 330, 220 (ohm)
Alambre de cobre calibre 14
Jumper de conexión macho y hembra
Modulo Bluetooth HC-05
38
4.1 Construcción del prototipo
Primeramente se creó el prototipo de una estructura cúbica de 216 les azul ultra
brillantes, para ello se realizaron 6 cuadrados de 36 diodos, ocupando así cartón que
permitió ubicar a cada led por medio de coordenadas en el cuadrado. Quedo de la
siguiente manera:
39
4.2 Construcción de la estructura cúbica
Ya teniendo los 6 cuadrados de leds se pasó a crear una estructura con ellos,
montando uno encima de otro y uniendo los puntos comunes y de señales.
Se colocaron los LED mediante los jumperes, formando así un cubo de 6x6x6 Leds.
Para facilitar su control se construyó el cubo de tal modo que se compone por planos
verticales individuales que permiten que 36 LED compartan un ánodo en común, al
igual que los cátodos, pero estos últimos formando filas verticales (LED Cube
Manual).
Dado que sólo se enciende únicamente un LED a la vez, de acuerdo con la ley de
Ohm, se requiere aplicar un voltaje de 7.1 V para alimentar el sistema usan- do
resistencias de 330 Ω para limitar la corriente de cada fila de 20 LED (dos filas
verticales). En la base de cada transistor se conectaron resistencias de 1 K, para
lograr la polarización y operación adecuada.
40
CAPITULO 5: Diseño Electrónico del prototipo cubo LED
En éste capítulo se trata el diseño electrónico mediante el uso del software Proteus 8
para ello se diseña el circuito implementando la herramienta de diseño ISIS de
Proteus, en ella misma se puede simular el funcionamiento del prototipo.
I. Microcontrolador PIC16F886
II. Pines o TBLOCK (2, 6) unidades
III. Registro de corrimiento 74164
41
5.2 Diseño del PCB ARES
42
CAPITULO 6: Programación en MPLAB con lenguaje ensamblador
43
RETLW B'11011111' TABLA_OCHO
RETLW B'11110111' ADDWF PCL,1
RETLW B'01111101' RETLW B'11111111'
RETLW B'11011111' RETLW B'00000011'
RETLW B'11110111' RETLW B'11111111'
RETLW B'11111111'
TABLA_TRES
RETLW B'11111111'
ADDWF PCL,1
RETLW B'10111111' TABLA_NUEVE
RETLW B'11101111' ADDWF PCL,1
RETLW B'11111011' RETLW B'11111111'
RETLW B'10111110' RETLW B'11111111'
RETLW B'11101111' RETLW B'11000000'
RETLW B'11111111'
TABLA_CUATRO
RETLW B'11111111'
ADDWF PCL,1
RETLW B'01111111' TABLA_DIEZ
RETLW B'11011111' ADDWF PCL,1
RETLW B'11110111' RETLW B'11111111'
RETLW B'01111101' RETLW B'11111111'
RETLW B'11011111' RETLW B'00111111'
RETLW B'11110000'
TABLA_CINCO
RETLW B'11111111'
ADDWF PCL,1
RETLW B'11111111' TABLA_ONCE
RETLW B'10111110' ADDWF PCL,1
RETLW B'11101111' RETLW B'11111111'
RETLW B'11111011' RETLW B'11111111'
RETLW B'10111110' RETLW B'11111111'
RETLW B'00001111'
TABLA_SEIS
RETLW B'11111100'
ADDWF PCL,1
RETLW B'11111111' TABLA_DOCE
RETLW B'01111101' ADDWF PCL,1
RETLW B'11011111' RETLW B'11111111'
RETLW B'11110111' RETLW B'11111111'
RETLW B'01111101' RETLW B'11111111'
RETLW B'11111111'
TABLA_SIETE
RETLW B'00000011'
ADDWF PCL,1
RETLW B'00001111' ;;;;;;;;;;;;;;;;;;;;;RUTINA DE PARED;;;;;;;;;;;;;;;;;;
RETLW B'11111100'
TABLA_UNO0
RETLW B'11111111'
ADDWF PCL,1
RETLW B'11111111'
RETLW B'11111111'
RETLW B'11111111'
RETLW B'10111101'
RETLW B'11110111'
44
RETLW B'11011110' RETLW B'11111001'
RETLW B'11111011' RETLW B'11111001'
RETLW B'11111100'
TABLA_UNO1
ADDWF PCL,1 TABLA_UNO7
RETLW B'11111111' ADDWF PCL,1
RETLW B'11011110' RETLW B'11111111'
RETLW B'11110111' RETLW B'11111111'
RETLW B'10111110' RETLW B'11111000'
RETLW B'11110111' RETLW B'11110001'
RETLW B'11111111'
TABLA_UNO2
ADDWF PCL,1 TABLA_UNO8
RETLW B'01111111' ADDWF PCL,1
RETLW B'11011110' RETLW B'11111111'
RETLW B'11110111' RETLW B'11111111'
RETLW B'10111110' RETLW B'00000111'
RETLW B'11101111' RETLW B'11111110'
RETLW B'11111111'
TABLA_UNO3
ADDWF PCL,1 TABLA_UNO9
RETLW B'10111111' ADDWF PCL,1
RETLW B'11101111' RETLW B'11111111'
RETLW B'11111011' RETLW B'01111111'
RETLW B'01111101' RETLW B'01100111'
RETLW B'11011111'
RETLW B'11101110'
TABLA_UNO4 RETLW B'11111111'
ADDWF PCL,1
;;;;;;;;;;;;;;;;;;;;;;;;;LINEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RETLW B'11011111'
RETLW B'11101111' SEGUNDA
RETLW B'11111011' CLRF 0X22
RETLW B'01111101' MOVLW D'5' ;NUMERO DE DATOS QUE
RETLW B'10111111' HAY EN LAS TABLAS
MOVWF 0X24
TABLA_UNO5
ADDWF PCL,1 RETROCESO
RETLW B'11101111' MOVLW D'8';VECES QUE SE VA A
RETLW B'11110111' ROTAR
RETLW B'11111011' MOVWF 0X25
RETLW B'11111101' MOVFW 0X22 ; PARA LLAMAR A LAS
RETLW B'01111110' TABLAS
CALL TABLA_UNO
TABLA_UNO6
MOVWF 0X26 ;MOVER EL DATO DE LA
ADDWF PCL,1
TABLA A LA LOCALIDAD
RETLW B'11111111'
RETLW B'11111011'
45
NEW NEW2
RRF 0X26 ; ROTAR RRF 0X26 ; ROTAR
BTFSS STATUS,C BTFSS STATUS,C
GOTO CERO GOTO CERO2
BSF PORTC,1 BSF PORTC,1
REPETIR2
REPETIR
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK
CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN
BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK
PULSO AL CLOCK
DECFSZ 0X25
DECFSZ 0X25
GOTO NEW2
GOTO NEW
INCF 0X22
INCF 0X22
DECFSZ 0X24
DECFSZ 0X24
GOTO RETROCESO2
GOTO RETROCESO
BSF PORTC,2 ;PRENDO PARA DAR PULSO
BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO
AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO
DATO MANDADO
MOVLW B'00000100'
MOVLW B'00000100'
MOVWF PORTA
MOVWF PORTA
GOTO SEGUNDA2
;GOTO SEGUNDA
RETURN
RETURN
CERO2
CERO
BCF PORTC,1
BCF PORTC,1
GOTO REPETIR2
GOTO REPETIR
SEGUNDA3
SEGUNDA2
CLRF 0X22
CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE
MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS
HAY EN LAS TABLAS
MOVWF 0X24
MOVWF 0X24
RETROCESO3
RETROCESO2
MOVLW D'8';VECES QUE SE VA A
MOVLW D'8';VECES QUE SE VA A
ROTAR
ROTAR
MOVWF 0X25
MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS
MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS
TABLAS
CALL TABLA_TRES
CALL TABLA_DOS
MOVWF 0X26 ;MOVER EL DATO DE LA
MOVWF 0X26 ;MOVER EL DATO DE LA
TABLA A LA LOCALIDAD
TABLA A LA LOCALIDAD
46
NEW3 NEW4
RRF 0X26 ; ROTAR RRF 0X26 ; ROTAR
BTFSS STATUS,C BTFSS STATUS,C
GOTO CERO3 GOTO CERO4
BSF PORTC,1 BSF PORTC,1
REPETIR3 REPETIR4
BSF PORTC,0 ;PRENDO PARA DAR CLOCK BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK PULSO AL CLOCK
DECFSZ 0X25 DECFSZ 0X25
GOTO NEW3 GOTO NEW4
INCF 0X22 INCF 0X22
DECFSZ 0X24 DECFSZ 0X24
GOTO RETROCESO3 GOTO RETROCESO4
BSF PORTC,2 ;PRENDO PARA DAR PULSO BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO DATO MANDADO
MOVLW B'00000100' MOVLW B'00000100'
MOVWF PORTA MOVWF PORTA
GOTO SEGUNDA3 GOTO SEGUNDA4
RETURN RETURN
CERO3 CERO4
BCF PORTC,1 BCF PORTC,1
GOTO REPETIR3 GOTO REPETIR4
SEGUNDA4 SEGUNDA5
CLRF 0X22 CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS HAY EN LAS TABLAS
MOVWF 0X24 MOVWF 0X24
RETROCESO4 RETROCESO5
MOVLW D'8';VECES QUE SE VA A MOVLW D'8';VECES QUE SE VA A
ROTAR ROTAR
MOVWF 0X25 MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS TABLAS
CALL TABLA_CUATRO CALL TABLA_CINCO
MOVWF 0X26 ;MOVER EL DATO DE LA MOVWF 0X26 ;MOVER EL DATO DE LA
TABLA A LA LOCALIDAD TABLA A LA LOCALIDAD
47
NEW5 NEW6
RRF 0X26 ; ROTAR RRF 0X26 ; ROTAR
BTFSS STATUS,C BTFSS STATUS,C
GOTO CERO5 GOTO CERO6
BSF PORTC,1 BSF PORTC,1
REPETIR5 REPETIR6
BSF PORTC,0 ;PRENDO PARA DAR CLOCK BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK PULSO AL CLOCK
DECFSZ 0X25 DECFSZ 0X25
GOTO NEW5 GOTO NEW6
INCF 0X22 INCF 0X22
DECFSZ 0X24 DECFSZ 0X24
GOTO RETROCESO5 GOTO RETROCESO6
BSF PORTC,2 ;PRENDO PARA DAR PULSO BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO DATO MANDADO
MOVLW B'00000100' MOVLW B'00000100'
MOVWF PORTA MOVWF PORTA
GOTO SEGUNDA5 GOTO SEGUNDA6
RETURN RETURN
CERO5 CERO6
BCF PORTC,1 BCF PORTC,1
GOTO REPETIR5 GOTO REPETIR6
SEGUNDA6 SEGUNDA7
CLRF 0X22 CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS HAY EN LAS TABLAS
MOVWF 0X24 MOVWF 0X24
RETROCESO6
RETROCESO7
MOVLW D'8';VECES QUE SE VA A
MOVLW D'8';VECES QUE SE VA A
ROTAR
ROTAR
MOVWF 0X25
MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS
MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS
TABLAS
CALL TABLA_SEIS
CALL TABLA_SIETE
MOVWF 0X26 ;MOVER EL DATO DE LA
MOVWF 0X26 ;MOVER EL DATO DE LA
TABLA A LA LOCALIDAD
TABLA A LA LOCALIDAD
48
NEW7 NEW8
RRF 0X26 ; ROTAR RRF 0X26 ; ROTAR
BTFSS STATUS,C BTFSS STATUS,C
GOTO CERO7 GOTO CERO8
BSF PORTC,1 BSF PORTC,1
REPETIR7 REPETIR8
BSF PORTC,0 ;PRENDO PARA DAR CLOCK BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK PULSO AL CLOCK
DECFSZ 0X25 DECFSZ 0X25
GOTO NEW7 GOTO NEW8
INCF 0X22 INCF 0X22
DECFSZ 0X24 DECFSZ 0X24
GOTO RETROCESO7 GOTO RETROCESO8
BSF PORTC,2 ;PRENDO PARA DAR PULSO BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO DATO MANDADO
MOVLW B'00000100' MOVLW B'00000100'
MOVWF PORTA MOVWF PORTA
;GOTO SEGUNDA5 GOTO SEGUNDA5
RETURN RETURN
CERO7 CERO8
BCF PORTC,1 BCF PORTC,1
GOTO REPETIR7 GOTO REPETIR8
SEGUNDA8 SEGUNDA9
CLRF 0X22 CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS HAY EN LAS TABLAS
MOVWF 0X24 MOVWF 0X24
RETROCESO8 RETROCESO9
MOVLW D'8';VECES QUE SE VA A MOVLW D'8';VECES QUE SE VA A
ROTAR ROTAR
MOVWF 0X25 MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS TABLAS
CALL TABLA_OCHO CALL TABLA_NUEVE
MOVWF 0X26 ;MOVER EL DATO DE LA MOVWF 0X26 ;MOVER EL DATO DE LA
TABLA A LA LOCALIDAD TABLA A LA LOCALIDAD
49
NEW9 SEGUNDA10
RRF 0X26 ; ROTAR CLRF 0X22
BTFSS STATUS,C MOVLW D'5' ;NUMERO DE DATOS QUE
GOTO CERO9 HAY EN LAS TABLAS
BSF PORTC,1 MOVWF 0X24
REPETIR9
RETROCESO10
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
MOVLW D'8';VECES QUE SE VA A
CALL CLK ;LLAMO AL CLOCK
ROTAR
BCF PORTC,0 ; APAGO PARA DAR UN
MOVWF 0X25
PULSO AL CLOCK
MOVFW 0X22 ; PARA LLAMAR A LAS
DECFSZ 0X25
TABLAS
GOTO NEW9
CALL TABLA_DIEZ
INCF 0X22
MOVWF 0X26 ;MOVER EL DATO DE LA
DECFSZ 0X24
TABLA A LA LOCALIDAD
GOTO RETROCESO9
BSF PORTC,2 ;PRENDO PARA DAR PULSO NEW10
AL LATCH Y QUE SE VISUALISE EL DATO RRF 0X26 ; ROTAR
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL BTFSS STATUS,C
DATO MANDADO GOTO CERO10
MOVLW B'00000100' BSF PORTC,1
MOVWF PORTA
REPETIR10
GOTO SEGUNDA5
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
RETURN
CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN
CERO9 PULSO AL CLOCK
BCF PORTC,1 DECFSZ 0X25
GOTO REPETIR9 GOTO NEW10
INCF 0X22
DECFSZ 0X24
GOTO RETROCESO10
BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO
MOVLW B'00000100'
MOVWF PORTA
GOTO SEGUNDA5
RETURN
CERO10
BCF PORTC,1
GOTO REPETIR10
50
SEGUNDA11 SEGUNDA12
CLRF 0X22 CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS HAY EN LAS TABLAS
MOVWF 0X24 MOVWF 0X24
RETROCESO11
RETROCESO12
MOVLW D'8';VECES QUE SE VA A
MOVLW D'8';VECES QUE SE VA A
ROTAR
ROTAR
MOVWF 0X25
MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS
MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS
TABLAS
CALL TABLA_ONCE
CALL TABLA_DOCE
MOVWF 0X26 ;MOVER EL DATO DE LA
MOVWF 0X26 ;MOVER EL DATO DE LA
TABLA A LA LOCALIDAD
TABLA A LA LOCALIDAD
NEW11
NEW12
RRF 0X26 ; ROTAR
RRF 0X26 ; ROTAR
BTFSS STATUS,C
BTFSS STATUS,C
GOTO CERO11
GOTO CERO5
BSF PORTC,1
BSF PORTC,1
REPETIR11
REPETIR12
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK
CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN
BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK
PULSO AL CLOCK
DECFSZ 0X25
DECFSZ 0X25
GOTO NEW11
GOTO NEW12
INCF 0X22
INCF 0X22
DECFSZ 0X24
DECFSZ 0X24
GOTO RETROCESO11
GOTO RETROCESO12
BSF PORTC,2 ;PRENDO PARA DAR PULSO
BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO
AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
MOVLW B'00000100' DATO MANDADO
MOVWF PORTA MOVLW B'00000100'
GOTO SEGUNDA5 MOVWF PORTA
RETURN GOTO SEGUNDA5
RETURN
CERO11
BCF PORTC,1 CERO12
GOTO REPETIR11 BCF PORTC,1
GOTO REPETIR12
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IPN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51
PRIMERA1 MOVLW D'5' ;NUMERO DE DATOS QUE
CLRF 0X22 HAY EN LAS TABLAS
MOVLW D'5' ;NUMERO DE DATOS QUE MOVWF 0X24
HAY EN LAS TABLAS
RETROCESOPRIMERA2
MOVWF 0X24
MOVLW D'8';VECES QUE SE VA A
ROTAR
RETROCESOPRIMERA
MOVWF 0X25
MOVLW D'8';VECES QUE SE VA A
MOVFW 0X22 ; PARA LLAMAR A LAS
ROTAR
TABLAS
MOVWF 0X25
CALL TABLA_P
MOVFW 0X22 ; PARA LLAMAR A LAS
MOVWF 0X26 ;MOVER EL DATO DE LA
TABLAS
TABLA A LA LOCALIDAD
CALL TABLA_I
MOVWF 0X26 ;MOVER EL DATO DE LA NEWPRIMERA2
TABLA A LA LOCALIDAD RRF 0X26 ; ROTAR
BTFSS STATUS,C
NEWPRIMERA
GOTO CEROPRIMERA2
RRF 0X26 ; ROTAR
BSF PORTC,1
BTFSS STATUS,C
GOTO CEROPRIMERA REPETIRPRIMERA2
BSF PORTC,1 BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK
REPETIRPRIMERA
BCF PORTC,0 ; APAGO PARA DAR UN
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
PULSO AL CLOCK
CALL CLK ;LLAMO AL CLOCK
DECFSZ 0X25
BCF PORTC,0 ; APAGO PARA DAR UN
GOTO NEWPRIMERA2
PULSO AL CLOCK
INCF 0X22
DECFSZ 0X25
DECFSZ 0X24GOTO RETROCESOPRIMERA2
GOTO NEWPRIMERA
BSF PORTC,2 ;PRENDO PARA DAR PULSO
INCF 0X22
AL LATCH Y QUE SE VISUALISE EL DATO
DECFSZ 0X24
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
GOTO RETROCESOPRIMERA
DATO MANDADO
BSF PORTC,2 ;PRENDO PARA DAR PULSO
RETURN
AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL CEROPRIMERA2
DATO MANDADO BCF PORTC,1
RETURN GOTO REPETIRPRIMERA2
CEROPRIMERA
BCF PORTC,1 PRIMERA3
GOTO REPETIRPRIMERA CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS
PRIMERA2 MOVWF 0X24
CLRF 0X22
52
RETROCESOPRIMERA3 MOVWF 0X25
MOVLW D'8';VECES QUE SE VA A MOVFW 0X22 ; PARA LLAMAR A LAS
ROTAR TABLAS
MOVWF 0X25 CALL TABLA_UNO0
MOVFW 0X22 ; PARA LLAMAR A LAS MOVWF 0X26 ;MOVER EL DATO DE LA
TABLAS TABLA A LA LOCALIDAD
CALL TABLA_N
NEW20
MOVWF 0X26 ;MOVER EL DATO DE LA
RRF 0X26 ; ROTAR
TABLA A LA LOCALIDAD
BTFSS STATUS,C
NEWPRIMERA3 GOTO CERO20
RRF 0X26 ; ROTAR BSF PORTC,1
BTFSS STATUS,C
REPETIR20
GOTO CEROPRIMERA3
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
BSF PORTC,1
CALL CLK ;LLAMO AL CLOCK
REPETIRPRIMERA3 BCF PORTC,0 ; APAGO PARA DAR UN
BSF PORTC,0 ;PRENDO PARA DAR PULSO AL CLOCK
CLOCKCALL DECFSZ 0X25
CLK ;LLAMO AL CLOCK GOTO NEW20
BCF PORTC,0 ; APAGO PARA DAR UN INCF 0X22
PULSO AL CLOCK DECFSZ 0X24
DECFSZ 0X25 GOTO RETROCESO20
GOTO NEWPRIMERA3 BSF PORTC,2 ;PRENDO PARA DAR PULSO
INCF 0X22 AL LATCH Y QUE SE VISUALISE EL DATO
DECFSZ 0X24 BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
GOTO RETROCESOPRIMERA3 DATO MANDADO
BSF PORTC,2 ;PRENDO PARA DAR PULSO MOVLW B'11111111'
AL LATCH Y QUE SE VISUALISE EL DATO MOVWF PORTA
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL GOTO SEGUNDA
DATO MANDADO RETURN
RETURN
CERO20
CEROPRIMERA3 BCF PORTC,1
BCF PORTC,1 GOTO REPETIR20
GOTO REPETIRPRIMERA3
;;;;;;;;;;;;;;;;;;;;;;;;;PARED;;;;;;;;;;;;;;;;;;;;;;;;;;;
TERCERA21
TERCERA20 CLRF 0X22
CLRF 0X22 MOVLW D'5' ;NUMERO DE DATOS QUE
MOVLW D'5' ;NUMERO DE DATOS QUE HAY EN LAS TABLAS
HAY EN LAS TABLAS MOVWF 0X24
MOVWF 0X24 RETROCESO21
RETROCESO20 MOVLW D'8';VECES QUE SE VA A
MOVLW D'8';VECES QUE SE VA A ROTAR
ROTAR MOVWF 0X25
53
MOVFW 0X22 ; PARA LLAMAR A LAS TABLAS
TABLAS CALL TABLA_UNO2
CALL TABLA_UNO1 MOVWF 0X26 ;MOVER EL DATO DE LA
MOVWF 0X26 ;MOVER EL DATO DE LA TABLA A LA LOCALIDAD
TABLA A LA LOCALIDAD
NEW22
NEW21 RRF 0X26 ; ROTAR
RRF 0X26 ; ROTAR BTFSS STATUS,C
BTFSS STATUS,C GOTO CERO22
GOTO CERO21 BSF PORTC,1
BSF PORTC,1
REPETIR22
REPETIR21_
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK
CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN
BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK
PULSO AL CLOCK
DECFSZ 0X25
DECFSZ 0X25
GOTO NEW22
GOTO NEW21
INCF 0X22
INCF 0X22
DECFSZ 0X24
DECFSZ 0X24
GOTO RETROCESO22
GOTO RETROCESO21
BSF PORTC,2 ;PRENDO PARA DAR PULSO
BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO
AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO
DATO MANDADO
MOVLW B'11111111'
MOVLW B'11111111'
MOVWF PORTA
MOVWF PORTA
GOTO SEGUNDA
GOTO SEGUNDA
RETURN
RETURN
CERO21 CERO22
BCF PORTC,1 BCF PORTC,1
GOTO REPETIR21 GOTO REPETIR22
TERCERA23
CLRF 0X22
TERCERA22 MOVLW D'5' ;NUMERO DE DATOS QUE
CLRF 0X22 HAY EN LAS TABLAS
MOVLW D'5' ;NUMERO DE DATOS QUE MOVWF 0X24
HAY EN LAS TABLAS
MOVWF 0X24 RETROCESO23
RETROCESO22 MOVLW D'8';VECES QUE SE VA A
MOVLW D'8';VECES QUE SE VA A ROTAR
ROTAR MOVWF 0X25
MOVWF 0X25 MOVFW 0X22 ; PARA LLAMAR A LAS
MOVFW 0X22 ; PARA LLAMAR A LAS TABLAS
54
CALL TABLA_UNO3 MOVWF 0X26 ;MOVER EL DATO DE LA
MOVWF 0X26 ;MOVER EL DATO DE LA TABLA A LA LOCALIDAD
TABLA A LA LOCALIDAD
NEW24
NEW23
RRF 0X26 ; ROTAR
RRF 0X26 ; ROTAR
BTFSS STATUS,C
BTFSS STATUS,C
GOTO CERO24[
GOTO CERO23
BSF PORTC,1
BSF PORTC,1
REPETIR23 REPETIR24
BSF PORTC,0 ;PRENDO PARA DAR CLOCK BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK[ PULSO AL CLOCK
DECFSZ 0X25 DECFSZ 0X25
GOTO NEW23 GOTO NEW25
INCF 0X22 INCF 0X22
DECFSZ 0X24 DECFSZ 0X24
GOTO RETROCESO23 GOTO RETROCESO24
BSF PORTC,2 ;PRENDO PARA DAR PULSO BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO DATO MANDADO
MOVLW B'11111111' MOVLW B'11111111'
MOVWF PORTA MOVWF PORTA
GOTO SEGUNDA GOTO SEGUNDA
RETURN RETURN
CERO23 CERO24
BCF PORTC,1 BCF PORTC,1
GOTO REPETIR23 GOTO REPETIR24
TERCERA24 TERCERA25
CLRF 0X22 CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS HAY EN LAS TABLAS
MOVWF 0X24 MOVWF 0X24
RETROCESO24 RETROCESO25
MOVLW D'8';VECES QUE SE VA A MOVLW D'8';VECES QUE SE VA A
ROTAR ROTAR
MOVWF 0X25 MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS TABLAS
CALL TABLA_UNO4 CALL TABLA_UNO5
55
MOVWF 0X26 ;MOVER EL DATO DE LA MOVWF 0X26 ;MOVER EL DATO DE LA
TABLA A LA LOCALIDAD TABLA A LA LOCALIDAD
NEW25 NEW26
RRF 0X26 ; ROTAR RRF 0X26 ; ROTAR
BTFSS STATUS,C BTFSS STATUS,C
GOTO CERO25 GOTO CERO26
BSF PORTC,1 BSF PORTC,1
REPETIR25 REPETIR26
BSF PORTC,0 ;PRENDO PARA DAR CLOCK BSF PORTC,0 ;PRENDO PARA DAR CLOCK
CALL CLK ;LLAMO AL CLOCK CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK PULSO AL CLOCK
DECFSZ 0X25 DECFSZ 0X25
GOTO NEW25 GOTO NEW26
INCF 0X22 INCF 0X22
DECFSZ 0X24 DECFSZ 0X24
GOTO RETROCESO25 GOTO RETROCESO26
BSF PORTC,2 ;PRENDO PARA DAR PULSO BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO DATO MANDADO
MOVLW B'11111111' MOVLW B'11111111'
MOVWF PORTA MOVWF PORTA
GOTO SEGUNDA GOTO SEGUNDA
RETURN RETURN
CERO25 CERO26
BCF PORTC,1 BCF PORTC,1
GOTO REPETIR25 GOTO REPETIR26
TERCERA26 TERCERA27
CLRF 0X22 CLRF 0X22
MOVLW D'5' ;NUMERO DE DATOS QUE MOVLW D'5' ;NUMERO DE DATOS QUE
HAY EN LAS TABLAS HAY EN LAS TABLAS
MOVWF 0X24 MOVWF 0X24
RETROCESO26 RETROCESO27
MOVLW D'8';VECES QUE SE VA A MOVLW D'8';VECES QUE SE VA A
ROTAR ROTAR
MOVWF 0X25 MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS TABLAS
CALL TABLA_UNO6 CALL TABLA_UNO7
MOVWF 0X26 ;MOVER EL DATO DE LA
56
TABLA A LA LOCALIDAD TERCERA28
CLRF 0X22
NEW27 MOVLW D'5' ;NUMERO DE DATOS QUE
RRF 0X26 ; ROTAR HAY EN LAS TABLAS
BTFSS STATUS,C MOVWF 0X24
GOTO CERO27 RETROCESO28
BSF PORTC,1 MOVLW D'8';VECES QUE SE VA A
ROTAR
REPETIR27
MOVWF 0X25
BSF PORTC,0 ;PRENDO PARA DAR CLOCK
MOVFW 0X22 ; PARA LLAMAR A LAS
CALL CLK ;LLAMO AL CLOCK
TABLAS
BCF PORTC,0 ; APAGO PARA DAR UN
CALL TABLA_UNO8
PULSO AL CLOCK
MOVWF 0X26 ;MOVER EL DATO DE LA
DECFSZ 0X25
TABLA A LA LOCALIDAD
GOTO NEW27
INCF 0X22 NEW28
DECFSZ 0X24 RRF 0X26 ; ROTAR
GOTO RETROCESO27 BTFSS STATUS,C
BSF PORTC,2 ;PRENDO PARA DAR PULSO GOTO CERO28
AL LATCH Y QUE SE VISUALISE EL DATO BSF PORTC,1
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO
MOVLW B'11111111' REPETIR28
MOVWF PORTA BSF PORTC,0 ;PRENDO PARA DAR CLOCK
GOTO SEGUNDA CALL CLK ;LLAMO AL CLOCK
RETURN BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK
CERO27
DECFSZ 0X25
BCF PORTC,1
GOTO NEW28
GOTO REPETIR27
INCF 0X22
DECFSZ 0X24
GOTO RETROCESO28
BSF PORTC,2 ;PRENDO PARA DAR PULSO
AL LATCH Y QUE SE VISUALISE EL DATO
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL
DATO MANDADO
MOVLW B'11111111'
MOVWF PORTA
GOTO SEGUNDA
RETURN
CERO28
BCF PORTC,1
GOTO REPETIR28
57
TERCERA29 CLK
CLRF 0X22 MOVLW D'5'
MOVLW D'5' ;NUMERO DE DATOS QUE MOVWF 0X33
HAY EN LAS TABLAS UNO
MOVWF 0X24 NOP
RETROCESO29 DECFSZ 0X33
MOVLW D'8';VECES QUE SE VA A GOTO UNO
ROTAR RETURN
MOVWF 0X25
MOVFW 0X22 ; PARA LLAMAR A LAS
TABLAS SEG
CALL TABLA_UNO9_ MOVLW D'70'
MOVWF 0X26 ;MOVER EL DATO DE LA MOVWF 0X31
TABLA A LA LOCALIDAD YY
MOVLW D'249'
NEW29 MOVWF 0X32
RRF 0X26 ; ROTAR XX
BTFSS STATUS,C NOP
GOTO CERO29 DECFSZ 0X32
BSF PORTC,1 GOTO XX
DECFSZ 0X31
REPETIR29 GOTO YY
BSF PORTC,0 ;PRENDO PARA DAR CLOCK RETURN
CALL CLK ;LLAMO AL CLOCK
BCF PORTC,0 ; APAGO PARA DAR UN
PULSO AL CLOCK SEG2
DECFSZ 0X25 MOVLW D'50'
GOTO NEW29 MOVWF 0X31
INCF 0X22 YYY
DECFSZ 0X24 MOVLW D'249'
GOTO RETROCESO29 MOVWF 0X32
BSF PORTC,2 ;PRENDO PARA DAR PULSO XXX
AL LATCH Y QUE SE VISUALISE EL DATO NOP
BCF PORTC,2 ;APAGO PARA QUE SE VEA EL DECFSZ 0X32
DATO MANDADO GOTO XXX
MOVLW B'11111111' DECFSZ 0X31_
MOVWF PORTA GOTO YYY
GOTO SEGUNDA RETURN
RETURN
CERO29
BCF PORTC,1 ENCENDIDO
GOTO REPETIR29 MOVLW B'00000100'
MOVWF PORTA
CALL SEG
58
MOVLW B'00001100' BSF STATUS,RP1
MOVWF PORTA CLRF ANSEL
CALL SEG CLRF ANSELH
MOVLW B'00011100' CLRF STATUS
MOVWF PORTA
;;;;;;;;;;;;;;;PROGRAMA PRINCIPAL;;;;;;;;;;;
CALL SEG
MOVLW B'00111100' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IPN;;;;;;;;;;;;;;;;;;;;;;;;;
MOVWF PORTA
CALL SEG CALL PRIMERA1
MOVLW B'01111100' CALL ENCENDIDO
MOVWF PORTA CALL PRIMERA2
CALL SEG CALL ENCENDIDO
MOVLW B'11111100' CALL PRIMERA3
MOVWF PORTA CALL ENCENDIDO
CALL SEG ;;;;;;;;;;;;;;;;;;;;;;;;;;;LINEA;;;;;;;;;;;;;;;;;;;;;;;
MOVLW B'11111000'
MOVWF PORTA PISTO
CALL SEG MOVLW D'3' ;VECES QUE SE REPETIRA LA
MOVLW B'11110000' RUTINA
MOVWF PORTA MOVWF 0X39
CALL SEG GOGO
MOVLW B'11100000' CALL SEGUNDA
MOVWF PORTA CALL SEG
CALL SEG NOP
MOVLW B'11000000' CALL SEGUNDA2
MOVWF PORTA CALL SEG
CALL SEG NOP
MOVLW B'10000000' CALL SEGUNDA3
MOVWF PORTA CALL SEG
CALL SEG NOP
MOVLW B'00000000' CALL SEGUNDA4
MOVWF PORTA CALL SEG
CALL SEG NOP
RETURN CALL SEGUNDA5
CALL SEG
start NOP
;;;;;;;;;CONFIGURACIÓN DE PUERTOS;;;;;;;;;; CALL SEGUNDA6
CALL SEG
BSF STATUS,RP0 NOP
CLRF TRISC CALL SEGUNDA5
CLRF TRISA CALL SEG
MOVLW 0X00 NOP
MOVWF PORTC CALL SEGUNDA4
MOVLW 0X00 CALL SEG
MOVWF PORTA NOP
59
CALL SEGUNDA3 GOGO2
CALL SEG CALL SEGUNDA7
NOP CALL SEG
CALL SEGUNDA2 NOP
CALL SEG CALL SEGUNDA8
NOPDECFSZ 0X39 CALL SEG
GOTO GOGO NOP
CALL SEGUNDA9
PISTO2
CALL SEG
MOVLW D'3' ;VECES QUE SE REPETIRA LA
NOP
RUTINA
CALL SEGUNDA10
MOVWF 0X39
CALL SEG
NOP
CALL SEGUNDA11
CALL SEG
NOP
CALL SEGUNDA12
CALL SEG
NOP
CALL SEGUNDA11
CALL SEG
NOP
CALL SEGUNDA10
CALL SEG
NOP
CALL SEGUNDA9
CALL SEG
NOP
CALL SEGUNDA8
CALL SEG
NOP
DECFSZ 0X39
GOTO GOGO2
MOVLW D'3'
MOVWF 0X39
GEGE
CALL SEGUNDA3
MOVLW B'00100000'
MOVWF PORTA
CALL SEG
NOP
MOVLW B'00010000'
60
MOVWF PORTA ;;;;;;;;;;;;;;;;;;;;;;;PARED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CALL SEG
PISTO3
NOP
MOVLW D'4' ;VECES QUE SE REPETIRA LA
MOVLW B'00001000'
RUTINA
MOVWF PORTA
MOVWF 0X39
CALL SEG
GAGA
NOP
CALL TERCERA20
MOVLW B'00000100'
CALL SEG2
MOVWF PORTA
NOP
CALL SEG
CALL TERCERA21
NOP
CALL SEG2
MOVLW B'00000010'
NOP
MOVWF PORTA
CALL TERCERA22
CALL SEG
CALL SEG2
NOP
NOP
MOVLW B'00000001'
CALL TERCERA23
MOVWF PORTA
CALL SEG2
CALL SEG
NOP
NOP
CALL TERCERA24
MOVLW B'00000010'
CALL SEG2
MOVWF PORTA
NOP
CALL SEG
CALL TERCERA25
NOP
CALL SEG2
MOVLW B'00000100'
NOP
MOVWF PORTA
CALL TERCERA26
CALL SEG
CALL SEG2
NOP
NOP
MOVLW B'00001000'
CALL TERCERA27
MOVWF PORTA
CALL SEG2
CALL SEG
NOP
NOP
CALL TERCERA28
MOVLW B'00010000'
CALL SEG2
MOVWF PORTA
NOP
CALL SEG
CALL TERCERA29
NOP
CALL SEG2
MOVLW B'00100000'
NOP
MOVWF PORTA
DECFSZ 0X39
CALL SEG
GOTO GAGA
NOP
CLRF PCL
DECFSZ 0X39
GOTO GEGE
END ; directive 'end of program'
61
CONCLUSIONES
62
El proyecto se realizó empleando técnicas, procedimientos y métodos de
programación adquiridos en los cuatro semestres que aprendimos en el transcurso
de éstos.
REFERENCIAS
No hay ninguna fuente en el documento actual.
63
ANEXOS
64
65