Registro de propósito general de 16 bits en asm

Hola compañeros,,, como le hago en assembler para que un registro de propósito general me quede en 16bits normalmente son de 8 bits (0 - 255) excepto si utilizo el timer 1 del pic que utilizo 18f4431, en CCS se que tan solo colocarle long long + variable listo quedaria,, pero en assembler ? se me ocurria algo de que cuando llegara la variable que necesito a 255 activara una bandera para q no se me desborde y seguir con el conteo en otra variable y sumarla pero seguiria con la duda ese resultado de suma me quedaría guardado en otra variable de 8 bits,,,

Gracias por sus opiniones..
 
No entiendo muy bien la pregunta. Si querés utilizar un registro de 16 bit en un PIC que tiene sólo registros de 8 bits, usá 2 registros. Cuando el que tenes que usar como más bajo, llega a 255, lo igualas a 0 e incrementas el que usas como alto en 1
 
ok,, gracias era como lo pensaba asi como el timer 1 tiene dos registros el tmr1h y tmr1l,,, pero si deseo guardar ese resultado para sacarlo en display 7 segmentos, tendria q crar una rutina q me lea las centenas decenas y unidades verdad??? entonces tendria q leer la parte alta y baja,,, esoty en lo cierto
?????
 
Hola!
No, no es tan simple y ojo que hay más que centenas y más cuidado aún que el número está expresado en binario.

Qué tanto sabes de binario? porque si en el registro bajo tenes 200 y en el lato 100, el total es de 25800. (a modo de ejemplo particular).

No sé cómo podrías hacer para expresar un numero mayor a un byte en assembler para ponerlo en el display... si se me ocurre algo te aviso, vos tenés alguna idea?
 
ok,, gracias era como lo pensaba asi como el timer 1 tiene dos registros el tmr1h y tmr1l,,, pero si deseo guardar ese resultado para sacarlo en display 7 segmentos, tendria q crar una rutina q me lea las centenas decenas y unidades verdad??? entonces tendria q leer la parte alta y baja,,, esoty en lo cierto
?????

No, tienes que crear/usar una rutina que convierta el numero binario/hex en decimal, mas conocida como rutina BCD.

La gama 18f te ofrece una instrucción llamada daw, que acelera bastante el proceso,lee sobre la misma y busca algún ejemplo.
 
no tampoco,,,, solo quiero q si tengo en la entrada 300 pulsos por ejemplo ese valor lo pueda expresar en los display,, voy a seguir revizando e intentando,, cualquier ayuda gracias
 
De hecho es bastante simple, solo debes tener dos registros, cuentas los incrementos con el primero de ellos (byte bajo), cada vez que se desborde solo incrementas el segundo (byte alto) y así de simple tienes un numero binario de 16 bits almacenado en dos registros de 8 bits.

Luego conviertes esos 16 bits a BCD y los mandas al display, para eso te puede servir esta info:

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011000
 
Que tal amigos, me he dado la tarea de hacer un lenguaje ams, para la multiplicación de 8x 8, guardando en 2 localidades los dos resultados, tengo uno de 4x4 hecho, pero si me paso de una multiplicacion que de como resultado más de 255 (equivalente a sus 8 bits) el programa se me pone como loco, quiero ver que funciones puedo hacer para que si hay un sobrepaso del 255 ponerlo en otra localidad los demas numeros, por ejemplo 20x20= 400 que me ponga el 255 en uno y lo demás en el otro. ( usando pic16f84a)
 
Última edición:
En realidad la multiplicación es un 8 lo suma 8 veces.

8 x 8 = 64 no se puede hacer y menos con el PIC16F84A.

Sería 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 = 64.

 
Mejor lo rotas tres veces, ya que rotar es multiplicar por dos.
Si el microprocesador no tiene instrucción de multiplicar rotas hasta la potencia de dos inferior y el resto lo sumas.
 
Atrás
Arriba