Autor Tema: CCS: ¿Como tomar cada byte que compone un word?  (Leído 6030 veces)

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

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: CCS: ¿Como tomar cada byte que compone un word?
« Respuesta #15 en: 05 de Diciembre de 2009, 19:15:55 »
Alli esta la mascara del zorro no te preocupes por ello!!!   :D

Saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: CCS: ¿Como tomar cada byte que compone un word?
« Respuesta #16 en: 05 de Diciembre de 2009, 19:32:11 »
Pues la curiosidad me podía, así que he compilado los dos ejemplos. Júzgalo tú mismo:

Código: [Seleccionar]
....................    output_bit (PIN_C7 ,bit_test(byte_bajo, 7));
69A4:  MOVLB  1
69A6:  BTFSC  xE5.7
69A8:  BRA    69AE
69AA:  BCF    F8B.7
69AC:  BRA    69B0
69AE:  BSF    F8B.7
69B0:  BCF    F94.7
....................    output_bit (PIN_C6 ,bit_test(byte_bajo, 6));
69B2:  BTFSC  xE5.6
69B4:  BRA    69BA
69B6:  BCF    F8B.6
69B8:  BRA    69BC
69BA:  BSF    F8B.6
69BC:  BCF    F94.6
....................    output_bit (PIN_C5 ,bit_test(byte_bajo, 5));
69BE:  BTFSC  xE5.5
69C0:  BRA    69C6
69C2:  BCF    F8B.5
69C4:  BRA    69C8
69C6:  BSF    F8B.5
69C8:  BCF    F94.5
....................    output_bit (PIN_C4 ,bit_test(byte_bajo, 4));
69CA:  BTFSC  xE5.4
69CC:  BRA    69D2
69CE:  BCF    F8B.4
69D0:  BRA    69D4
69D2:  BSF    F8B.4
69D4:  BCF    F94.4

Código: [Seleccionar]
....................    PORTC = (PORTC & 0xF0) | (byte_bajo >> 4);
69D6:  MOVF   F82,W
69D8:  ANDLW  F0
69DA:  MOVWF  xE6
69DC:  SWAPF  xE5,W
69DE:  MOVWF  00
69E0:  MOVLW  0F
69E2:  ANDWF  00,F
69E4:  MOVF   00,W
69E6:  IORWF  xE6,W
69E8:  MOVWF  F82

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: CCS: ¿Como tomar cada byte que compone un word?
« Respuesta #17 en: 05 de Diciembre de 2009, 19:52:37 »
Wowwww!!!
Terrible diferencia.
Ya lo tengo funcionando con tu sistema....y anda de maravillas.  8)

Gracias!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: CCS: ¿Como tomar cada byte que compone un word?
« Respuesta #18 en: 07 de Diciembre de 2009, 08:24:30 »
Ademas es la mas segura!!
Imaginate que tienes una interrupcion por tiempo que utiliza el valor del resultado de una u otra operacion.
Como la interrupcion puede caer en cualquier momento, en el primer caso supongamos cae en el momento que estas haciendo el tercer output_bit.
La variable a usar estara actualizada a medias, es decir el bit 1 y 2 estaran actualizados y el bit 3 y 4 no.
Puede que no afecte pero si lo hace puede hacer un gran lio en tu programa, y dificil de encontrar el problema.

En el segundo caso puede ocurrir la interrupcion tambien en cualquier momento, pero solo puede encontrar el valor completo actualizado o no, pero no podra ofrecerte dudas en que paso !! :lol: :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: CCS: ¿Como tomar cada byte que compone un word?
« Respuesta #19 en: 07 de Diciembre de 2009, 08:41:04 »
Hola Marcos!  :mrgreen:

Si, es cierto lo que decis. No se si es ABSOLUTAMENTE segura, por que no se trata de "una sola instruccion", tal como dice Manolo, son un puñado:

Código: [Seleccionar]
....................    PORTC = (PORTC & 0xF0) | (byte_bajo >> 4);
69D6:  MOVF   F82,W
69D8:  ANDLW  F0
69DA:  MOVWF  xE6
69DC:  SWAPF  xE5,W
69DE:  MOVWF  00
69E0:  MOVLW  0F
69E2:  ANDWF  00,F
69E4:  MOVF   00,W
69E6:  IORWF  xE6,W
69E8:  MOVWF  F82

Podria caer al medio de todo eso y tambien causar problemas. Pero coincido con tu punto de vista: al ser menos cantidad, las posibilidades son menores. De todos modos, hasta ahora no estoy usando interrupciones en este proyecto, y no creo que me hagan falta.  :lol:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: CCS: ¿Como tomar cada byte que compone un word?
« Respuesta #20 en: 07 de Diciembre de 2009, 08:54:43 »
Pero aunque te caiga la interrupción por ahí en medio, no te encontrarás un dato incongruente en el puerto, porque todos los bits se escriben en un sólo paso.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: CCS: ¿Como tomar cada byte que compone un word?
« Respuesta #21 en: 07 de Diciembre de 2009, 09:09:52 »
Exactamente, fíjense que en el método de Manolo, el puerto se salva en la primera instrucción, si cayera una interrupción se guardaría en el salvado de contexto y nada cambiaría ;-)




Saludos.
No contesto mensajes privados, las consultas en el foro