TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado 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
-
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
-
Ahi te va una subrutina a 16bits a ver si te sirve.
Javicho.
-
juas, que fácil era. Gracias
un par de RRF a cada byte y listo :mrgreen:
-
Gracias Javi, esa me sirve por si quiero dividir por NO multiplos de 2
-
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:
-
Hola.
Meto la cucharada aca ... no es lo mismo dividir que hacer divisiones sucesivas?
-
sera restas sucesivas, y si se puede implementar un algoritmo para dividir usando restas sucesivas.
Saludos
-
eso, restas sucesivas .... estaba en mi cabeza lo de la division.
-
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:
-
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 !
-
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.
-
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