Autor Tema: output_high  (Leído 2094 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado radioelf

  • PIC10
  • *
  • Mensajes: 42
    • Radioelf
output_high
« en: 20 de Septiembre de 2009, 11:29:32 »
Hola, tengo la duda de que diferencias hay entre las siguientes opciones del compilador CCS, si no estoy equivocado todas ellas poner el pint RB3 a 1, pero el código generado por el compilador es muy distinto.

#bit   LED       =    PORTB.3

        LED  =1;                     //opción 1

        output_high (LED);       //opción 2

       output_high (PIN_B3);   //opción 3

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: output_high
« Respuesta #1 en: 20 de Septiembre de 2009, 11:33:20 »
Hola.

Pues si las tres ponen a 1 el pin, la diferencia solo es de gestión de recursos para hacerlo no?

La función built-in output_high del CCS depende tambien, en su forma de trabajar, de la directiva #use *_IO. Habría que verificar las combinaciones a ver que sucede.

Saludos
El papel lo aguanta todo

Desconectado radioelf

  • PIC10
  • *
  • Mensajes: 42
    • Radioelf
Re: output_high
« Respuesta #2 en: 21 de Septiembre de 2009, 03:00:12 »
OK  gracias, si miro el código generado para cada una de ellas es el siguiente:

443:                       LED  =1;                     //opción 1
  0AFD    1586     BSF 0x6, 0x3
444:               
445:                       output_high (LED);       //opción 2
  0AFE    3000     MOVLW 0
  0AFF    1986     BTFSC 0x6, 0x3
  0B00    3001     MOVLW 0x1
  0B01    00B1     MOVWF 0x31
  0B02    00B2     MOVWF 0x32
  0B03    3001     MOVLW 0x1
  0B04    00B3     MOVWF 0x33
  0B05    01B5     CLRF 0x35
  0B06    01B4     CLRF 0x34
  0B07    118A     BCF 0xa, 0x3
  0B08    258F     CALL 0x58f
  0B09    158A     BSF 0xa, 0x3
  0B0A    0831     MOVF 0x31, W
  0B0B    00B2     MOVWF 0x32
  0B0C    01B3     CLRF 0x33
  0B0D    01B5     CLRF 0x35
  0B0E    3080     MOVLW 0x80
  0B0F    00B4     MOVWF 0x34
  0B10    118A     BCF 0xa, 0x3
  0B11    258F     CALL 0x58f
  0B12    158A     BSF 0xa, 0x3
446:   
447:                       output_high (PIN_B3);       //opción 3           
  0B13    1683     BSF 0x3, 0x5
  0B14    1186     BCF 0x6, 0x3
  0B15    1283     BCF 0x3, 0x5
  0B16    1586     BSF 0x6, 0x3


Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: output_high
« Respuesta #3 en: 21 de Septiembre de 2009, 11:44:10 »
Evidentemente la opción LED  =1 es la más simple y directa, pone el valor 1 en el registro correspondiente y listo...
La última opción output_high (PIN_B3);

 BSF 0x3, 0x5  (pasa al banco 1)
 BCF 0x6, 0x3  (pone a 0 el TRISB)
 BCF 0x3, 0x5  (pasa al banco 0)
 BSF 0x6, 0x3  (pone a 1 el PORTB)

En este caso estás trabajando en un modo tal que cada vez que escribes o lees un pin lo configuras como entrada o salida previamente y segun corresponda...  Creo que es el modo standard_io, pero si usas el modo fast_io para el puerto en cuestión sospecho que el código de ambas opciones será el mismo: BSF 0x6, 0x3  (pone a 1 el PORTB) en este caso!

La función built-in output_high del CCS depende tambien, en su forma de trabajar, de la directiva #use *_IO. Habría que verificar las combinaciones a ver que sucede.
100% deacuerdo

Sobre la segunda opción, no entiendo lo que hace... pero con todo ese código dudo que convenga usarlo... habría que saber bien que hace, estimo... pero muy de intuición, que hace un direccionamiento indirecto del puerto que tampoco sé en qué o cuáles condiciones puede llegar a ser útil o necesario...

Me parece que la mejor opción es la 3, ya que respeta la configuración de modo del puerto y la opción 1 se puede usar para alguna excepción, por ejemplo:
Quiero usar el puerto B normalmente como un bus bidireccional ==> usar standar_io pero en una rutina de interrupción voy a necesitar usar el puerto B para enviar muchos datos a un periferico, en esa subrutina, el puerto siempre es salida, por lo tanto configurar el tris es redundante y me genera un código 4 veces más extenso!!! entonces ahí usaría el modo 1...

Saludos y Feliz Primavera!!!
« Última modificación: 21 de Septiembre de 2009, 12:02:10 por Menta »
     

Desconectado radioelf

  • PIC10
  • *
  • Mensajes: 42
    • Radioelf
Re: output_high
« Respuesta #4 en: 21 de Septiembre de 2009, 18:34:36 »
Me fue de gran utilidad sus explicaciones. Gracias :-/