TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micro_pepe en 13 de Marzo de 2008, 16:59:22
-
Hola, yo tengo la costumbre de hacer cosas de este tipo.
# 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.
-
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 :
#ifdef __pcb__
#define PORTA 0x05
#endif
#ifdef __pch__
#define PORTA 0xF80
#endif
-
Hola aunque no soy usuario de CCS, en C normalmente se hace asi
#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.
-
Richi:
Esta bien lo que pones, pero esta mal la direccion del puerto en la serie 18F...
Puedes confundir a alguien. :mrgreen:
-
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 !
-
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.
-
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.
-
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.
-
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 !
-
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
-
Si es correcto.
-
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