Você está na página 1de 27

Benemrita Universidad Autnoma de Puebla Facultad de Ciencias de la Electrnica Ingeniera de Mecatrnica Diseo de un Controlador Difuso Alumno: Luis Oscar

Lara Lozano

Objetivo En este trabajo se mvil, el cual la ontrolador PIC. El ramienta de fuzzy

presenta el desarrollo de un controlador difuso para un robot implementacin de dicho control se llevar acabo mediante un microc trabajo se desarrolla mediante simulaciones utilizando la her logic del software MATLAB y tambin MPLAB IDE de Microchip.

Introduccin En los ltimos aos los sistemas difusos se han convertido en una herramienta til par a tratar y modelar sistemas de control no lineales. El control difuso se ha tran sformado en una alternativa muy til para la realizacin de este, dicha alternativa permite, mediante el conocimiento de una o varias personas, generar un conocimie nto previo que podr dar la capacidad al sistema de tomar decisiones sobre ciertas circunstancias que se presenten en el funcionamiento. En este trabajo se da una breve introduccin a los sistemas difusos, para crear posteriormente un ejemplo bs ico de un controlador mediante un robot mvil. Lgica Difusa Introduccin El concepto de lgica difusa se basa en emular la manera en que el cerebro razona o piensa, esta permite tratar informacin imprecisa, en trminos de conjuntos difuso s. La teora de conjuntos difusos parte de la teora clsica de conjuntos, la lgica dif usa esencialmente es una lgica multievaluada que extiende a la lgica clsica. En est a ltima se imponen nicamente dos posibles valores, teniendo as valores de verdadero o falso, obteniendo un conjunto dado por: Conjuntos Difusos A diferencia de un conjunto clsico, a un conjunto difuso se le asocia un determin ado valor lingstico definido por un adjetivo o palabra. A este conjunto se le defi ne una funcin que indica el grado de pertenencia a un conjunto, a estos valores s e le denominan funcin de pertenencia o de inclusin (membership function). En trmino s matemticos, un conjunto difuso F en U queda caracterizado por una funcin de incl usin que toma valores en el rango de [0,1], es decir, ; donde representa el grado en el que pertenece al conjunto difuso F. De esta forma el valor de una funcin d e perteneca puede tomar los distintos valores como:

Para la definicin de estas funciones de pertenencia se utilizan convencionalmente ciertas familias de formas estndar, las mas frecuentes son la funcin de tipo trap ezoidal, singleton, triangular, S, exponencial y tipo . Las funciones que utiliza remos para este control difuso son de tipo trapezoidal y tipo triangular, de los cuales solo nos enfocaremos a ver estas 2 funciones. La funcin de tipo trapezoidal se define por cuatro puntos a, b, c, d. Esta funcin es cero para valores menores de a y mayores de d, valen uno entre b y c, y toma valores en [0,1] entre a y b, y entre c y d. Se utilizan habitualmente en sistem as difusos sencillos, pues permite definir un conjunto difuso con pocos datos, y calcular su valor de pertenencia con pocos clculos. 1.0 Funcin de pertenencia de tipo trapezoidal u 0 a Esta funcin esta definida por: b c d La funcin de tipo triangular es una funcin adecuada para modelar propiedades con u n valor de pertenencia distinto de cero para un rango de valores estrechos en to rno a un punto b. 1.0 Funcin de pertenencia de tipo triangular 0 a b c u

Y esta funcin esta definida por: Variable Lingstica Se denomina variable lingstica a aquella que puede tomar por valor trminos del leng uaje normal, como: mucho, poco, positivo, negativo, etc., estas son las palabras que desempean el papel de etiquetas en un conjunto difuso. En trminos ms comunes, una variable lingstica se puede definir por (A, T(A)), donde A es el nombre de la variable y T(A) es el conjunto de trminos que nombran los valores x que puede tom ar A. Para entender un poco mejor este concepto se cita el siguiente ejemplo que permitir comprender el sentido de este trmino. Por ejemplo: Temperatura se puede considerar una variable lingstica, de modo que A=temperatura. T(Temperatura) es el conjunto de todos los trminos que pueden hacer referencia a la temperatura, como muy fra, fra, normal, caliente y muy caliente, de esta forma podemos expresar dis tintos rangos de valores dentro de una variable. Operaciones difusas De la misma forma que los conjuntos clsicos, en los cuales se pueden generar dist intos tipos de operaciones, estas operaciones tambin se pueden generar en los con juntos difusos. Para ello se pueden definir tres operaciones bsicas a estos conju ntos: el complemento, la unin y la interseccin. Estas operaciones bsicas pueden exp resarse de la siguiente manera en trminos de las funciones de pertenencia de los conjuntos difusos. Sean los subconjuntos difusos dados por las etiquetas A y B, asociados a una variable lingstica x, se puede obtener: Complemento Unin Interseccin

Reglas Difusas Las reglas difusas combinan uno o ms conjuntos difusos de entrada llamados premis as, y las asocian con conjuntos difusos de salida, llamados consecuencias. Estas reglas permiten expresar el conocimiento que se tiene sobre una relacin y para p oder denotar este conocimiento de forma completa se precisan de varias reglas, q ue se agrupan formando lo que se le conoce como una base de reglas. Para generar una base de reglas se necesita una coleccin distinta de reglas que asocien las e ntradas necesarias con las salidas a utilizar. Cada una de estas reglas se gener a utilizando el tpico IF-THEN, en otras palabras tenemos que: SI sucede una accin E NTONCES tendremos una consecuencia, este mtodo se puede representar ms claramente d e la siguiente manera: Ms adelante se presentara un ejemplo para que se comprenda de forma mejor estos tr minos. Defusificacin La defusificacin es la funcin que transforma un conjunto o valores difusos en un c onjunto o valores no difusos (reales) [1]. Para generar una defusificacin se pued en utilizar distintos mtodos como son: Defusificacin por mximo de centros Defusific acin por media de centros Defusificacin por centro de rea Para este caso utilizarem os la defusificacin por media de centros, que est definida por: En donde son las diferentes reglas difusas que se tiene para el sistema y esta d efinido como el valor dentro del rango de la variable, para la cual el rea dentro de la grafica de la funcin de membreca C se divide en dos sub-reas [1].

Control Difuso Los sistemas expertos de control difuso basados en reglas, son conocidos como co ntroladores difusos, estos son sin duda la aplicacin ms extendida de la lgica difus a [1]. La estructura tpica de un controlador basado en un sistema difuso puede ve rse e la figura (1.1). Un primer bloque realiza un preprocesado de las variables de entrada, que proporciona el vector de entradas al controlador difuso. El con trolador difuso aplica la entrada que recibe a la base de reglas, para obtener l a salida. Finalmente, esta salida puede requerir un procesado final, con el fin de adecuarla al proceso que se tiene que controlar. Accin Defusificacin Controlador difuso Proceso controlado Interferencia difusa Base de reglas Fusificacin Condicin Figura 1.1: Esquema de un controlador difuso La estructura bsica de un controlador difuso, consta de un primer elemento llamad o fusificador, que realiza la conversin de valores clsicos a trminos difusos. Su sa lida es utilizada por el dispositivo de inferencia difuso para aplicarla a cada una de la base de reglas, siguiendo el mtodo de inferencia adecuado. La salida de este bloque pueden ser conjuntos difusos o bien un solo conjunto difuso. Finalm ente, el defusificador transformar estos conjuntos difusos en un valor no difuso o clsico. En general un controlador difuso es un sistema experto, ya que utiliza informacin y conocimiento que provee un operador humano.

Desarrollo Expuesto ya una breve introduccin a lo que es la lgica difusa y sus conceptos bsico s, ahora el paso siguiente es desarrollar con cierto detalle un sencillo ejemplo de la aplicacin de este tema dentro de la electrnica. El problema que nos plantea remos es lograr controlar un robot mvil, este robot tendr un sensor y 2 motores, s u principal tarea es navegar en lnea recta hasta que se encuentre un objeto frent e de l, el robot al detectar un obstculo procesara la informacin de la distancia a la que se encuentra dicho objeto y cambiara la velocidad de los motores dependie ndo de la distancia obtenida y la velocidad que tenia anteriormente el robot. Es ta aplicacin es sin duda un control de lazo cerrado que proporcionara una retroal imentacin de nuestro sistema y su funcin principal es lograr que el robot mvil se a proxime lo ms cercano posible al obstculo pero sin tocarlo, el sistema que se gene rar se muestra como en la siguiente figura: Entrada Deteccin de la distancia Contr ol difuso Sistema de control Control de velocidad Salida Motores Antes de que se prosiga, se aclara que este documento se enfoca a crear un contr olador difuso en un microcontrolador PIC, sin embargo, no se da enfoque a la det eccin de la distancia ni al control de los motores, puesto que este es un tema di ferente a lo que se plantea, no obstante, se da una breve explicacin de lo que se utilizo. Para la distancia se opto por ocupar un sensor SRF05 [2]. Este sensor es un dispositivo electrnico que es capaz de medir distancias utilizando ondas ul trasnicas. Para el control de la velocidad de los motores se utilizo un control d e modulacin de ancho de pulso o por sus siglas en ingles PWM [3]. Para comenzar p rimero nombraremos nuestras variables lingsticas para los conjuntos difusos, enton ces en este caso tenemos 2 que son: la primera es la DISTANCIA y la segunda es l a VELOCIDAD. Ahora nombraremos los diferentes conjuntos difusos para cada una de las variables lingsticas: Distancia: o Muy Cerca o Cerca o Lejos o Muy Lejos Velo cidad: o Muy Lenta o Lenta o Rpida o Muy Rpida MC C L ML MUL LE R MR

Ya obtenido los conjuntos difusos necesarios para las 2 variables lingsticas crear emos las funciones de pertenencia necesarias en cada caso diferente. Empezaremos primero con la DISTANCIA: Para el conjunto difuso Muy Cerca vamos a ocupar una funcin de tipo trapezoidal definida por: Para el conjunto difuso Cerca ocuparemos una funcin triangular definida por: Para el conjunto difuso Lejos ocuparemos una funcin triangular definida por: Para el conjunto difuso Muy Lejos ocuparemos una funcin trapezoidal definida por: De la misma forma, crearemos las funciones de pertenencia para la VELOCIDAD: Para el conjunto difuso Muy Lento vamos a ocupar una funcin de tipo triangular de finida por: Para el conjunto difuso Lento ocuparemos una funcin triangular definida por: Para el conjunto difuso Rpido ocuparemos una funcin triangular definida por: Para el conjunto difuso Muy Rpido ocuparemos una funcin trapezoidal definida por:

Los datos necesarios para generar cada uno de los diferentes funciones de perten encia se creo a partir de informacin recabada por distintas personas, he aqu el po rque se piensa que la lgica difusa es la forma en que razona una persona, puesto que lo que se hace, es recopilar una base de datos generada a travs de la experie ncia de una persona sobre un tema en especfico. Ya que se tiene toda esta informa cin bsica para el control difuso, lo que prosigue es generar nuestra base de regla s y operaciones difusas, en este caso utilizaremos la operacin de interseccin, y e l formato de las reglas sern del tipo Mamdani, en el cual, tenemos lo siguiente: Interseccin En donde hace referencia a todos los diferentes valores que puede tom ar la funcin de pertenencia de la DISTANCIA, y a los valores de la VELOCIDAD. Y e l formato de tipo Mandani es el siguiente: Entonces las reglas que propondremos sern: Lo que se tiene aqu es un cuadro que nos representa las 16 reglas posibles que se podrn generar, ya que contamos con 4 conjuntos de DISTANCIA y 4 conjuntos de VEL OCIDAD, en si 4x4=16, por esto tenemos las 16 reglas posibles. A continuacin enun ciaremos cada una de estas reglas por separado: R1 R2 R3 R4 R5 R6 R7 R8 = Si DIS TANCIA = MC = Si DISTANCIA = C = Si DISTANCIA = L = Si DISTANCIA = ML = Si DISTA NCIA = MC = Si DISTANCIA = C = Si DISTANCIA = L = Si DISTANCIA = ML y y y y y y y y y y y y VELOCIDAD = MUL VELOCIDAD = MUL VELOCIDAD = MUL VELOCIDAD = MUL VELO CIDAD = VELOCIDAD = VELOCIDAD = VELOCIDAD = VELOCIDAD VELOCIDAD VELOCIDAD VELOCI DAD = = = = LE LE LE LE R R R R VELOCIDAD = MUL VELOCIDAD = L VELOCIDAD = R VELO CIDAD = MR VELOCIDAD = MUL VELOCIDAD = L VELOCIDAD = R VELOCIDAD = MR VELOCIDAD = MUL VELOCIDAD = L VELOCIDAD = R VELOCIDAD = MR R9 = Si DISTANCIA = MC R10 = Si DISTANCIA = C R11 = Si DISTANCIA = L R12 = Si DI STANCIA = ML

R13 = Si DISTANCIA = MC R14 = Si DISTANCIA = C R15 = Si DISTANCIA = L R16 = Si D ISTANCIA = ML y y y y VELOCIDAD = VELOCIDAD = VELOCIDAD = VELOCIDAD = MR MR MR MR VELOCIDAD = MUL VELOCIDAD = L VELOCIDAD = R VELOCIDAD = MR Una vez que tenemos todos los datos para generar el controlador difuso, lo que s iguiente que haremos es simular estos datos para verificar si las funciones de p ertenencia son adecuadas y si el control difuso ser el correcto. Para esto utiliz aremos una herramienta de MATLAB conocida como Fuzzy Tool, esta herramienta nos pe rmite generar una simulacin del controlador difuso que queremos crear, como se pu ede apreciar en la figura 2.1, se presenta una imagen de la ventana principal de la herramienta fuzzy tool, en la cual tenemos las reglas en el formato Mamdani, como entrada tenemos la DISTANCIA y la VELOCIDAD y como salida tambin tenemos la VELOCIDAD a causa de que este es un control de lazo cerrado, tambin se puede obs ervar que en la defusificacion se tiene el mtodo de la media de centros o centroi de.

En la figura 2.2 se presenta una ventana que contiene los distintos valores de p ertenencia para la variable DISTANCIA. En la figura 2.3 se muestran los distintos valores de pertenencia para la variab le VELOCIDAD

En la herramienta de MATLAB existe un apartado donde se selecciona el tipo de re glas a utilizar, esta ventana se muestra en la figura 2.4, aqu se puede observar las distintas reglas que creamos anteriormente. Una forma de simular un controlador difuso en esta herramienta es utilizando el visor de reglas, este visor nos permite modificar los valores que tengamos a la entrada y observar el valor de salida correspondiente, en s, el visor de reglas y a tiene la programacin difusa necesaria para evaluar cada funcin de pertenencia de las variables lingsticas, tambin evala las reglas necesarias para poder procesar la informacin y despus defusificarla, en pocas palabras con esta herramienta no se t iene que preocupar por programar un control difuso, solo es necesario introducir la informacin necesaria que se tenga.

Para conocer si el control difuso esta correcto, podemos analizar la grafica sal iente que se generar, esta grfica toma los valores necesarios y los representa vis ualmente, en este ejemplo se puede observar que la grfica es casi lineal, esto qu iere decir que si la DISTANCIA se encuentra muy lejos la VELOCIDAD ser muy rpida, pero si la DISTANCIA es corta la VELOCIDAD es menor, esto se puede observar en l as siguientes imgenes: Un punto importante, como se menciono anteriormente, es que la grfica es casi lin eal, esto se puede observar porque en la grfica se tienen ciertos puntos que los cuales aumenta o disminuye, una solucin a este problema es generar ms funciones de pertenencia, esto creara mayor informacin al controlador difuso para que su resul tado pueda ser exacto. Obtenida la simulacin y sabiendo que esta es correcta y fu ncional, ahora lo que necesitamos es poder crear nuestro propio controlador para el robot mvil, una ventaja sera crear un programa en una computadora, este puede ser en lenguaje C, Delphi, Basic o C++ etc. Esto casi no provocara ningn inconvenien te ya que se cuenta con un procesador muy potente dentro de la computadora, en c ambio, una de las mayores desventajas generadas conlleva a que el robot es mvil y no esttico, pero si ocupamos una computadora esta tendra que estar todo el tiempo en movimiento con el robot, lo que concibe un gran problema para su propio desp lazamiento. Para resolver este problema se pens en construir el controlador dentr o de un microcontrolador, los microcontroladores son circuitos integrados progra mables que incluyen en su interior las tres unidades funcionales de una computad ora: CPU, Memoria y Unidades de E/S [3]. Haciendo uso de estos pequeos integrados reduciremos costos y generaremos mayor versatilidad de movimiento para el robot mvil.

El circuito integrado que se escogi para esta tarea es un PIC18F458 de la familia alta de microcontroladores de MICROCHIP [4]. Una ventaja que contienen estos mi crocontroladores es que son capaces de poder programarse utilizando lenguaje C y Basic, pero para manipular al mximo estos dispositivos se programara utilizando el lenguaje Ensamblador [5]. Este lenguaje es de bajo nivel y constituye la repr esentacin ms directa del cdigo maquina, esto nos posibilita la manipulacin completa del hardware y as consumir menores recursos del dispositivo controlado. Programa del Controlador Difuso El programa del controlador difuso en el microcontrolador PIC18F458 se enlista d espus, como se puede notar el programa es algo largo pero muy efectivo, un aspect o desfavorable es que los microcontroladores no manejan nmeros flotantes, entonce s lo que se ocupo en lugar de manejar los nmeros comprendidos en una funcin de per tenencia por: Se cambio por los siguientes nmeros: El cambio manejado aqu no es relativamente importante, ya que al final de la defu sificacin, se deber multiplicar por otro nmero para generar as el cambio equivalente . Tambin el programa esta comentado en cada una de sus partes para que no haya pr oblemas de comprensin de lo que se esta generando, ahora el programa es el siguie nte: ;------------------------------------------------------------------------------------------------------------------------;--PROGRAMA PARA GENERAR UN CONTROLADO R DIFUSO ;--PARA UN MICROCONTROLADOR ;--LUIS OSCAR LARA LOZANO ;--FECHA: 07/05/0 9 LIST P=18F458 #INCLUDE "P18F458.INC" ;--CONFIGURACION DE VARIABLES VAR_DISTANC IA EQU VAR_VELOCIDAD EQU VAR_MC EQU VAR_C EQU VAR_L EQU VAR_ML EQU VAR_MUL EQU V AR_LE EQU VAR_R EQU VAR_MR EQU VAR_R1 EQU VAR_R2 EQU VAR_R3 EQU VAR_R4 EQU VAR_R 5 EQU VAR_R6 EQU VAR_R7 EQU VAR_R8 EQU VAR_R9 EQU VAR_R10 EQU VAR_R11 EQU VAR_R1 2 EQU VAR_R13 EQU VAR_R14 EQU VAR_R15 EQU VAR_R16 EQU DEN EQU VM_R1 EQU VM_R2_0 EQU VM_R2_1 EQU VM_R3_0 EQU VM_R3_1 EQU VM_R4_0 EQU VM_R4_1 EQU VM_R5 EQU VM_R6_ 0 EQU VM_R6_1 EQU VM_R7_0 EQU VM_R7_1 EQU VM_R8_0 EQU VM_R8_1 EQU 0X20 0X21 0X22 0X23 0X24 0X25 0X26 0X27 0X28 0X29 0X2A 0X2B 0X2C 0X2D 0X2E 0X2F 0X30 0X31 0X32 0X33 0X34 0X35 0X36 0X37 0X38 0X39 0X3A 0X3B 0X3C 0X3D 0X3E 0X3F 0X40 0X41 0X42 0X43 0X44 0X45 0X46 0X47 0X48 ;VARIABLE PARA LA DISTANCIA ;VARIABLE PARA LA VELOCIDAD ;VARIABLE PARA EL CONJUN TO DIFUSO "MUY CERCA" ;VARIABLE PARA EL CONJUNTO DIFUSO "CERCA" ;VARIABLE PARA E L CONJUNTO DIFUSO "LEJOS" ;VARIABLE PARA EL CONJUNTO DIFUSO "MUY LEJOS" ;VARIABL E PARA EL CONJUNTO DIFUSO "MUY LENTO" ;VARIABLE PARA EL CONJUNTO DIFUSO "LENTO" ;VARIABLE PARA EL CONJUNTO DIFUSO "RAPIDO" ;VARIABLE PARA EL CONJUNTO DIFUSO "MU Y RAPIDO" ;VARIABLE PARA LA REGLA 1 ;VARIABLE PARA LA REGLA 2 ;VARIABLE PARA LA REGLA 3 ;VARIABLE PARA LA REGLA 4 ;VARIABLE PARA LA REGLA 5 ;VARIABLE PARA LA RE GLA 6 ;VARIABLE PARA LA REGLA 7 ;VARIABLE PARA LA REGLA 8 ;VARIABLE PARA LA REGL A 9 ;VARIABLE PARA LA REGLA 10 ;VARIABLE PARA LA REGLA 11 ;VARIABLE PARA LA REGL A 12 ;VARIABLE PARA LA REGLA 13 ;VARIABLE PARA LA REGLA 14 ;VARIABLE PARA LA REG LA 15 ;VARIABLE PARA LA REGLA 16 ;VARIABLE PARA EL DENOMINADOR ;VARIABLE PARA LA MUL DE LA REGLA 1 ;VARIABLE PARA LA MUL DE LA REGLA 2 ;VARIABLE PARA LA MUL DE LA REGLA 2 ;VARIABLE PARA LA MUL DE LA REGLA 3 ;VARIABLE PARA LA MUL DE LA REGLA 3 ;VARIABLE PARA LA MUL DE LA REGLA 4 ;VARIABLE PARA LA MUL DE LA REGLA 4 ;VARI ABLE PARA LA MUL DE LA REGLA 5 ;VARIABLE PARA LA MUL DE LA REGLA 6 ;VARIABLE PAR A LA MUL DE LA REGLA 6 ;VARIABLE PARA LA MUL DE LA REGLA 7 ;VARIABLE PARA LA MUL DE LA REGLA 7 ;VARIABLE PARA LA MUL DE LA REGLA 8 ;VARIABLE PARA LA MUL DE LA R EGLA 8

VM_R9 VM_R10_0 VM_R10_1 VM_R11_0 VM_R11_1 VM_R12_0 VM_R12_1 VM_R13 VM_R14_0 VM_R 14_1 VM_R15_0 VM_R15_1 VM_R16_0 VM_R16_1 SUMA1 SUMA0 DIVIDENDO_0 DIVIDENDO_1 DIV ISOR COCIENTE FTCOUNT RESIDUO VAR EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU 0X49 0X4A 0X4B 0X4C 0X4D 0X4E 0X4F 0X50 0X51 0X52 0X53 0X54 0X55 0X56 0X57 0X58 0X59 0X5A 0X5B 0X5C 0X5D 0X5E 0X5F ;VARIABLE PARA LA MUL DE LA REGLA 9 ;VARIABLE PARA LA MUL DE LA REGLA 10 ;VARIAB LE PARA LA MUL DE LA REGLA 10 ;VARIABLE PARA LA MUL DE LA REGLA 11 ;VARIABLE PAR A LA MUL DE LA REGLA 11 ;VARIABLE PARA LA MUL DE LA REGLA 12 ;VARIABLE PARA LA M UL DE LA REGLA 12 ;VARIABLE PARA LA MUL DE LA REGLA 13 ;VARIABLE PARA LA MUL DE LA REGLA 14 ;VARIABLE PARA LA MUL DE LA REGLA 14 ;VARIABLE PARA LA MUL DE LA REG LA 15 ;VARIABLE PARA LA MUL DE LA REGLA 15 ;VARIABLE PARA LA MUL DE LA REGLA 16 ;VARIABLE PARA LA MUL DE LA REGLA 16 ;VARIABLE ALTA PARA LA SUMA ;VARIABLE BAJA PARA LA SUMA ;VARIABLE BAJA DEL DIVIDENDO ;VARIABLE ALTA DEL DIVIDENDO ;VARIABLE DEL DIVISOR ;VARIABLE DEL COCIENTE ;VARIABLE DE CUENTA ;VARIABLE PARA EL RESIDU O ;--DEFINICIONES #DEFINE DISTANCIA VAR_DISTANCIA ;-----------------------------------------------------------------------------ORG 0X00 ;CONFIGURACION INICIAL G OTO CON_PORTS ;-----------------------------------------------------------------------------; TABLAS DE VALORES PARA LOS CONJUNTOS DE DISTANCIA ;-----------------------------------------------------------------------------VAL_TABLA_MC ;TA BLA DE VALORES PARA EL CONJUNTO "MUY CERCAR" ADDWF PCL,1,0 ;MOVEMOS EL VALOR AL PCL RETLW D'10' RETLW D'9' RETLW D'9' RETLW D'8' RETLW D'7' RETLW D'7' RETLW D'6 ' RETLW D'5' RETLW D'5' RETLW D'4' RETLW D'3' RETLW D'3' RETLW D'2' RETLW D'1' R ETLW D'1' RETLW D'0' VAL_TABLA_C ;TABLA DE VALORES PARA EL CONJUNTO "CERCAR" ADD WF PCL,1,0 ;MOVEMOS EL VALOR AL PCL RETLW D'0' RETLW D'1' RETLW D'1' RETLW D'2' RETLW D'3' RETLW D'3' RETLW D'4' RETLW D'5' RETLW D'5' RETLW D'6' RETLW D'7' RET LW D'7' RETLW D'8' RETLW D'9' RETLW D'9' RETLW D'10' RETLW D'9' RETLW D'9' RETLW D'8' RETLW D'7' RETLW D'7' RETLW D'6' RETLW D'5' RETLW D'5' RETLW D'4' RETLW D' 3' RETLW D'3' RETLW D'2' RETLW D'1' RETLW D'1' RETLW D'0' VAL_TABLA_L ;TABLA DE VALORES PARA EL CONJUNTO "LEJOS" ADDWF PCL,1,0 ;MOVEMOS EL VALOR AL PCL RETLW D' 0' RETLW D'1' RETLW D'1' RETLW D'2' RETLW D'3' RETLW D'3' RETLW D'4' RETLW D'5' RETLW D'5' RETLW D'6' RETLW D'7' RETLW D'7' RETLW D'8' RETLW D'9' RETLW D'9' RET LW D'10'

RETLW D'9' RETLW D'9' RETLW D'8' RETLW D'7' RETLW D'7' RETLW D'6' RETLW D'5' RET LW D'5' RETLW D'4' RETLW D'3' RETLW D'3' RETLW D'2' RETLW D'1' RETLW D'1' RETLW D'0' VAL_TABLA_ML ;TABLA DE VALORES PARA EL CONJUNTO "MUY LEJOS" ADDWF PCL,1,0 ; MOVEMOS EL VALOR AL PCL RETLW D'0' RETLW D'1' RETLW D'1' RETLW D'2' RETLW D'2' R ETLW D'3' RETLW D'3' RETLW D'4' RETLW D'4' RETLW D'5' RETLW D'5' RETLW D'6' RETL W D'6' RETLW D'7' RETLW D'7' RETLW D'8' RETLW D'8' RETLW D'9' RETLW D'9' RETLW D '10' RETLW D'10' ;-----------------------------------------------------------------;--CONFIGURACION PUERTOS ;-----------------------------------------------------------------CON_PORTS CLRF TRISC,0 ;PUERTO C COMO SALIDA MOVLW 0XFF ;PUERTO B COMO ENTRADA MOVWF TRISB,0 ;PORTB<7:0> CLRF TRISC,0 ;PUERTO C COMO SALIDA CLRF PORTC,0 ;LIMPIAMOS PORTC CLRF PORTB,0 ;LIMPIAMOS PORTB CLRF VAR ;LIMPIAMOS LA V ARIABLE "VAR" CLRF VAR_MC ;LIMPIAMOS LA VARIABLE "VAR_MC" CLRF VAR_C ;LIMPIAMOS LA VARIABLE "VAR_C" CLRF VAR_L ;LIMPIAMOS LA VARIABLE "VAR_L" CLRF VAR_ML ;LIMPI AMOS LA VARIABLE "VAR_ML" CLRF VAR_MUL ;LIMPIAMOS LA VARIABLE "VAR_MUL" CLRF VAR _LE ;LIMPIAMOS LA VARIABLE "VAR_LE" CLRF VAR_R ;LIMPIAMOS LA VARIABLE "VAR_R" CL RF VAR_MR ;LIMPIAMOS LA VARIABLE "VAR_MR" CLRF VAR_R1 ;LIMPIAMOS LA VARIABLE "VA R_R1" CLRF VAR_R2 ;LIMPIAMOS LA VARIABLE "VAR_R2" CLRF VAR_R3 ;LIMPIAMOS LA VARI ABLE "VAR_R3" CLRF VAR_R4 ;LIMPIAMOS LA VARIABLE "VAR_R4" CLRF VAR_R5 ;LIMPIAMOS LA VARIABLE "VAR_R5" CLRF VAR_R6 ;LIMPIAMOS LA VARIABLE "VAR_R6" CLRF VAR_R7 ;L IMPIAMOS LA VARIABLE "VAR_R7" CLRF VAR_R8 ;LIMPIAMOS LA VARIABLE "VAR_R8" CLRF V AR_R9 ;LIMPIAMOS LA VARIABLE "VAR_R9" CLRF VAR_R10 ;LIMPIAMOS LA VARIABLE "VAR_R 10" CLRF VAR_R11 ;LIMPIAMOS LA VARIABLE "VAR_R11" CLRF VAR_R12 ;LIMPIAMOS LA VAR IABLE "VAR_R12" CLRF VAR_R13 ;LIMPIAMOS LA VARIABLE "VAR_R13" CLRF VAR_R14 ;LIMP IAMOS LA VARIABLE "VAR_R14" CLRF VAR_R15 ;LIMPIAMOS LA VARIABLE "VAR_R15" CLRF V AR_R16 ;LIMPIAMOS LA VARIABLE "VAR_R16" CLRF DEN ;LIMPIAMOS LA VARIABLE "DENOMIN ADOR" CLRF VAR ;LIMPIAMOS LA VARIABLE CLRF SUMA0 ;LIMPIAMOS LA VARIABLE BAJA DE LA SUMA CLRF SUMA1 ;LIMPIAMOS LA VARIABLE ALTA DE LA SUMA CLRF DIVIDENDO_0 ;LIMP IAMOS LA VARIABLE BAJA DE LA DIVISION CLRF DIVIDENDO_1 ;LIMPIAMOS LA VARIABLE AL TA DE LA DIVISION CLRF DIVISOR ;LIMPIAMOS LA VARIABLE DEL DIVISOR CLRF COCIENTE ;LIMPIAMOS LA VARIABLE DEL COCIENTE CLRF RESIDUO ;LIMPIAMOS LA VARIABLE DEL RESI DUO CLRF FTCOUNT ;LIMPIAMOS LA VARIABLE DE LA CUENTA INICIO MOVLW D'41' ;VALOR L EIDO DE LA DISTANCIA MOVWF VAR_DISTANCIA,0 ;INICIAMOS EL VALOR DE DISTANCIA MOVL W D'50' ;VALOR LEIDO DE LA VELOCIDAD MOVWF VAR_VELOCIDAD,0 ;INICIAMOS EL VALOR D E LA VELOCIDAD ;-------------------------------------------------------------; F USIFICACION DEL VALOR DE LA DISTANCIA ;------------------------------------------------------------FUSIFICA_DISTANCIA MOVLW D'5' CPFSLT VAR_DISTANCIA,0 ;DISTANC IA<5? GOTO D_MAYOR ;DISTANCIA MAYOR MOVLW D'0' ;DISTANCIA MENOR MOVWF VAR_VELOCI DAD ;VELOCIDAD IGUAL A CERO BRA INICIO ;REGRESAMOS A INICIO D_MAYOR MOVLW D'60' CPFSGT VAR_DISTANCIA,0 ;DISTANCIA>61?

BRA FUS_MC ;COMIENZA LA FUZIFICACION DE LA DISTANCIA MOVLW D'100' ;VALOR MAXIMO PARA LA VELOCIDA MOVWF VAR_VELOCIDAD BRA INICIO ;SALTA A LA FUSIFICACION DE LA V ELOCIDAD ;----------------------------------------------------------------; RUTI NA PARA EL CONJUNTO "MUY CERCA" ;---------------------------------------------------------------FUS_MC MOVLW D'5' ;VALOR A COMPARAR CPFSEQ VAR_DISTANCIA,0 ;DIST ANCIA=5? GOTO D_20 ;DISTANCIA ES MAYOR (ENTONCES NOS VAMOS A COMPARAR SI ES MAYO R A 20) MOVLW D'10' ;MOVEMOS EL VALOR DE 10 A W MOVWF VAR_MC,0 ;VALOR CORRESPOND IENTE A LA VARIABLE ("MUY CERCA") BRA FUS_C ;NOS VAMOS A FUSIFICAR EL CONJUNTO " CERCA" D_20 MOVLW D'20' ;VALOR A COMPARAR CPFSGT VAR_DISTANCIA,0 ;DISTANCIA>20? B RA TABLA_MC ;DISTANCIA ES MENOR MOVLW D'0' MOVWF VAR_MC,0 ;VALOR PARA LA VARIABL E "MUY CERCA" BRA FUS_C ;NOS VAMOS A FUSIFICAR EL CONJUNTO "CERCA" TABLA_MC MOVL W D'5' ;RESTAMOS 5 AL VALOR DE LA DISTACIA SUBWF VAR_DISTANCIA,0,0 MOVWF VAR,0 R LNCF VAR,0,0 ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W CA LL VAL_TABLA_MC ;MANDA A LLAMAR A LA TABLA DE VALORES PARA "MUY CERCA" MOVWF VAR _MC ;PASA EL VALOR A LA VARIABLE ("MUY CERCA") ;---------------------------------------------------------------; RUTINA PARA EL CONJUNTO "CERCA" ;---------------------------------------------------------------FUS_C MOVLW D'10' ;VALOR A CO MPARAR CPFSLT VAR_DISTANCIA,0 ;DISTANCIA<10? GOTO D_40 ;DISTANCIA ES MAYOR (ENTON CES NOS VAMOS A COMPARAR SI ES MAYOR A 40) MOVLW D'0' ;MOVEMOS EL VALOR DE 0 A W MOVWF VAR_C,0 ;VALOR CORRESPONDIENTE A LA VARIABLE ("CERCA") BRA FUS_L ;NOS VAM OS A FUSIFICAR EL CONJUNTO "LEJOS" D_40 MOVLW D'40' ;VALOR A COMPARAR CPFSGT VAR _DISTANCIA,0 ;DISTANCIA>40? BRA TABLA_C ;DISTANCIA ES MENOR MOVLW D'0' MOVWF VAR_ C,0 ;VALOR PARA LA VARIABLE "CERCA" BRA FUS_L ;NOS VAMOS A FUSIFICAR EL CONJUNTO "LEJOS" TABLA_C MOVLW D'10' ;RESTAMOS 5 AL VALOR DE LA DISTACIA SUBWF VAR_DISTA NCIA,0,0 MOVWF VAR,0 RLNCF VAR,0,0 ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W CALL VAL_TABLA_C ;MANDA A LLAMAR A LA TABLA DE VALORES PARA "CERCA" MOVWF VAR_C ;PASA EL VALOR A LA VARIABLE ("CERCA") ;---------------------------------------------------------------; RUTINA PARA EL CONJUNTO "LEJOS" ;---------------------------------------------------------------FUS_L MOVLW D'25' ;VALOR A COMPARAR CPFSLT VAR_DISTANCIA,0 ;DISTANCIA<25? GOTO D_55 ;DISTANCIA ES MAYOR (ENTONCES NOS VAMOS A COMPARAR SI ES MAYOR A 55) MOVLW D'0' ;MOVEMOS EL VA LOR DE 0 A W MOVWF VAR_L,0 ;VALOR CORRESPONDIENTE A LA VARIABLE ("LEJOS") BRA FU S_ML ;NOS VAMOS A FUSIFICAR EL CONJUNTO "MUY LEJOS" D_55 MOVLW D'55' ;VALOR A CO MPARAR CPFSGT VAR_DISTANCIA,0 ;DISTANCIA>55? BRA TABLA_L ;DISTANCIA ES MENOR MOVL W D'0' MOVWF VAR_L,0 ;VALOR PARA LA VARIABLE "LEJOS" BRA FUS_ML ;NOS VAMOS A FUS IFICAR EL CONJUNTO "MUY LEJOS" TABLA_L MOVLW D'25' ;RESTAMOS 25 AL VALOR DE LA D ISTACIA SUBWF VAR_DISTANCIA,0,0 MOVWF VAR,0 RLNCF VAR,0,0 ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W CALL VAL_TABLA_L ;MANDA A LLAMAR A LA TABLA DE VALORES PARA "LEJOS" MOVWF VAR_L ;PASA EL VALOR A LA VARIABLE ("LEJOS" ) ;----------------------------------------------------------------; RUTINA PARA EL CONJUNTO "MUY LEJOS" ;---------------------------------------------------------------FUS_ML MOVLW D'40' ;VALOR A COMPARAR CPFSLT VAR_DISTANCIA,0 ;DISTANCIA< 40? GOTO TABLA_ML ;DISTANCIA ES MAYOR VAMOS A CHECAR LA TABLA MOVLW D'0' ;MOVEMO S EL VALOR DE 0 A W MOVWF VAR_ML,0 ;VALOR CORRESPONDIENTE A LA VARIABLE ("MUY LE JOS") BRA FUSI_VELOCIDAD ;NOS VAMOS A FUSIFICAR EL CONJUNTO "MUY LEJOS" TABLA_ML MOVLW D'40' ;RESTAMOS 40 AL VALOR DE LA DISTACIA SUBWF VAR_DISTANCIA,0,0 MOVWF VAR,0 RLNCF VAR,0,0 ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W CALL VAL_TABLA_ML ;MANDA A LLAMAR A LA TABLA DE VALORES PARA "MUY LEJOS" MO VWF VAR_ML ;PASA EL VALOR A LA VARIABLE ("MUY LEJOS") BRA FUSI_VELOCIDAD ;------------------------------------------------------------; FUSIFICACION DEL VALOR DE LA VELOCIDAD ;-------------------------------------------------------------FU SI_VELOCIDAD ;----------------------------------------------------------------; RUTINA PARA EL CONJUNTO "MUY LENTO" ;----------------------------------------------------------------

FUS_MUL MOVLW CPFSEQ GOTO MOVLW MOVWF BRA V_30 MOVLW D'30' ;VALOR A COMPARAR CPF SGT VAR_VELOCIDAD,0 ;VELOCIDAD>30? BRA TABLA_MUL ;VELOCIDAD ES MENOR MOVLW D'0' M OVWF VAR_MUL,0 ;VALOR PARA LA VARIABLE "MUY LENTO" BRA FUS_LE ;NOS VAMOS A FUSIF ICAR EL CONJUNTO "LENTO" TABLA_MUL CALL VAL_TABLA_MUL ;MANDA A LLAMAR A LA TABLA DE VALORES PARA "MUY LENTO" MOVWF VAR_MUL ;PASA EL VALOR A LA VARIABLE ("MUY LE NTO") ;----------------------------------------------------------------; RUTINA PARA EL CONJUNTO "LENTO" ;---------------------------------------------------------------FUS_LE MOVLW D'10' ;VALOR A COMPARAR CPFSLT VAR_VELOCIDAD,0 ;VELOCIDAD< 10? GOTO V_50 ;VELOCIDAD ES MAYOR (ENTONCES NOS VAMOS A COMPARAR SI ES MAYOR A 4 0) MOVLW D'0' ;MOVEMOS EL VALOR DE 0 A W MOVWF VAR_LE,0 ;VALOR CORRESPONDIENTE A LA VARIABLE ("LENTO") BRA FUS_R ;NOS VAMOS A FUSIFICAR EL CONJUNTO "RAPIDO" V_5 0 MOVLW D'50' ;VALOR A COMPARAR CPFSGT VAR_VELOCIDAD,0 ;VELOCIDAD>50? BRA TABLA_L E ;VELOCIDAD ES MENOR MOVLW D'0' MOVWF VAR_LE,0 ;VALOR PARA LA VARIABLE "LENTO" BRA FUS_R ;NOS VAMOS A FUSIFICAR EL CONJUNTO "RAPIDO" TABLA_LE MOVLW D'10' ;REST AMOS 5 AL VALOR DE LA DISTACIA SUBWF VAR_VELOCIDAD,0,0 MOVWF VAR,0 CALL VAL_TABL A_LE ;MANDA A LLAMAR A LA TABLA DE VALORES PARA "LENTO" MOVWF VAR_LE ;PASA EL VA LOR A LA VARIABLE ("LENTO") ;---------------------------------------------------------------; RUTINA PARA EL CONJUNTO "RAPIDO" ;---------------------------------------------------------------FUS_R MOVLW D'40' ;VALOR A COMPARAR CPFSLT VAR_ VELOCIDAD,0 ;VELOCIDAD<40? GOTO V_80 ;VELOCIDAD ES MAYOR (ENTONCES NOS VAMOS A CO MPARAR SI ES MAYOR A 80) MOVLW D'0' ;MOVEMOS EL VALOR DE 0 A W MOVWF VAR_R,0 ;VA LOR CORRESPONDIENTE A LA VARIABLE ("RAPIDO") BRA FUS_MR ;NOS VAMOS A FUSIFICAR E L CONJUNTO "MUY RAPIDO" V_80 MOVLW D'80' ;VALOR A COMPARAR CPFSGT VAR_VELOCIDAD, 0 ;VELOCIDAD>80? BRA TABLA_R ;VELOCIDAD ES MENOR MOVLW D'0' MOVWF VAR_R,0 ;VALOR PARA LA VARIABLE "RAPIDO" BRA FUS_MR ;NOS VAMOS A FUSIFICAR EL CONJUNTO "MUY RAP IDO" TABLA_R MOVLW D'40' SUBWF VAR_VELOCIDAD,0,0 MOVWF VAR,0 CALL VAL_TABLA_R ;M ANDA A LLAMAR A LA TABLA DE VALORES PARA "RAPIDO" MOVWF VAR_R ;PASA EL VALOR A L A VARIABLE ("RAPIDO") ;---------------------------------------------------------------; RUTINA PARA EL CONJUNTO "MUY RAPIDO" ;---------------------------------------------------------------FUS_MR MOVLW D'70' ;VALOR A COMPARAR CPFSLT VAR_V ELOCIDAD,0 ;VELOCIDAD<70? BRA TABLA_MR ;VELOCIDAD ES MAYOR VAMOS A CHECAR LA TABL A MOVLW D'0' ;MOVEMOS EL VALOR DE 0 A W MOVWF VAR_MR,0 ;VALOR CORRESPONDIENTE A LA VARIABLE ("MUY RAPIDO") BRA REGLAS ;NOS VAMOS A CHECAR LAS REGLAS TABLA_MR MO VLW D'70' SUBWF VAR_VELOCIDAD,0,0 MOVWF VAR,0 CALL VAL_TABLA_MR ;MANDA A LLAMAR A LA TABLA DE VALORES PARA "MUY RAPIDO" MOVWF VAR_MR ;PASA EL VALOR A LA VARIABL E ("MUY RAPIDO") BRA REGLAS GOTO INICIO ;---------------------------------------------------------------------; REGLAS ;---------------------------------------------------------------------REGLAS ;---------------------------------------------------------------------R1 ;REGLA 1 MOVF VAR_MC,0,0 ;MUEVE EL CONTENIDO DE VAR_MC A W CPFSGT VAR_MUL,0 ;VAR_MC<VAR_MUL? BRA V_R1 ;ES MAYOR MOVF VAR_MC,0,0 ; MUEVE EL CONTENIDO DE VAR_MC A W MOVWF VAR_R1,0 ;MUEVE EL CONTENIDO A LA REGLA 1 BRA R2 V_R1 MOVF VAR_MUL,0 ;MUEVE EL CONTENIDO DE VAR_MUL A W MOVWF VAR_R1,0 ;M UEVE EL CONTENIDO A LA REGLA 1 ;---------------------------------------------------------------------R2 ;REGLA 2 MOVF VAR_C,0,0 ;MUEVE EL CONTENIDO DE VAR_C A W CPFSGT VAR_MUL,0 ;VAR_C<VAR_MUL? BRA V_R2 ;ES MAYOR D'0' VAR_VELOCIDAD,0 V_30 D '10' VAR_MUL,0 FUS_LE ;VALOR A COMPARAR ;VELOCIDAD=0? ;VELOCIDAD ES MAYOR (ENTONC ES NOS VAMOS A COMPARAR SI ES MAYOR A 30) ;MOVEMOS EL VALOR DE 10 A W ;VALOR COR RESPONDIENTE A LA VARIABLE ("MUY LENTO") ;NOS VAMOS A FUSIFICAR EL CONJUNTO "LEN TO"

MOVF MOVWF BRA V_R2 VAR_C,0,0 VAR_R2,0 R3 ;MUEVE EL CONTENIDO DE VAR_C A W ;MUEVE EL CONTENIDO A LA REGLA 2 MOVF VAR_MUL,0 MOVWF VAR_R2,0 ;---------------------------------------------------------------------R3 MOVF VAR_L,0,0 CPFSGT VAR_MUL,0 BRA V_R3 MOVF VAR_L,0,0 MOVWF VAR_R3,0 BRA R4 V_R3 MOVF VAR_MUL,0 MOVWF VAR_R3,0 ;---------------------------------------------------------------------R4 MOVF VAR_ML,0,0 CPFSGT VAR_MU L,0 BRA V_R4 MOVF VAR_ML,0,0 MOVWF VAR_R4,0 BRA R5 V_R4 MOVF VAR_MUL,0 MOVWF VAR _R4,0 ;----------------------------------------------------------------------R5 MOVF VAR_MC,0,0 CPFSGT VAR_LE,0 BRA V_R5 MOVF VAR_MC,0,0 MOVWF VAR_R5,0 BRA R6 V _R5 MOVF VAR_LE,0 MOVWF VAR_R5,0 ;---------------------------------------------------------------------R6 MOVF VAR_C,0,0 CPFSGT VAR_LE,0 BRA V_R6 MOVF VAR_C,0, 0 MOVWF VAR_R6,0 BRA R7 V_R6 MOVF VAR_LE,0 MOVWF VAR_R6,0 ;---------------------------------------------------------------------R7 MOVF VAR_L,0,0 CPFSGT VAR_LE ,0 BRA V_R7 MOVF VAR_L,0,0 MOVWF VAR_R7,0 BRA R8 V_R7 MOVF VAR_LE,0 MOVWF VAR_R7 ,0 ;----------------------------------------------------------------------R8 MOV F VAR_ML,0,0 CPFSGT VAR_LE,0 BRA V_R8 MOVF VAR_ML,0,0 MOVWF VAR_R8,0 BRA R9 V_R8 MOVF VAR_LE,0 MOVWF VAR_R8,0 ;---------------------------------------------------------------------R9 MOVF VAR_MC,0,0 CPFSGT VAR_R,0 BRA V_R9 MOVF VAR_MC,0,0 MOVWF VAR_R9,0 BRA R10 V_R9 MOVF VAR_R,0 MOVWF VAR_R9,0 ;---------------------------------------------------------------------R10 MOVF VAR_C,0,0 CPFSGT VAR_R,0 BRA V_R10 MOVF VAR_C,0,0 MOVWF VAR_R10,0 BRA R11 V_R10 MOVF VAR_R,0 MOVWF VAR_R 10,0 ;----------------------------------------------------------------------R11 MOVF VAR_L,0,0 CPFSGT VAR_R,0 BRA V_R11 MOVF VAR_L,0,0 MOVWF VAR_R11,0 ;MUEVE EL CONTENIDO DE VAR_MUL A W ;MUEVE EL CONTENIDO A LA REGLA 2 ;REGLA 3 ;MU EVE EL CONTENIDO DE VAR_L A W ;VAR_L<VAR_MUL? ;ES MAYOR ;MUEVE EL CONTENIDO DE VA R_L A W ;MUEVE EL CONTENIDO A LA REGLA 3 ;MUEVE EL CONTENIDO DE VAR_MUL A W ;MUEVE EL CONTENIDO A LA REGLA 3 ;REGLA 4 ;MU EVE EL CONTENIDO DE VAR_ML A W ;VAR_ML<VAR_MUL? ;ES MAYOR ;MUEVE EL CONTENIDO DE VAR_ML A W ;MUEVE EL CONTENIDO A LA REGLA 4 ;MUEVE EL CONTENIDO DE VAR_MUL A W ;MUEVE EL CONTENIDO A LA REGLA 4 ;REGLA 5 ;MU EVE EL CONTENIDO DE VAR_MC A W ;VAR_MC<VAR_LE? ;ES MAYOR ;MUEVE EL CONTENIDO DE V AR_MC A W ;MUEVE EL CONTENIDO A LA REGLA 5 ;MUEVE EL CONTENIDO DE VAR_LE A W ;MUEVE EL CONTENIDO A LA REGLA 5 ;REGLA 6 ;MUE VE EL CONTENIDO DE VAR_C A W ;VAR_C<VAR_LE? ;ES MAYOR ;MUEVE EL CONTENIDO DE VAR_ C A W ;MUEVE EL CONTENIDO A LA REGLA 6 ;MUEVE EL CONTENIDO DE VAR_LE A W ;MUEVE EL CONTENIDO A LA REGLA 6 ;REGLA 7 ;MUE VE EL CONTENIDO DE VAR_L A W ;VAR_L<VAR_LE? ;ES MAYOR ;MUEVE EL CONTENIDO DE VAR_ L A W ;MUEVE EL CONTENIDO A LA REGLA 7 ;MUEVE EL CONTENIDO DE VAR_LE A W ;MUEVE EL CONTENIDO A LA REGLA 7 ;REGLA 8 ;MUE VE EL CONTENIDO DE VAR_ML A W ;VAR_ML<VAR_LE? ;ES MAYOR ;MUEVE EL CONTENIDO DE VA R_ML A W ;MUEVE EL CONTENIDO A LA REGLA 8 ;MUEVE EL CONTENIDO DE VAR_LE A W ;MUEVE EL CONTENIDO A LA REGLA 8 ;REGLA 9 ;MUE VE EL CONTENIDO DE VAR_MC A W ;VAR_MC<VAR_R? ;ES MAYOR ;MUEVE EL CONTENIDO DE VAR _MC A W ;MUEVE EL CONTENIDO A LA REGLA 9 ;MUEVE EL CONTENIDO DE VAR_R A W ;MUEVE EL CONTENIDO A LA REGLA 9 ;REGLA 10 ;MUE VE EL CONTENIDO DE VAR_C A W ;VAR_C<VAR_R? ;ES MAYOR ;MUEVE EL CONTENIDO DE VAR_C A W ;MUEVE EL CONTENIDO A LA REGLA 10

;MUEVE EL CONTENIDO DE VAR_R A W ;MUEVE EL CONTENIDO A LA REGLA 10 ;REGLA 11 ;MU EVE EL CONTENIDO DE VAR_L A W ;VAR_L<VAR_R? ;ES MAYOR ;MUEVE EL CONTENIDO DE VAR_ L A W ;MUEVE EL CONTENIDO A LA REGLA 11

BRA V_R11 R12 MOVF VAR_R,0 ;MUEVE EL CONTENIDO DE VAR_R A W MOVWF VAR_R11,0 ;MUEVE EL CONTENID O A LA REGLA 11 ;---------------------------------------------------------------------R12 ;REGLA 12 MOVF VAR_ML,0,0 ;MUEVE EL CONTENIDO DE VAR_ML A W CPFSGT VA R_R,0 ;VAR_ML<VAR_R? BRA V_R12 ;ES MAYOR MOVF VAR_ML,0,0 ;MUEVE EL CONTENIDO DE V AR_ML A W MOVWF VAR_R12,0 ;MUEVE EL CONTENIDO A LA REGLA 12 BRA R13 V_R12 MOVF V AR_R,0 ;MUEVE EL CONTENIDO DE VAR_R A W MOVWF VAR_R12,0 ;MUEVE EL CONTENIDO A LA REGLA 12 ;---------------------------------------------------------------------R13 ;REGLA 13 MOVF VAR_MC,0,0 ;MUEVE EL CONTENIDO DE VAR_MC A W CPFSGT VAR_MR,0 ;VAR_MC<VAR_MR? BRA V_R13 ;ES MAYOR MOVF VAR_MC,0,0 ;MUEVE EL CONTENIDO DE VAR_M C A W MOVWF VAR_R13,0 ;MUEVE EL CONTENIDO A LA REGLA 13 BRA R14 V_R13 MOVF VAR_M R,0 ;MUEVE EL CONTENIDO DE VAR_MR A W MOVWF VAR_R13,0 ;MUEVE EL CONTENIDO A LA R EGLA 13 ;----------------------------------------------------------------------R 14 ;REGLA 14 MOVF VAR_C,0,0 ;MUEVE EL CONTENIDO DE VAR_C A W CPFSGT VAR_MR,0 ;VAR _C<VAR_MR? BRA V_R14 ;ES MAYOR MOVF VAR_C,0,0 ;MUEVE EL CONTENIDO DE VAR_C A W M OVWF VAR_R14,0 ;MUEVE EL CONTENIDO A LA REGLA 14 BRA R15 V_R14 MOVF VAR_MR,0 ;MU EVE EL CONTENIDO DE VAR_MR A W MOVWF VAR_R14,0 ;MUEVE EL CONTENIDO A LA REGLA 14 ;----------------------------------------------------------------------R15 ;REG LA 15 MOVF VAR_L,0,0 ;MUEVE EL CONTENIDO DE VAR_L A W CPFSGT VAR_MR,0 ;VAR_L<VAR_ MR? BRA V_R15 ;ES MAYOR MOVF VAR_L,0,0 ;MUEVE EL CONTENIDO DE VAR_C A W MOVWF VA R_R15,0 ;MUEVE EL CONTENIDO A LA REGLA 15 BRA R16 V_R15 MOVF VAR_MR,0 ;MUEVE EL CONTENIDO DE VAR_MR A W MOVWF VAR_R15,0 ;MUEVE EL CONTENIDO A LA REGLA 15 ;---------------------------------------------------------------------R16 ;REGLA 4 MO VF VAR_ML,0,0 ;MUEVE EL CONTENIDO DE VAR_ML A W CPFSGT VAR_MR,0 ;VAR_ML<VAR_MR? B RA V_R16 ;ES MAYOR MOVF VAR_ML,0,0 ;MUEVE EL CONTENIDO DE VAR_C A W MOVWF VAR_R1 6,0 ;MUEVE EL CONTENIDO A LA REGLA 16 BRA DEFUSIFICACION V_R16 MOVF VAR_MR,0 ;MU EVE EL CONTENIDO DE VAR_MR A W MOVWF VAR_R16,0 ;MUEVE EL CONTENIDO A LA REGLA 16 ;-----------------------------------------------------------------------------; DEFUSIFICACION ;-----------------------------------------------------------------------------DEFUSIFICACION CLRF DEN,0 DENOMINADOR ;ENCONTRAMOS EL VALOR DEL DENOMINADOR MOVF VAR_R1,0,0 ADDWF DEN,1,0 MOVF VAR_R2,0,0 ADDWF DEN,1,0 MOVF VAR _R3,0,0 ADDWF DEN,1,0 MOVF VAR_R4,0,0 ADDWF DEN,1,0 MOVF VAR_R5,0,0 ADDWF DEN,1, 0 MOVF VAR_R6,0,0 ADDWF DEN,1,0 MOVF VAR_R7,0,0 ADDWF DEN,1,0 MOVF VAR_R8,0,0 AD DWF DEN,1,0 MOVF VAR_R9,0,0 ADDWF DEN,1,0 MOVF VAR_R10,0,0 ADDWF DEN,1,0 MOVF VA R_R11,0,0 ADDWF DEN,1,0 MOVF VAR_R12,0,0 ADDWF DEN,1,0 MOVF VAR_R13,0,0 ADDWF DE N,1,0 MOVF VAR_R14,0,0 ADDWF DEN,1,0 MOVF VAR_R15,0,0 ADDWF DEN,1,0 MOVF VAR_R16 ,0,0 ADDWF DEN,1,0 NUMERADOR ;--------------------------------------------------MOVLW D'15' ;MOVEMOS EL VALOR A MULTIPLICAR MULWF VAR_R1,0 ;MULTIPLICAMOS POR L A REGLA

MOVF PRODL,0,0 MOVWF VM_R1,0 ;--------------------------------------------------MOVLW D'30' MULWF VAR_R2,0 MOVF PRODL,0,0 MOVWF VM_R2_0,0 MOVF PRODH,0,0 MOVWF VM_R2_1,0 ;-----------------------------------------------------MOVLW D'60' MULW F VAR_R3,0 MOVF PRODL,0,0 MOVWF VM_R3_0,0 MOVF PRODH,0,0 MOVWF VM_R3_1,0 ;-----------------------------------------------------MOVLW D'85' MULWF VAR_R4,0 MOVF PRODL,0,0 MOVWF VM_R4_0,0 MOVF PRODH,0,0 MOVWF VM_R4_1,0 ;--------------------------------------------------MOVLW D'15' MULWF VAR_R5,0 MOVF PRODL,0,0 MOVWF VM_ R5,0 ;---------------------------------------------------MOVLW D'30' MULWF VAR_R 6,0 MOVF PRODL,0,0 MOVWF VM_R6_0,0 MOVF PRODH,0,0 MOVWF VM_R6_1,0 ;----------------------------------------------------MOVLW D'60' MULWF VAR_R7,0 MOVF PRODL,0, 0 MOVWF VM_R7_0,0 MOVF PRODH,0,0 MOVWF VM_R7_1,0 ;-----------------------------------------------------MOVLW D'85' MULWF VAR_R8,0 MOVF PRODL,0,0 MOVWF VM_R8_0, 0 MOVF PRODH,0,0 MOVWF VM_R8_1,0 ;--------------------------------------------------MOVLW D'15' MULWF VAR_R9,0 MOVF PRODL,0,0 MOVWF VM_R9,0 ;--------------------------------------------------MOVLW D'30' MULWF VAR_R10,0 MOVF PRODL,0,0 MOVW F VM_R10_0,0 MOVF PRODH,0,0 MOVWF VM_R10_1,0 ;----------------------------------------------------MOVLW D'60' MULWF VAR_R11,0 MOVF PRODL,0,0 MOVWF VM_R11_0,0 M OVF PRODH,0,0 MOVWF VM_R11_1,0 ;-----------------------------------------------------MOVLW D'85' MULWF VAR_R12,0 MOVF PRODL,0,0 MOVWF VM_R12_0,0 MOVF PRODH,0,0 MOVWF VM_R12_1,0 ;---------------------------------------------------MOVLW D'15 ' MULWF VAR_R13,0 MOVF PRODL,0,0 MOVWF VM_R13,0 ;--------------------------------------------------MOVLW D'30' MULWF VAR_R14,0 MOVF PRODL,0,0 MOVWF VM_R14_0,0 MOVF PRODH,0,0 MOVWF VM_R14_1,0 ;----------------------------------------------------MOVLW D'60' MULWF VAR_R15,0 MOVF PRODL,0,0 MOVWF VM_R15_0,0 MOVF PRODH,0,0 MOVWF VM_R15_1,0 ;------------------------------------------------------MOVLW D '85' MULWF VAR_R16,0 MOVF PRODL,0,0 MOVWF VM_R16_0,0 MOVF PRODH,0,0 MOVWF VM_R16 _1,0 ;GUARDAMOS EL VALOR ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICA R ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL V ALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPL ICAMOS POR LA REGLA ;GUARDAMOS EL VALOR ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPL ICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS E L VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUAR DAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICA R ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR ;MOVEMOS EL VALOR A MULTIPLICA R ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO ;MOVEMOS EL VALOR A MULTIPLICAR ;MULTIPLICAMOS POR LA REGLA ;GUARDAMOS EL VALOR BAJO ;GUARDAMOS EL VALOR ALTO

;-----------------------------------------------------------; SUMATORIA ;----------------------------------------------------------SUMATORIA_BAJA ;PRIMERO SUMA MOS LA PARTE BAJA CLRF SUMA0,0 CLRF SUMA1,0 S1_B MOVF VM_R1,0,0 ADDWF SUMA0,1,0 ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HU BO ACARREO BRA R2_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1 ,1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R2_B MOVF VM_R2_0,0,0 ADDWF SUMA0,1,0 ; SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUB O ACARREO BRA R3_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1, 1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R3_B MOVF VM_R3_0,0,0 ADDWF SUMA0,1,0 ;S UMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACARREO BRA R4_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1 ,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R4_B MOVF VM_R4_0,0,0 ADDWF SUMA0,1,0 ;SU MAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACARREO BRA R5_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1, 0 ;A LA VARIABLE ALTA DE LA SUMATORIA R5_B MOVF VM_R5,0,0 ADDWF SUMA0,1,0 ;SUMAM OS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACA RREO BRA R6_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ; A LA VARIABLE ALTA DE LA SUMATORIA R6_B MOVF VM_R6_0,0,0 ADDWF SUMA0,1,0 ;SUMAMO S EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACAR REO BRA R7_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R7_B MOVF VM_R7_0,0,0 ADDWF SUMA0,1,0 ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACARR EO BRA R8_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R8_B MOVF VM_R8_0,0,0 ADDWF SUMA0,1,0 ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACARRE O BRA R9_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A L A VARIABLE ALTA DE LA SUMATORIA R9_B MOVF VM_R9,0,0 ADDWF SUMA0,1,0 ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACARREO B RA R10_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R10_B MOVF VM_R10_0,0,0 ADDWF SUMA0,1,0 ;SUMAMOS E L RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACARREO BRA R11_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A L A VARIABLE ALTA DE LA SUMATORIA R11_B MOVF VM_R11_0,0,0 ADDWF SUMA0,1,0 ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACARR EO BRA R12_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R12_B MOVF VM_R12_0,0,0 ADDWF SUMA0,1,0 ;SUMAM OS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACA RREO BRA R13_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R13_B MOVF VM_R13,0,0 ADDWF SUMA0,1,0 ;SUMAM OS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO ACA RREO BRA R14_B ;SEGUIMOS SUMANDO MOVLW D'1' ;SUMAMOS EL ACARREO ADDWF SUMA1,1,0 ;A LA VARIABLE ALTA DE LA SUMATORIA R14_B MOVF VM_R14_0,0,0 ADDWF SUMA0,1,0 ;SUM AMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA BTFSS STATUS,C ;CHECAMOS SI HUBO A CARREO

BRA MOVLW ADDWF R15_B MOVF ADDWF BTFSS BRA MOVLW ADDWF R16_B MOVF ADDWF BTFSS BR A MOVLW ADDWF SUMATORIA_ALTA MOVF ADDWF MOVF ADDWF MOVF ADDWF MOVF ADDWF MOVF AD DWF MOVF ADDWF MOVF ADDWF MOVF ADDWF MOVF ADDWF MOVF ADDWF MOVF ADDWF MOVF ADDWF R15_B D'1' SUMA1,1,0 VM_R15_0,0,0 SUMA0,1,0 STATUS,C R16_B D'1' SUMA1,1,0 VM_R16 _0,0,0 SUMA0,1,0 STATUS,C SUMATORIA_ALTA D'1' SUMA1,1,0 VM_R2_1,0,0 SUMA1,1,0 VM _R3_1,0,0 SUMA1,1,0 VM_R4_1,0,0 SUMA1,1,0 VM_R6_1,0,0 SUMA1,1,0 VM_R7_1,0,0 SUMA 1,1,0 VM_R8_1,0,0 SUMA1,1,0 VM_R10_1,0,0 SUMA1,1,0 VM_R11_1,0,0 SUMA1,1,0 VM_R12 _1,0,0 SUMA1,1,0 VM_R14_1,0,0 SUMA1,1,0 VM_R15_1,0,0 SUMA1,1,0 VM_R16_1,0,0 SUMA 1,1,0 ;SEGUIMOS SUMANDO ;SUMAMOS EL ACARREO ;A LA VARIABLE ALTA DE LA SUMATORIA ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA ;CHECAMOS SI HUBO ACARREO ;SEG UIMOS SUMANDO ;SUMAMOS EL ACARREO ;A LA VARIABLE ALTA DE LA SUMATORIA ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE BAJA ;CHECAMOS SI HUBO ACARREO ;SEG UIMOS SUMANDO ;SUMAMOS EL ACARREO ;A LA VARIABLE ALTA DE LA SUMATORIA ;SUMAMOS E L RESULTADO DE LA REGLA A LA PARTE ALTA ;LO GUARDAMOS ;SUMAMOS EL RESULTADO DE L A REGLA A LA PARTE ALTA ;LO GUARDAMOS ;SUMAMOS EL RESULTADO DE LA REGLA A LA PAR TE ALTA ;LO GUARDAMOS ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE ALTA ;LO GUAR DAMOS ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE ALTA ;LO GUARDAMOS ;SUMAMOS E L RESULTADO DE LA REGLA A LA PARTE ALTA ;LO GUARDAMOS ;SUMAMOS EL RESULTADO DE L A REGLA A LA PARTE ALTA ;LO GUARDAMOS ;SUMAMOS EL RESULTADO DE LA REGLA A LA PAR TE ALTA ;LO GUARDAMOS ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE ALTA ;LO GUAR DAMOS ;SUMAMOS EL RESULTADO DE LA REGLA A LA PARTE ALTA ;LO GUARDAMOS ;SUMAMOS E L RESULTADO DE LA REGLA A LA PARTE ALTA ;LO GUARDAMOS ;SUMAMOS EL RESULTADO DE L A REGLA A LA PARTE ALTA ;LO GUARDAMOS ;--------------------------------------------; DIVISION ;-------------------------------------------MOVF SUMA0,0,0 ;MOVEMOS EL VALOR DE LA SUMA BAJA MOVWF DIVI DENDO_0,0 ;A LA VARIABLE DIVIDENDO_0 MOVF SUMA1,0,0 ;MOVEMOS EL VALOR DE LA SUMA ALTA MOVWF DIVIDENDO_1,0 ;A LA VARIABLE DIVIDENDO_1 MOVF DEN,0,0 ;MOVEMOS EL VA LOR DEL DENOMINADOR MOVWF DIVISOR,0 ;A LA VARIABLE DIVISOR DIVISION ;SUBRUTINA D E DIVISION CLRF RESIDUO CLRF FTCOUNT BSF FTCOUNT,4 DIVLOOP RLCF DIVIDENDO_0 RLCF DIVIDENDO_1 RLCF RESIDUO MOVF DIVISOR,W BTFSS STATUS,C GOTO NO_CARRY SUBWF RESI DUO BSF STATUS,C GOTO NO_SUB NO_CARRY SUBWF RESIDUO,W BTFSC STATUS,C MOVWF RESID UO NO_SUB DECFSZ FTCOUNT GOTO DIVLOOP RLCF DIVIDENDO_0 RLCF DIVIDENDO_1 MOVF DIV IDENDO_0,W MOVWF COCIENTE,0 MOVWF VAR,0 MOVWF VAR_VELOCIDAD,0 ;VALOR FINAL DE LA DEFUSIFICACION GOTO INICIO ;AQUI TERMINA EL PROGRAMA--------------------------------------------------------------;-----------------------------------------------------------------------------; TABLAS DE VALORES PARA LOS CONJUNTOS DE DIS TANCIA ;-----------------------------------------------------------------------------ORG 0X800 VAL_TABLA_MUL MOVLW D'8' MOVWF PCLATH,0 RLNCF VAR_VELOCIDAD,0,0 ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W ADDWF PCL,1,0 R ETLW D'10' RETLW D'10' RETLW D'9' RETLW D'9' RETLW D'9' RETLW D'8' RETLW D'8' RE TLW D'8' RETLW D'7' RETLW D'7' RETLW D'7' RETLW D'6'

RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RE TLW RETLW RETLW RETLW RETLW RETLW RETURN VAL_TABLA_LE MOVLW MOVWF RLNCF ADDWF RE TLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETL W RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RE TLW VAL_TABLA_R MOVLW MOVWF RLNCF ADDWF RETLW RETLW RETLW RETLW RETLW RETLW RETL W RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW D'6' D'6' D'5' D'5' D'5' D'4' D'4' D'4' D'3' D'3' D'3' D'2' D'2' D'2' D'1' D'1' D'1' D'0' D'0' D'8' PCLATH,0 VAR,0,0 PCL,1,0 D'0' D'1' D'1' D'2' D'2' D'3' D'3' D'4' D'4' D'5' D'5' D'6' D'6' D'7' D'7' D'8' D'8' D'9' D'9' D'10' D'10' D'10' D'9' D'9' D'8' D' 8' D'7' D'7' D'6' D'6' D'5' D'5' D'4' D'4' D'3' D'3' D'2' D'2' D'1' D'1' D'0' D' 8' PCLATH,0 VAR,0,0 PCL,1,0 D'0' D'1' D'1' D'2' D'2' D'3' D'3' D'4' D'4' D'5' D' 5' D'6' D'6' D'7' D'7' D'8' D'8' D'9' D'9' D'10' D'10' D'10' D'9' D'9' D'8' D'8' D'7' D'7' D'6' D'6' ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W

RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW D'5' D'5' D'4' D'4' D'3' D'3' D'2' D'2' D'1' D'1' D'0' ORG 0X900 VAL_TABLA_MR MOVLW D'9' MOVWF PCLATH,0 RLNCF VAR,0,0 ;ROTAMOS EL VALOR A LA IZQUIERDA SIN ACARREO Y LO GUARDAMOS EN W ADDWF PCL,1,0 RETLW D'0' RETLW D '0' RETLW D'1' RETLW D'1' RETLW D'1' RETLW D'2' RETLW D'2' RETLW D'2' RETLW D'3' RETLW D'3' RETLW D'3' RETLW D'4' RETLW D'4' RETLW D'4' RETLW D'5' RETLW D'5' RE TLW D'5' RETLW D'6' RETLW D'6' RETLW D'6' RETLW D'7' RETLW D'7' RETLW D'7' RETLW D'8' RETLW D'8' RETLW D'8' RETLW D'9' RETLW D'9' RETLW D'9' RETLW D'10' RETLW D '10' RETURN END ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------Referencias Redes Neuronales y Sistemas Difusos, Bonifacio Martn del Bro/Alfredo Sanz Molina [ 1]. Apuntes de la materia de inteligencia artificial primavera 2009 [1]. http:// api.ning.com/files/AAa5x8q9czwfH4dZtE29d1qaLJgng8WpIEEfhAesnJuwGl0yn0WFwzu4RuA6K YPT1vBJhvRZdR3FLKFXSWPSr0BWm2u4cc7/Sensor_Ultrasonido.pdf [2].http://es.wikipedi a.org/wiki/Modulacin_por_ancho_de_pulsos [3]. http://es.wikipedia.org/wiki/Microc ontrolador [4]. www.microchip.com [5]. http://es.wikipedia.org/wiki/Lenguaje_ens amblador

Você também pode gostar