Autor Tema: duda addlw  (Leído 6232 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dumvo

  • PIC10
  • *
  • Mensajes: 29
duda addlw
« en: 27 de Junio de 2004, 10:16:00 »
hola tengo una duda porque addlw 0xff sustrae 1 de w ?

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: duda addlw
« Respuesta #1 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.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: duda addlw
« Respuesta #2 en: 27 de Junio de 2004, 18:19:00 »
Excelente explicación... adrian
Ya no puedo explicar nada...

Desconectado dumvo

  • PIC10
  • *
  • Mensajes: 29
RE: duda addlw
« Respuesta #3 en: 28 de Junio de 2004, 12:21:00 »
pues muchas gracias , porque por mas vueltas que le daba no encontraba el porque

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: duda addlw
« Respuesta #4 en: 28 de Junio de 2004, 14:02:00 »
Qe utilidad practica tiene esta operacion???...sabiendo que existe decf  o sublw

Gracias

Desconectado dumvo

  • PIC10
  • *
  • Mensajes: 29
RE: duda addlw
« Respuesta #5 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.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: duda addlw
« Respuesta #6 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

Desconectado YF-21

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 185
RE: duda addlw
« Respuesta #7 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 ?? ...

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: duda addlw
« Respuesta #8 en: 29 de Junio de 2004, 02:26:00 »
YF-21, no entiendo que quieres decir o preguntar.

Adrian.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: duda addlw
« Respuesta #9 en: 30 de Junio de 2004, 12:43:00 »
Al parecer Adrián, YF-21 sólo te está mandando un cumplido.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: duda addlw
« Respuesta #10 en: 30 de Junio de 2004, 13:52:00 »
Parece un cumplido, pero acojona!!!

Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: duda addlw
« Respuesta #11 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

Desconectado dumvo

  • PIC10
  • *
  • Mensajes: 29
RE: duda addlw
« Respuesta #12 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
.

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: duda addlw
« Respuesta #13 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...


Desconectado lovando

  • PIC16
  • ***
  • Mensajes: 193
RE: duda addlw
« Respuesta #14 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...


 

anything