Autor Tema: división sencilla  (Leído 3683 veces)

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

Desconectado carlyvalente

  • PIC16
  • ***
  • Mensajes: 108
división sencilla
« en: 24 de Noviembre de 2005, 07:59:00 »
Como divido una variable en 2 y la guardo en otra variable? Es facil pero no lo logro.

movlw .66
movwf variable1

movlw variable1 / 2
movwf variable2

O como se hace?
Se me quemaron los papeles...Sonrisa Gigante

Desconectado PAOLA09

  • Moderador Local
  • PIC18
  • *****
  • Mensajes: 332
RE: división sencilla
« Respuesta #1 en: 24 de Noviembre de 2005, 08:24:00 »
HOLA PUES CUANDO QUIERO DIVIDIR NORMALMENTE HAGO RESTAS SUCESIVA ES DECIR EN UNA VARIABLE TIENES EL DATOEL CUAL QUIERES DIVIDIR Y EN OTRA EL 2 O EL DIVISOR SEGUN SEA EL CASO. EMPIEZAS A RESTAR Y VAS CONTANDO CUANTAS VECES PUEDES HACERLO HASTA QUE TU VARIABLES SEA MENOR QUE EL DIVISOR, EL VALOR QUE NUEVO EN LA VARIABLE CORRESPONDE AL RESIDUO Y EL VALOR DEL CONTADOR ES EL RESULTADO DE LA DIVISION.

CUALQUIER COSA AVISAME, POR SI NO ME ENTENDISTE.

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: división sencilla
« Respuesta #2 en: 24 de Noviembre de 2005, 08:28:00 »
No entiendo bien tu pregunta, quieres dividir un valor entre 2 (p.e. 66/2=33) te refieres a eso o a dividir una variable entre otra variable??

En todo caso para dividir un numero entre 2 es facil, solo jay que hacer un corrimiento a la derecha y listo:

rrf variable1, w  ; lo divide entre 2

Si lo quieres dividir entre multiplos de 2 es asi de sencillo, pero dividirlo entre otros numero hay que hacer un pequeño algoritmo basado en restas para lograr la division.

No se si es lo que necesitas, pero tienes que explicar mejor tu problema...
Nos vemos
Sonrisa Gigante
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado carlyvalente

  • PIC16
  • ***
  • Mensajes: 108
RE: división sencilla
« Respuesta #3 en: 24 de Noviembre de 2005, 08:41:00 »
Exactamente. Es solamente dividir un número entero en 2. Pero es que lo hacía :

movlw variableA /2
movwf variableB

y con el MPLAB me daba cualquier resultado, bueno.... es más... siempre me daba 0x10 cuando debía darme 0x21 (33 en decimal)

Así que rotándolo 1 vez a la derecha obtengo la división en 2?
Joya, bien sencillo.

Chas gracias Giño

Desconectado cchhaa

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 294
    • ¡¡peligro!!
RE: división sencilla
« Respuesta #4 en: 24 de Noviembre de 2005, 09:22:00 »
y rotando uno a la izquierda se multiplica por 2, es curioso esto de los numeros binarios jejeje

un saludo
cchhaa
Reiniciando......

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: división sencilla
« Respuesta #5 en: 24 de Noviembre de 2005, 11:13:00 »
Un poco para aclararte, en Asembler no hay un comando de division (a menos que lo tenga implementado en harware) tambien depende mucho de que micro sea, pues un 16F84 solo tiene para sumar y restar, en cambio un 18F2550 tiene para multplicar tambien, por ello no puede hacer:

movlw variableA /2 ; aca no te va a reconocer el /2 mas bien confundes a la maq
                               ; y te va a botar cualquier cosa
movwf variableB

lo mejor seria hacer lo siguiente:

rrf variableA,w   ; rota a la derecha la variableA
movwf variableB ; lo guarda en la variableB

Por ejemplo: si variableA=10001111 (143) despues de la division (rotarlo a la derecha) acaba asi variableB=01000111 (71) como te podras dar cuenta no dara el cociente entero de la division entre 2.

Por otro lado el movlw carga valores constantes o literales no carga variables como variableA, para cargar variables esta el movf.

Bueno, espero haberte aclarado mas las cosas. Un abrazoRebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado carlyvalente

  • PIC16
  • ***
  • Mensajes: 108
RE: división sencilla
« Respuesta #6 en: 25 de Noviembre de 2005, 00:18:00 »
Sólo veo un error:

rrf variableA,w ; rota a la derecha la variableA
movwf variableB ; lo guarda en la variableB


Si lo rotamos en w veces sería 0 veces. Lo he probado y no rota.
en cambio:

rrf variableA,1 ; rota a la derecha la variableA
movf variableA, w
movwf variableB ; lo guarda en la variableB

así si. Es correcto?

EDITO para agregar una cosita: hacer bcf STATUS,C si se van a realizar operaciones aritméticas sucesivas con el rrf , ya que sino se arma un bolonqui que no veas Sonrisa

Desconectado cchhaa

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 294
    • ¡¡peligro!!
RE: división sencilla
« Respuesta #7 en: 25 de Noviembre de 2005, 02:18:00 »
Escrito originalmente por carlyvalente
Sólo veo un error:

rrf variableA,w ; rota a la derecha la variableA
movwf variableB ; lo guarda en la variableB


Si lo rotamos en w veces sería 0 veces. Lo he probado y no rota.
en cambio:

rrf variableA,1 ; rota a la derecha la variableA
movf variableA, w
movwf variableB ; lo guarda en la variableB

así si. Es correcto?


vamos a ver, segun creo....

w=0 y f=1 por lo que despues de rrf variableA, X << aqui si pones w es igual que si pones un 0 y si pones una f es igual que si pones 1
la unica diferencia es que si pones una w o un 0 el resultado de rotar se guardara en el resgistro w
y si pones una f o un 1 se guardara en el mismo registro que estas rotando, por lo que veo raro que no te funcione el premier codigo, lo has simulado para ver que cambios tienen los registros afectados?

solo se me ocurre que pongas la W en mayusculas a ver

un saludo
cchhaa
Reiniciando......

Desconectado carlyvalente

  • PIC16
  • ***
  • Mensajes: 108
RE: división sencilla
« Respuesta #8 en: 25 de Noviembre de 2005, 03:31:00 »
En mayúsculas ha cambiado la cosa. Así sí rula.

Desconectado fzurita

  • PIC10
  • *
  • Mensajes: 33
Re: RE: división sencilla
« Respuesta #9 en: 12 de Marzo de 2008, 18:58:54 »
HOLA PUES CUANDO QUIERO DIVIDIR NORMALMENTE HAGO RESTAS SUCESIVA ES DECIR EN UNA VARIABLE TIENES EL DATOEL CUAL QUIERES DIVIDIR Y EN OTRA EL 2 O EL DIVISOR SEGUN SEA EL CASO. EMPIEZAS A RESTAR Y VAS CONTANDO CUANTAS VECES PUEDES HACERLO HASTA QUE TU VARIABLES SEA MENOR QUE EL DIVISOR, EL VALOR QUE NUEVO EN LA VARIABLE CORRESPONDE AL RESIDUO Y EL VALOR DEL CONTADOR ES EL RESULTADO DE LA DIVISION.

CUALQUIER COSA AVISAME, POR SI NO ME ENTENDISTE.

Hola Paola...pero como puedo saber que mi variable es menor que el divisor? Que comando usas? (pensando en el  set de instrucciones del PIC 16F628A por ejemplo)