TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: dumvo en 27 de Junio de 2004, 10:16:00

Título: duda addlw
Publicado por: dumvo en 27 de Junio de 2004, 10:16:00
hola tengo una duda porque addlw 0xff sustrae 1 de w ?
Título: RE: duda addlw
Publicado por: adrian2a1 en 27 de Junio de 2004, 11:07:00
La máxima cantidad que puede representar el registro W es en 8 bits igual a b"11111111", es decir 255 decimal.

Supongamos que (W) = 5 en decimal = b"00000101" binario.

y se ejecuta la instrucción addlw 0xFF, es decir le sumas 255, resulta que: 255 + 5 = 260 decimal,
en binario: b"11111111" + b"00000101" = b"100000100" representado en nueve bits, pero como el registro de trabajo sólo puede contener los ocho bits más bajos resulta:

(W) = b"00000100" = 4 en decimal.

¿Y el noveno bit?.  Va al bit de Carry que se pone a 1.

Así pues si a cualquier cantidad de 8 bits le suma 255 (addlw 0xff), resulta esta cantidad menos una unidad representada en 8 bits y el Carry se pone a 1 (que realmente es el noveno bit).

La demostración matemática podría ser:

255 + Cantidad = (256 - 1) + Cantidad = 256 + (Cantidad -1)
siendo el 256 decimal el valor posicional del noveno bit binario.

Espero haberte ayudado.

Adrian.
Título: RE: duda addlw
Publicado por: Abago en 27 de Junio de 2004, 18:19:00
Excelente explicación... adrian
Ya no puedo explicar nada...
Título: RE: duda addlw
Publicado por: dumvo en 28 de Junio de 2004, 12:21:00
pues muchas gracias , porque por mas vueltas que le daba no encontraba el porque
Título: RE: duda addlw
Publicado por: lovando en 28 de Junio de 2004, 14:02:00
Qe utilidad practica tiene esta operacion???...sabiendo que existe decf  o sublw

Gracias
Título: RE: duda addlw
Publicado por: dumvo en 28 de Junio de 2004, 14:30:00
no lo tengo claro , pero lo vi en un ejemplo de temporizador  y lo utilizaba para decrementar el contador en uno y me llamo la atención que con esa instrucción se suma un literal al registro w y lo que hace según la explicación de adrian2a1 es restar 1
p.d sublw 1 resta w de uno , no alreves.
Título: RE: duda addlw
Publicado por: Abago en 28 de Junio de 2004, 23:03:00
vamos a ver...
el addlw, suma al acumulador un literal....
pero el acumulador tiene 8 bits...
de 0 a 255
si el acumulador tiene 255, y le sumamos 1, el acumulador se pondría a 256, cosa que no puede hacer porque solo trabaja con 8 bits....
entonces, se pone a 0 y marca el flag de carry que como bien dice adrian, sería el bit 9
carry acumulador
 1      00000000     ->  256 decimal
Título: RE: duda addlw
Publicado por: YF-21 en 28 de Junio de 2004, 23:23:00
¿Quien dijo que no existian maestros de calidad en internet?
Caramba adrian ... te luciste en tu explicacion, ahora, supongamos que hacemos una suma de 16 bits, es lo mismo que una de 8 pero ... en algo varía verdad ?? ...
Título: RE: duda addlw
Publicado por: adrian2a1 en 29 de Junio de 2004, 02:26:00
YF-21, no entiendo que quieres decir o preguntar.

Adrian.
Título: RE: duda addlw
Publicado por: migsantiago en 30 de Junio de 2004, 12:43:00
Al parecer Adrián, YF-21 sólo te está mandando un cumplido.
Título: RE: duda addlw
Publicado por: Abago en 30 de Junio de 2004, 13:52:00
Parece un cumplido, pero acojona!!!
Título: RE: duda addlw
Publicado por: lovando en 03 de Julio de 2004, 17:31:00
Y dale con los mesmo.....

Esta bien...la explicacion esta espectacular....pero insisto......si a 255 lo decrementamos en 1, da 254 decimal....en binario los 8 bits del registro quedan en 0 y se activa el carry.....

Los mismo si se resta un literal al cualquier valor binario de 8 bit....a ver....255+255:510   => 1 + 11111110....(si el carry nos molesta habria que limpiarlo posteriormente) ...que es lo mismo que 255-1=254 ==> 11111110, pero sin carry activado....



seria bueno que compartieran el codigo donde esta instruccion addlw 0xFF se esta utilizando.....quiza me estoy envolando, y quiza si tenga utilidad practica.....


Un abrazo
Título: RE: duda addlw
Publicado por: dumvo en 04 de Julio de 2004, 03:35:00
perdonar por haber liado este envolado.
Es que estoi aprendiendo esto de programar pic y me baje un manual para empezar , en dicho manual hay un ejemplo de temporizador en el cual se utiliza addlw para restar uno y me llamo poderosamente la atención que addlw se use para sumar y en el ejemplo se use para restar uno y no lo entendía , por eso puse mi duda.
el ejemplo es este:
msec1     movlw  0xF9    ; carga f9 en el acumulador
               nop                  ; (2 por llamada a la subrutina call)
micro4     addlw   0xff    ; substrae 1 de w
               btfss status,z  ;salta cuando llega a cero
               goto micro 4   ; si no llega a cero vuelve a restar
               return
y eso es todo vuelvo a pedir disculpas
.
Título: RE: duda addlw
Publicado por: Abago en 04 de Julio de 2004, 09:20:00
No tienes que pedir disculpas....
Tu preguntas, y nosotros respondemos para ayudarte en lo que está en nuestras manos....
Los foros están para ayudarnos unos a otros, cuando nos bloqueamos, o cuando nuestros conocimientos, se quedan por debajo de nuestras necesidades...

Título: RE: duda addlw
Publicado por: lovando en 04 de Julio de 2004, 12:18:00
Escrito originalmente por dumvo
perdonar por haber liado este envolado.
Es que estoi aprendiendo esto de programar pic y me baje un manual para empezar , en dicho manual hay un ejemplo de temporizador en el cual se utiliza addlw para restar uno y me llamo poderosamente la atención que addlw se use para sumar y en el ejemplo se use para restar uno y no lo entendía , por eso puse mi duda.
el ejemplo es este:
msec1     movlw  0xF9    ; carga f9 en el acumulador
               nop                  ; (2 por llamada a la subrutina call)
micro4     addlw   0xff    ; substrae 1 de w
               btfss status,z  ;salta cuando llega a cero
               goto micro 4   ; si no llega a cero vuelve a restar
               return
y eso es todo vuelvo a pedir disculpas
.



Dumvo, si no hay probelma, al contrario, es excelente que hayas puesto esto aqui, pues nos ayuda a prender cada dia mas....

LO que pasa es que resulta interesante lo que has planteado, y por lo mismo todos nos hemos estado preguntadndo sobre la instruccion.....es mas. si tienens mas dudas no tienes mas que postearlas aca...de hecho todos hemos hecho alguna pregunta...la idea es saltar las vallas y mejorara nuestro entendimiento....comparto las palabras de nuestro buen amigo Abago...

Saludos...


NOTA:gracias por compartir el codigo...
Título: RE: duda addlw
Publicado por: dumvo en 04 de Julio de 2004, 14:55:00
bueno no pasa nada creí que empezaba a haber bronca con la utilidad o con si es correcta su utilización pues en otros foros e visto como por menos se liaba.

Título: RE: duda addlw
Publicado por: Abago en 04 de Julio de 2004, 19:08:00
es este foro nunca hay broncas... y si vemos indicios de que surja la posibilidad de tenerla,  rápidamente creamos un algoritmo antibroncas en asm, c, pbp... y en cuestión de segundos la manifestación se disuelve...