# realizar una division con el pic



## ruuuuben (Ene 29, 2007)

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


----------



## IRA_Snake (Ene 29, 2007)

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.


----------



## ruuuuben (Ene 29, 2007)

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

¿a alguien se le ocurre algo?


gracias


----------



## zidaemon (Ene 29, 2007)

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


----------



## ruuuuben (Ene 30, 2007)

ehm?

no entendi nada

gracias de todas formas


----------



## JEA (Ene 30, 2007)

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.


----------



## Perromuerto (Ene 31, 2007)

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.


----------



## Edu_RA (Ene 31, 2007)

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

http://www.piclist.com/techref/microchip/math/div/index.htm

Edu


----------



## aerodesliza (Abr 17, 2007)

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


----------

