Registro de propósito general de 16 bits en asm

#1
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..
 
#2
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
 
#3
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
?????
 
#4
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?
 

Dano

Moderador
#5
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.
 
#6
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
 

Vick

Moderador
#7
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
 
Arriba