Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

29/01/2007 #1


realizar una division con el pic
hola quisiera saber como poder hacer una operacion tan basica como es la division en el pic con ensamblador mplab.

la division se que es restar muxas al dividendo el divisor asta qu llegue a cero.
por ejeplo 40/10 es 40-10=30 30-10=20 20-10=10 10-10=0
y el resultado son el nº de restas k hice.

pero¿no hay otra foerma mas sencilla de hacerlo? porq con este prodecimiento como hago ara cunado tenga que resta por ejemplo 49/10 qu sale decimal?

¿ALGUIEN PODRIA AYUDARME?


GRACIAS
29/01/2007 #2


A mi tambien me interesaria esto. He conseguido que divida mediante el status y con restas sucesivas pero solo me vale si pones una decena justa (10, 20, 30...) pero si pones por ejemplo, 54 (que al dividir entre 10 daria decimal) pues y no me funciona.

El programa es algo asi

INICIO
CLRW
CLRF PORCENT
MOVLW 0X36
MOVWF NUMERO
DIVIDE

INCF PORCENT,F
MOVLW 0x0A
SUBWF NUMERO,F
BTFSS STATUS,Z
GOTO DIVIDE

A lo mejro te ayuda en algo.
29/01/2007 #3


pues eso es lo que tenia yo pero em pasa el mismo problema para con los decimales.

¿a alguien se le ocurre algo?


gracias
29/01/2007 #4


A mi se me acurre esto, tu numero 54 multiplicalo por 10, dependiendo la exactitud que quieras ( implica utilizar varios registros para un solo numero, pero vale la pena).

Una vez que has multiplicado por esa cantidad, haces las restas sucesivas, y el resultado, lo conviertes a BCD, por ultimo la ultimas cifra es decimal, que ya guardaras en registros especificos.

Trabajo en otro modelo en el que un registro "enteros" contiene el numero real, y otro "decimales" que tiene valor de 1/2, 1/4,1/8,1/16,1/32,1/64,1/128,1/256 donde por ejemplo el 2.6 es igual a 0010 . 01111000
30/01/2007 #5


ehm?

no entendi nada

gracias de todas formas
30/01/2007 #6


a mi se me ocurre algo, cuando estas dividiendo, obtendras un resultado, cuando obtengas ese resultado siempre guardalo en una variabley testeala siempre que no de cero, en otro registro aumentas una(que va a ser la posicion de la coma, y multiplica por diez, y empieza de nuevo la resta, el nuevo resultado sera el siguiente numero. asi hata que el resultado de la resta sea 0.


Algo asi funciona.
31/01/2007 #7


Para un procesador que no tiene divisor por hardware el algoritmo lo consiguen en:
http://es.wikipedia.org/wiki/Sistema_binario
Se pasa en desplazar, comparar y restar. Es tedioso de implementar y lento.
Si necesitan velocidad , como es el caso de un lazo de control PI o PID,
y el procesador dispone de un multiplicador por hardware, pueden usar una tabla
de inversos. Usan el divisor como un índice en una tabla que contiene los valores
de los inversos y hacen el producto.
31/01/2007 #8


Aquí se encuentran una variedad de rutinas para dividir con PIC

http://www.piclist.com/techref/micro.../div/index.htm

Edu
17/04/2007 #9


Modifique su codigo con este no tendran ese problema aunque siempre botaran los decimales y no sera tan exacto.

INICIO
CLRW
CLRF porcent
CLRF numero
MOVLW 0X36
MOVWF numero
DIVIDE

MOVLW 0x0A
SUBWF numero,F
BTFSC STATUS,C
GOTO AUMENTA
GOTO SAL

AUMENTA
INCF porcent,F
goto DIVIDE

SAL

end
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.