TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: pibe en 02 de Marzo de 2009, 12:25:17

Título: División 16 bits/8 bits, cómo lo hago?
Publicado por: pibe en 02 de Marzo de 2009, 12:25:17
Dios, he mirado 100 ejemplos pero son tan liosos que parece mas bien una pizarra llena de fórmulas de la teoría de las cuerdas  :mrgreen:

Tán difícil es dividir por ejemplo 27 10 h / 04h = 09 C4 ? (10000 decimal/4 decimal= 2500decimal )
Todo lo que quiero es dividir 2 bytes por 4.

Alguien tiene algún link para una rutinita que no me ocupe 4 gigas de memoria del PIC?  :D
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: sander en 02 de Marzo de 2009, 13:48:12
Si solo quieres dividir entre 4 puedes usar desplazamientos hacia la derecha, ahora si quieres hacer divisiones entre cualquier numero podrias buscar en Microchip , ellos ya tienen rutinas listas.

Saludos
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: Javicho en 02 de Marzo de 2009, 14:25:34
Ahi te va una subrutina a 16bits a ver si te sirve.

Javicho.
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: pibe en 02 de Marzo de 2009, 14:38:29
juas, que fácil era. Gracias

un par de RRF a cada byte y listo  :mrgreen:
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: pibe en 02 de Marzo de 2009, 14:39:52
Gracias Javi, esa me sirve por si quiero dividir por NO multiplos de 2
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: migsantiago en 02 de Marzo de 2009, 14:51:30
juas, que fácil era. Gracias

un par de RRF a cada byte y listo  :mrgreen:

Si es un PIC16, las instrucciones RRF y RLF se hace a través del Carry de Status, hay que poner a cero el carry para lograr lo que necesitas.  :wink:
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: MLO__ en 02 de Marzo de 2009, 14:54:08
Hola.

Meto la cucharada aca ... no es lo mismo dividir que hacer divisiones sucesivas?
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: sander en 02 de Marzo de 2009, 17:01:26
sera restas sucesivas, y si se puede implementar un algoritmo para dividir usando restas sucesivas.

Saludos
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: MLO__ en 02 de Marzo de 2009, 17:08:32
eso, restas sucesivas .... estaba en mi cabeza lo de la division.
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: pibe en 02 de Marzo de 2009, 18:03:53
Fantástico.
He logrado tomar 4 valores analógicos, sumarlos y hacer una media de los 4 . ((a+b+c+d)/4)
Gracias chicas!   :-/ :mrgreen:


Ahora , me hago una pregunta: Qué pasa cuando sumamos dos bytes, por ejemplo FF+ FF? Eso daría un valor que excedería un byte, o sea que el resultado debería ponerse en 2 bytes. Y qué pasa cuando hacemos ?:

addwf variable (W trae un 0xff y la variable tiene otro 0xff)

Tenemos que tener siempre en cuenta que el resultado no exceda FF?
Ya sé que se activa el carry, pero digo.... cuando trabajamos con muchas variables y movemos datos de aqui para allá... es dificil que no se nos escape un simple "overflow".
A ver para cuando los PICs inteligentes!  :mrgreen:
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: RICHI777 en 02 de Marzo de 2009, 23:47:39
Hola Pibe, en todo programa sea cual sea el lenguaje las variables tienen un alcanze que depende de cosa queres almacenar en ella, ejemplo si queres contar segundos con un byte te alcanza ya que el alcance es de 0 a 59, ahora si queres contar los minutos en un dia ( 1440 ) un byte no alcanza entonces necesitas un word ( 2 bytes ), para ese caso si vas a operar con la suma, necesitas incrementar en uno el byte menos significativo ( big endian ) y despues verificar el carry, si este se produjo es necesario incrementar el segundo byte correspondiente al byte mas significativo, la resolucion de la variable es igual a 2 elevedo a la cantidad de bits.

byte = 256 ( 1 byte )
word = 65.535 ( 2 bytes )
24bits( no tiene nombre standart )  = 16.777.216 ( 3 bytes )
dword = 4.294.967.296 ( 4 bytes )

Con la resta es similar.

Saludos !
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: Leon Pic en 03 de Marzo de 2009, 12:34:16
Justamente, para ello está el bit C. Si este acusa desbordamiento, tienes que incrementar la segundo word.

Yo sufrí un gran problema con las rutinas de microchips para dividir. Hay dos programas para dividir. La más rápida funciona mal y la mas lenta funciona de maravilla, pero tarda una eternidad. Por ese motivo, me cree mi propia rutina de división que es por medio de la resta.

Si buscas en el tema Rutinas para compartir (http://www.todopic.com.ar/foros/index.php?topic=23812.0) las encontrarás alli.
Título: Re: División 16 bits/8 bits, cómo lo hago?
Publicado por: Chenao en 05 de Marzo de 2009, 20:16:35
Un saludo

Estoy de acuerdo hacer división rotando jamás lo he entendido si alguién me hace el favor se lo agradeceria por que la verdad lo único que hago es copiar y pegar las rutinas de microchip :D  :D :D.

Un saludo desde Pereira - Colombia