Está en la página 1de 7

LABORATORIO N1 : RAZ CUADRADA CON MICROCONTROLADOR

Universidad Distrital Francisco Jos de Caldas

1. Descripcin del problema :


Disear un \pro\grama que calcule al\guno de los catetos o la hi\potenusa de un trian\gulo rectn\gulo. Cuando se desee calcular la hi\potenusa se in\gresaran los catetos del trian\gulo rectn\gulo en las \posiciones de memoria de CAT1 y CAT2 ubicadas en la memoria RAM del microcontrolador, el valor \para cada caso ser un numero decimal entre 01 y 99 y en la \posicin de memoria HIP el numero 00, el resultado del clculo se almacenara en la \posicin de memoria HIPO, que tendr 3 d\gitos enteros y dos decimales. Cuando se desee calcular al\guno de los catetos del trian\gulo se in\gresara el valor de la hi\potenusa y del otro cateto en las \posiciones de memoria de CAT1 e HIP en la memoria RAM del microcontrolador el valor \para cada caso ser un numero decimal entre 01 y 99 y en la \posicin de memoria CAT2 el numero 00, el resultado del clculo se almacenara en la \posicin de memoria CATE, que tendr 2 d\gitos enteros y dos decimales.

2. Anlisis del problema :


Para realizar el \pro\grama que realice la solucin del \problema anterior mente \planteado es necesario inicialmente realizar un dia\grama de flujo en el que \podamos visualizar y nos d la idea del como \poder iniciar la solucin del \problema: Las subrutinas 'Hallar hi\potenusa' y 'Hallar cateto' bsicamente realizan las o\peraciones corres\pondientes con el teorema de Pit\goras : HIP = CAT1+CAT2 \para calcular el cuadrado de la variable que se quiere hallar y llamar la subrutina de calculo de la raz.

Inicialmente es necesario que el \pro\grama inicialice cada variable y escoja si tiene que hallar A continuacin se muestra las subrutinas: hallar la hi\potenusa o uno de los catetos,\para esto, se\gn hi\potenusa y hallar cateto. el \problema solo es necesario \probar cual de las variables es cero y de esta manera se sabr que se debe calcular.

Con el diagrama de flujo siguiente se muestra como se realiza la subrutina que va a resolver el problema de cmo sacarle la raz cuadrada a un numero. Este diagrama de flujo muestra el mtodo del algoritmo babilnico, el cuan consiste en iterar una variable N realizando la operacin: 1 X N ( +N ) 2 N donde X es la variable a la cual se le quiere hallar la raz, N puede ser inicializado en cualquier valor, y con la iteracin este se ira corrigiendo hasta aproximarse a la raz.

3. Diseo :
Implementacin del Cdigo Determinacin de lo que se va a calcular: Antes de determinar lo que se va a comparar (cateto o hipotenusa) es necesario declarar las variables que se utilizaran. Despus de haber inicializado la RAM se declaran las variables ya planteadas en el anlisis del problema y que sern utilizadas durante el programa:
CAT1 DS 1 CAT2 DS 2 HIPO DS 2 HIP DS 1 OP1 DS 2 OP2 DS 2 RES DS 2 CUADRADO DS 2 N DS 1 BB DS 1 RESIDUO DS 1

HALLARHIP: LDA LDX MUL STX STA LDA LDX MUL STX STA JSR MOV MOV JSR MOV MOV JMP HALLARCAT: LDA LDX MUL STX STA LDA LDX MUL STX STA JSR MOV MOV JSR MOV MOV JMP

CAT1 CAT1 OP1 OP1+1 CAT2+1 CAT2+1 OP2 OP2+1 SUMA RES,CUADRADO RES+1,CUADRADO+1 RAIZ RES,HIPO RES+1,HIPO+1 FINAL HIP HIP OP1 OP1+1 CAT1 CAT1 OP2 OP2+1 RESTA RES,CUADRADO RES+1,CUADRADO+1 RAIZ RES,CAT2 RES+1,CAT2+1 FINAL

El cdigo para determinar lo que se va a calcular deber si la variable HIP es cero, bifurcar a la rutina de calculo descrita, o probar la variable CAT2 y bifurcar a la rutina respectiva; adems es necesario inicializar HX y deshabilitar el modulo COP :
MAIN: BSET 0 , CONFIG1 CLRH CLRX TST HIP BEQ HALLARHIP TST CAT2+1 BEQ HALLARCAT JMP MAIN

Los cuadrados de cada numero se almacenan en los operadores OP1, OP2 para realizar la suma o la resta segn el caso y el resultado retornado por las subrutinas se almacena en la variable RES. Estas subrutinas se muestran a continuacin:
SUMA: LDA ADD STA LDA ADC STA RTS OP1+1 OP2+1 RES+1 OP1 OP2 RES

Calculo de hipotenusa o cateto:

En el cdigo anterior se muestra una bifurcacin a dos rutinas : una para calcular la hipotenusa (HALLARHIP), y otra para hallar el cateto RESTA: LDA OP1+1 SUB OP2+1 (HALLARCAT); ambas hacen las operaciones STA RES+1 descritas en lo diagramas de flujo y se realizan LDA OP1 como sigue: SBC OP2

STA RES RTS

STA N DBNZ OP1+1,RETURN1 BCS DECIMAL CLRH LDA RESIDUO LDX #100D MUL PSHX PULH LDX N DIV RORA STA RES+1 MOV N,RES RTS

Calculo de la raz cuadrada: El resultado en RES se asigna a la variable CUADRADO a el cual se le obtendr la raz con el algoritmo descrito en el anlisis. Mediante pruebas de escritorio, nos dimos cuenta que la divisin que se debe efectuar de CUADRADO entre la variable N, no tiene que ser efectuada con parte decimal de N, lo cual es mas complicado y no se puede efectuar con la FINALA: instruccin DIV del set de instrucciones, por eso al asignar la el resultado de la operacin (CUADRADO / N +N) / 2 a la variable N para la iteracin solo se toma de N la parte entera.

Para obtener la parte decimal final de la raz basta con tener el residuo de la ultima iteracin, multiplicarlo por 100, y dividir enteramente. La divisin entre 2 se hace desplazando hacia la derecha, lo cual puede generar un carry que debe ser tomado en cuenta dentro del residuo por lo que existen dos fragmentos de cdigo que hallan la parte decimal, pero uno de ellos suma #100D al resultado de la operacin (100*RESIDUO/BB El cdigo completo comentado se anexa. +BB) que es lo que corresponde al carry. Nota: La variable BB es una variable que almacena el ultimo valor de N para calcular la parte decimal; se agrego en la depuracin al darnos cuenta de que N se reasignaba para la siguiente iteracin que no se realiza y tenia que ser con el valor actual (el de la ultima iteracin), aquel con el que se calculara la parte decimal. El cdigo de la raz se muestra a continuacin:
RAIZ: MOV #100D,N MOV #8D,OP1+1 RETURN1: LDHX CUADRADO TXA LDX N DIV PSHH PULX STX RESIDUO CLRH ADD N MOV N,BB RORA

DECIMAL: CLRH LDA RESIDUO LDX #100D MUL PSHX PULH LDX BB DIV ADD #100D RORA JMP FINALA

4. Montaje y Depuracin :
Se simulo el programa implementado en la herramienta de simulacin de CodeWarrior probando diferentes valores de catetos e hipotenusa. Tomando inicialmente un CAT1 y CAT2 = 2 el resultado de la hipotenusa HIPO es 2.83 .

(2+2)=2.828427125

Con CAT1 = 95 y CAT2 = 57 se obtiene un valor de hipotenusa HIPO = 110.79

de simulacin ofrecida por el entorno de desarrollo.

6. Referencias :
[1].http://es.wikipedia.org/wiki/Clculo_de_la_ra z_cuadrada

(95+57)=110.788086002
HIP = 84 CAT1 = 56 se tiene que el otro cateto tiene un valor de 62.61

(84+56)=62.60990337
5. Conclusiones :
Se logro implementar con eficiencia un programa que hallara uno de los lados de un triangulo rectngulo (ya sea su hipotenusa o uno de los catetos ) con un porcentaje de error muy bajo ya que nicamente se desviaba razonablemente de la realidad en la ltima cifra decimal, esto es considerable ya que en lugar de realizar la raz de un numero se utilizo una aproximacin que inevitablemente tendr un pequeo error. Se utiliz funcionalmente el complejo set de instrucciones de microcontrolador MC68HC908AP16 permitindonos realizar operaciones matemticas complejas como una raz cuadrada. Adems se verifico su funcionamiento a travs de la herramienta

ANEXOS Programas utilizados:


Fresscale CodeWarrior V6.3. Oracle VM Virtualbox

Cdigo completo implementado: