TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micro_pepe en 13 de Marzo de 2008, 16:59:22

Título: Directivas del CCS
Publicado por: micro_pepe en 13 de Marzo de 2008, 16:59:22
Hola, yo tengo la costumbre de hacer cosas de este tipo.

Código: [Seleccionar]

# define PORTA 0x05

#bit lcd_en = PORTA.4


Pero si cambio por ejemplo de la familia 16f a la 18f, tengo que cambiar la direccion del puerto, pues son distintas. Me gustaria saber si existe alguna forma mejor de hacerlo.

Por otro lado me gustaria saber como hacer para poder compilar con un pic u otro, por ejemplo entre un pic12f509, y un pic12f629. Pues estos tienen diferentes fuses, y yo lo que hago es poner las dos configuraciones, y en funcion de usar uno u otro pongo una de ellas como comentario.

Saludos y gracias.
Título: Re: Directivas del CCS
Publicado por: RedPic en 13 de Marzo de 2008, 17:08:21
Una cosa que puedes hacer para saber que estas con 16F o con 18F es detectar el compilador que estas usando ya que son distintos para ambas familias.

Por ejemplo :

Código: C#
  1. #ifdef __pcb__
  2. #define PORTA 0x05
  3. #endif
  4.  
  5. #ifdef __pch__
  6. #define PORTA 0xF80
  7. #endif
Título: Re: Directivas del CCS
Publicado por: RICHI777 en 13 de Marzo de 2008, 17:10:32
Hola aunque no soy usuario de CCS, en C normalmente se hace asi
Código: [Seleccionar]
#define PIC16F
#undef PIC18F

#ifdef PIC16F
 #define PORTA 0x05
 #bit lcd_en = PORTA.4
#endif

#ifdef PIC18F
 # define PORTB 0x03
 #bit lcd_en = PORTB.7
#endif

Para seleccionar uno u otro solo undefinis uno y definis el otro, tambien lo podes extender a gusto.

Título: Re: Directivas del CCS
Publicado por: MGLSOFT en 13 de Marzo de 2008, 17:13:53
Richi:
Esta bien lo que pones, pero esta mal la direccion del puerto en la serie 18F...
Puedes confundir a alguien. :mrgreen:
Título: Re: Directivas del CCS
Publicado por: RICHI777 en 13 de Marzo de 2008, 17:22:58
Citar
Esta bien lo que pones, pero esta mal la direccion del puerto en la serie 18F...
Puedes confundir a alguien.
Mucha razon tenes, sorry ...

Igual cuando estaba escribiendo no lei la respuesta de RedPIC, y esa es la manera mas elegante y recomendable de hacerlo.
Saludos !
Título: Re: Directivas del CCS
Publicado por: RedPic en 13 de Marzo de 2008, 17:28:45
Independiente de esto te aconsejo Micro_Pepe que le des un vistazo a los ejemplos de CCS que tienes en directorio examples del PICC ya que la inmensa mayoría de ellos hacen uso de este tipo de directivas para que se puedan probar con distintos micros y/o familias de micros.
Título: Re: Directivas del CCS
Publicado por: jeremylf en 13 de Marzo de 2008, 19:15:22
No es mejor usar #BYTE que #DEFINE para cojer registros del pic?? Solo pregunto  :mrgreen: Porque #DEFINE yo lo uso para cosas que no tienen nada que ver con el pic, ocea, como configuraciones para cosas que segun yo quiero o algo asi.

Un saludo.
Título: Re: Directivas del CCS
Publicado por: Nocturno en 14 de Marzo de 2008, 03:01:47
Richi, la diferencia entre usar #ifdef PIC16F o #ifdef __pcb__ es que el segundo caso ya está implementado en el compilador, y tienes un desplegable donde eliges el tipo de micro que utilizas. En el primer caso tendrás que definirlo dentro del propio programa.

No es mejor usar #BYTE que #DEFINE para cojer registros del pic?? Solo pregunto  :mrgreen: Porque #DEFINE yo lo uso para cosas que no tienen nada que ver con el pic, ocea, como configuraciones para cosas que segun yo quiero o algo asi.

Un saludo.
Es lo mismo, Jeremy.
Título: Re: Directivas del CCS
Publicado por: RICHI777 en 14 de Marzo de 2008, 11:33:04
Richi, la diferencia entre usar #ifdef PIC16F o #ifdef __pcb__ es que el segundo caso ya está implementado en el compilador, y tienes un desplegable donde eliges el tipo de micro que utilizas. En el primer caso tendrás que definirlo dentro del propio programa.
Nocturno conozco la diferencia, como comente en mi post como desconzco CCS y todas sus defines predefinidos propuse esa solucion ANSI C, y cuando estaba escribiendo el post no habia leido el tuyo, si lo hubiese hecho no escribia nada porque lo que propones es la mejor solucion.
Saludos !
Título: Re:Directivas del CCS
Publicado por: micronet3 en 25 de Septiembre de 2018, 21:40:18
 ssaludos
seria correcto lo siguiente?   
#ifdef tarjeta1 
      set_tris_a(0);
      set_tris_b(3);
      set_tris_e(8);
      set_tris_d(159);
      Set_tris_c(188);
   #endif
   #ifdef tarjeta2 
      set_tris_a(7);
      set_tris_b(3);
      set_tris_e(8);
      set_tris_d(200);
      Set_tris_c(128);
   #endif
Título: Re:Directivas del CCS
Publicado por: KILLERJC en 25 de Septiembre de 2018, 22:05:20
Si es correcto.
Título: Re:Directivas del CCS
Publicado por: micronet3 en 26 de Septiembre de 2018, 10:31:16
que util resulta estas directivas de preprocesador  :-/ :-/, ahora tengo dos programas en uno solo y eso significa menos trabajo, debido a que ambos programas comparten muchas caracteristicas