Autor Tema: Elevar un numero a x potencia - pic 16f877a  (Leído 12176 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado red_alejo42

  • PIC10
  • *
  • Mensajes: 1
Elevar un numero a x potencia - pic 16f877a
« en: 24 de Septiembre de 2009, 13:28:36 »
Hola señores, soy nuevo en este tema de programación de micro-controladores, tengo que hacer un programa que multiplique o divida o eleve a la potencia dos números de acuerdo a unas condiciones iniciales.

El problema es con el elevar un x número a una x potencia, he intentado hacerlo con multiplicaciones sucesivas, es decri muchas sumas decisivas, pero no me funciona en todos los casos; la potencia en el programa siempre se hara si los dos números son iguales y son distintos a cero, cuando los numeros son 1 y 2, me da bien pero en números mayores como 3 y 4 no, así que por favor les pido que me oriente un poco en este apartado, tal vez estoy fallando en el número de veces que se debe multiplicar, es decir el conteo del exponente.

Esta es la parte del programa que me efectúa la potencia

POTENCIA   CLRF   CONTADOR
         INCF   EXPONENTE, 1
         MOVF   NUM1, 0
         SUBWF   EXPONENTE, 0
         BTFSC   STATUS, Z
         GOTO   OK
         GOTO   POT_2
         

OK         MOVF   NUM2, 0
         MOVWF   PORTC
         GOTO   LECTURA

POT_2      INCF   CONTADOR, 1
         MOVF   NUM1, 0
         SUBWF   CONTADOR, 0
         BTFSC   STATUS, Z
         GOTO   POTENCIA
         MOVF   NUM1, 0
         ADDWF   NUM2, 1
         GOTO   POT_2

Exponente y contador están previamente definidos como 0x00


 

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Elevar un numero a x potencia - pic 16f877a
« Respuesta #1 en: 24 de Septiembre de 2009, 23:10:17 »
Bueno, yo de ASM no se mucho y lo poco que sabia ya se me olvido, pero ... si el numero crece, no te va a alcanzar en un registro de 8 bits y si crece mas pues tocaría en uno de unos 16 bits o 32 bits. Si estas contemplando esos desbordes?

Saludos
El papel lo aguanta todo

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Elevar un numero a x potencia - pic 16f877a
« Respuesta #2 en: 24 de Septiembre de 2009, 23:26:09 »
no esta demas que revises este hilo
saludos
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado isfan

  • PIC16
  • ***
  • Mensajes: 145
Re: Elevar un numero a x potencia - pic 16f877a
« Respuesta #3 en: 01 de Octubre de 2009, 18:28:37 »
Hola aqui te mando el programa que hice en un ratillo, lo he probado y me funciona bien espero que te sirva
otra cosa como sabes los registros son de 8 bits y solo puede contar de 0  a 255 (0 - FF)   
es decir no puedes elevar max 7 porque 8 ya se te pone en 256 y pondria el registro RESU a 00

Si quieres subir por ejemplo a 9 o algo mas tendria que poner un señalizador en RESU por ejemplo y cada vez que diera 0 ir incrementando en un registro contador
y multiplicando eso tendria el valor pero a ser un valor expotencian, no creo que tenga muchos recursos con las cifras tan elevadas que necesitas.


Puede depurar este programa con menos líneas de código, y  podria poner una especie de señalizador


        ; programa para elevar un numero por si mismo
   ; version puramente beta

      LIST P = 16F877            ;indica tipo de micro
      INCLUDE "P16F877.INC"      ; librerias incluidas
      
      NUMERO1   EQU      0X20      ; Numero a elevar
      TMP_1   EQU      0X21      ; Registro para operaciones temporal 1
      TMP_2   EQU      0X22      ; Registo para operaciones temporal 2
      RESU   EQU      0X23      ; Resultado de la operacion final

      ORG      0x00
      goto   inicio            ;vector de interrupcion
      ORG      0X05

inicio
      movlw   0x07
      movwf   NUMERO1            ;Aqui va el numero que vamos a elevar el 7 por ejemplo
      movwf   TMP_1            ;copiamos el Numero al registro TMP_1
      movwf   TMP_2            ;copiamos el numero al registro TMP_2

recarga   
      movwf   TMP_1
      
bucle

      incf   RESU            ;incrementamos en 1 el registro RESU
      decf   TMP_1            ; y decrementamos en 1 el registro TMP_1
      btfss   STATUS,Z         ; registro TMP = 0 ?
      goto   bucle            ; si no es igual a 0 nos metemos en el bucle
      decf   TMP_2            ; es 0 ahora decrementamos TMP_2 y preguntamos si TMP_2 = 0
      btfss   STATUS,Z   
      goto   recarga            ;si no es igual a 0 nos vamos a la rutina de recarga y recargaremos en registro TMR_1
      
      END
      

Desconectado dnilo3a

  • PIC10
  • *
  • Mensajes: 3
Re: Elevar un numero a x potencia - pic 16f877a
« Respuesta #4 en: 12 de Octubre de 2009, 15:32:47 »
hola , segun la prueba de escritorio no me da la potenciacion , el resultado me da una multiplicacion  , lo simule en proteus y sip es una multiplicacion .

Alquien me puede colaborar con el codigo de una potenciacion

Gracias