Autor Tema: Sobre INCF y DECF  (Leído 4363 veces)

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

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Sobre INCF y DECF
« en: 18 de Febrero de 2008, 23:04:47 »
Me he vuelto loco buscando un error en una rutina de un libro de microcontroladores y cuando reviso me doy cuenta de lo siguiente

   incf   MensajeL,F   ; Apunta a la posición del siguiente carácter
   btfss   STATUS,C   ;Si hay acarreo al incrementar MensajeL es por
   incf   PCLATH      ;haber cambiado de página por lo que hay que sumar 1 al PCLATH

ok la rutina desea que si por ejemplo MesajeL es FF y al incrementarla pasa a ser 00, osea que se desborda pues incremente
el PCLATH....

ok estupendo... pero es que el desborde de MesajeL mediante un incf o mediante un decf no afecta al carry ni al DC....

estoy en lo cierto verdad???
tendria que usar addwf o subwf para esto no?

1 saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sobre INCF y DECF
« Respuesta #1 en: 18 de Febrero de 2008, 23:10:42 »
Sip Jose Antonio. Efectivamente. las instrucciones incf y decf no afectan el flag C. Pareceria ser un error, aunque si el codigo es bueno, puede que haya usado incf y decf precisamente para no afectar el estado del flag C y poder conservar el resultado de una operacion anterior....

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Sobre INCF y DECF
« Respuesta #2 en: 18 de Febrero de 2008, 23:32:38 »
Buah... a ver si me ayudais...

como se restaria 1 a un registro y se comprueba que el registro no se has desbordado??

   movfw   MensajeAnteriorL
   sublw   0x01      ;Decrementamos una posición para buscar el 0x00 de la opción anterior
   movwf   MensajeAnteriorL
   btfsc   STATUS,C   ;Si menajeanteiorL es 00 decrementamos mensajeanteiorh

esto no funciona... he estado mirando en el datasheet y sublw sustrae el literal a w pero claro en complemento a 2... cómo seria el nº 1 en complemento a 2?

PD: Manda cojones la que hay que liar... :-(

1 saludo.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Sobre INCF y DECF
« Respuesta #3 en: 18 de Febrero de 2008, 23:40:25 »
Para hallar el complemento a dos de un numero puedes hacer esto:
movlw 0x01
sublw 0  , estos es 0 -(W) = -W  alli tienes el complemento a dos del numero sino mal recuerdo

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Sobre INCF y DECF
« Respuesta #4 en: 18 de Febrero de 2008, 23:43:07 »
otra cosita deberias hacer btfss stratus,z para chequear si el numero llego a cero  :mrgreen:

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sobre INCF y DECF
« Respuesta #5 en: 18 de Febrero de 2008, 23:45:05 »
Por ejemplo podrias:

movlw .1
subwf MensajeAnteriorL,F
btfss STATUS,C          ;si el resultado de la resta es mayor o igual a cero, C vale 1. Sino C vale 0.
goto  Desborda
;no desborda
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sobre INCF y DECF
« Respuesta #6 en: 18 de Febrero de 2008, 23:47:00 »
Comprobando mediante Z...

decf MensajeAnteriorL,F
movf MensajeAnteriorL,W
xorlw 0xFF
btfsc STATUS,Z
goto  Desborda
;no desborda
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sobre INCF y DECF
« Respuesta #7 en: 18 de Febrero de 2008, 23:48:01 »
Comprobando mediante Z alternativa 1:

decf MensajeAnteriorL,F
incf MensajeAnteriorL,W
btfsc STATUS,Z
goto  Desborda
;no desborda


Esa lleva una linea menos..Bueno, podria estar toda la  noche! Que te sirva Jose! ;)
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Sobre INCF y DECF
« Respuesta #8 en: 18 de Febrero de 2008, 23:50:26 »
gracias bruno estaba algo ofuscado... la verdad

finalmente me quedo con esta

   movlw   0x01
   subwf   MensajeAnteriorL,f

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Sobre INCF y DECF
« Respuesta #9 en: 18 de Febrero de 2008, 23:52:07 »
Una cosita a tener en cuenta cuando realizamos operaciones de resta si el resultado da >=0 el flag C = 1, si el resultado es negativo C = 0

Ojo con esto tambien

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Sobre INCF y DECF
« Respuesta #10 en: 19 de Febrero de 2008, 00:02:13 »
De nada Jose! Cuando quieras...

Una cosita a tener en cuenta cuando realizamos operaciones de resta si el resultado da >=0 el flag C = 1, si el resultado es negativo C = 0

Ojo con esto tambien

btfss STATUS,C          ;si el resultado de la resta es mayor o igual a cero, C vale 1. Sino C vale 0.

;)
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Sobre INCF y DECF
« Respuesta #11 en: 19 de Febrero de 2008, 00:04:30 »
Te diste cuenta  :mrgreen:

Desconectado bandus

  • PIC10
  • *
  • Mensajes: 10
Re: Sobre INCF y DECF
« Respuesta #12 en: 27 de Febrero de 2008, 22:43:39 »
 8) Perdon pero volviendo al tema INCF y DECF y el ejemplo:
   "incf   MensajeL,F   ; Apunta a la posición del siguiente carácter
    btfss   STATUS,C   ;Si hay acarreo al incrementar MensajeL es por
    incf   PCLATH      ;haber cambiado de página por lo que hay que sumar 1 al PCLATH"
el unico bit que cambia cuando se desborda "MensajeL" ejecutando INCF es el Z de STATUS al cual se deberia consultar para incrementar PCLATH. Un abrazo. Bandus.