TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: bigluis en 14 de Mayo de 2010, 16:50:37

Título: Libreria para puertos CCS
Publicado por: bigluis en 14 de Mayo de 2010, 16:50:37
El siguiente código esta hecho para poder manipular los registros PORTX y TRISX en CCS sin necesidad de utilizar ninguna función extra como set_tris_x() o input().

Código: C
  1. /*****************************************************
  2.                                 Autor: Luis Alberto Vargas Tijerino.
  3.                                
  4.                                 Nickname: Bigluis.
  5.                                
  6.                                 Fecha: 17/06/10
  7.                                
  8. *****************************************************/
  9.  
  10. #nolist
  11.  
  12. //**********************Puertos***********************
  13. #byte PORTA =   getenv("SFR:PORTA")
  14. #byte PORTB =   getenv("SFR:PORTB")
  15. #byte PORTC =   getenv("SFR:PORTC")
  16. #byte PORTD =   getenv("SFR:PORTD")
  17. #byte PORTE =   getenv("SFR:PORTE")
  18. //**********************Pines*************************
  19. #bit RA0 = PORTA.0
  20. #bit RA1 = PORTA.1
  21. #bit RA2 = PORTA.2
  22. #bit RA3 = PORTA.3
  23. #bit RA4 = PORTA.4
  24. #bit RA5 = PORTA.5
  25. #bit RA6 = PORTA.6
  26. #bit RB0 = PORTB.0
  27. #bit RB1 = PORTB.1
  28. #bit RB2 = PORTB.2
  29. #bit RB3 = PORTB.3
  30. #bit RB4 = PORTB.4
  31. #bit RB5 = PORTB.5
  32. #bit RB6 = PORTB.6
  33. #bit RB7 = PORTB.7
  34. #bit RC0 = PORTC.0
  35. #bit RC1 = PORTC.1
  36. #bit RC2 = PORTC.2
  37. #bit RC3 = PORTC.3
  38. #bit RC4 = PORTC.4
  39. #bit RC5 = PORTC.5
  40. #bit RC6 = PORTC.6
  41. #bit RC7 = PORTC.7
  42. #bit RD0 = PORTD.0
  43. #bit RD1 = PORTD.1
  44. #bit RD2 = PORTD.2
  45. #bit RD3 = PORTD.3
  46. #bit RD4 = PORTD.4
  47. #bit RD5 = PORTD.5
  48. #bit RD6 = PORTD.6
  49. #bit RD7 = PORTD.7
  50. #bit RE0 = PORTE.0
  51. #bit RE1 = PORTE.1
  52. #bit RE2 = PORTE.2
  53. #bit RE3 = PORTE.3
  54. //*********************Triestados*******************
  55. #byte TRISA=   getenv("SFR:TRISA")
  56. #byte TRISB=   getenv("SFR:TRISB")
  57. #byte TRISC=   getenv("SFR:TRISC")
  58. #byte TRISD=   getenv("SFR:TRISD")
  59. #byte TRISE=   getenv("SFR:TRISE")
  60.  
  61. #list

He visto que ya muchos han hecho algo similar en el foro, pero quise realizar esta librería para que todos la podamos utilizar simplemente mandando a llamarla.
Título: Re: Libreria para puertos CCS
Publicado por: migsantiago en 14 de Mayo de 2010, 17:29:09
Una librería para usar los registros como en otros compiladores normalmente se hace.

Gracias por compartir Luis.
Título: Re: Libreria para puertos CCS
Publicado por: bigluis en 19 de Julio de 2010, 22:44:55
La libreria anterior tenía el error de que si el SFR no existía entonces no era útil para el pic que estemos utilizando. Es decir la libreria anterior solo funciona para PIC que contengan todos los puertos. Es decir, si quisiera usar un PIC12 que solo tiene 1 puerto no era posible ya que este tiene un puerto de nombre distinto y no tiene los demas puertos, algo similar ocurre si deseabamos usarla con un pic que solo tiene 2 puertos.

A continuación muestro la solución a este problema.
Código: C++
  1. /*****************************************************
  2.         Autor: Luis Alberto Vargas Tijerino.
  3.                                
  4.         Nickname: Bigluis.
  5.                                
  6.         Fecha: 1/06/10
  7.                                
  8.         Version: 2.0
  9.                                
  10. *****************************************************/
  11.  
  12. #nolist
  13.  
  14. //**********************Puertos***********************
  15. #ifdef getenv("SFR:GPIO")
  16.         #byte GPIO =   getenv("SFR:GPIO")
  17.                 #bit    GP0 = GPIO.0
  18.                 #bit    GP1 = GPIO.1
  19.                 #bit    GP2 = GPIO.2
  20.                 #bit    GP3 = GPIO.3
  21.                 #bit    GP4 = GPIO.4
  22.                 #bit    GP5 = GPIO.5
  23.         #byte TRISIO =   getenv("SFR:TRISIO")
  24. #endif
  25.  
  26. #ifdef getenv("SFR:PORTA")
  27.         #byte PORTA=   getenv("SFR:PORTA")
  28.                 #bit RA0 = PORTA.0
  29.                 #bit RA1 = PORTA.1
  30.                 #bit RA2 = PORTA.2
  31.                 #bit RA3 = PORTA.3
  32.                 #bit RA4 = PORTA.4
  33.                 #bit RA5 = PORTA.5
  34.                 #bit RA6 = PORTA.6
  35.                 #bit RA7 = PORTA.7
  36.         #byte TRISA=   getenv("SFR:TRISA")
  37. #endif
  38.  
  39. #ifdef getenv("SFR:PORTB")
  40.         #byte PORTB=   getenv("SFR:PORTB")
  41.                 #bit RB0 = PORTB.0
  42.                 #bit RB1 = PORTB.1
  43.                 #bit RB2 = PORTB.2
  44.                 #bit RB3 = PORTB.3
  45.                 #bit RB4 = PORTB.4
  46.                 #bit RB5 = PORTB.5
  47.                 #bit RB6 = PORTB.6
  48.                 #bit RB7 = PORTB.7
  49.         #byte TRISB=   getenv("SFR:TRISB")
  50. #endif
  51.  
  52. #ifdef getenv("SFR:PORTC")
  53.         #byte PORTC=   getenv("SFR:PORTC")
  54.                 #bit RC0 = PORTC.0
  55.                 #bit RC1 = PORTC.1
  56.                 #bit RC2 = PORTC.2
  57.                 #bit RC3 = PORTC.3
  58.                 #bit RC4 = PORTC.4
  59.                 #bit RC5 = PORTC.5
  60.                 #bit RC6 = PORTC.6
  61.                 #bit RC7 = PORTC.7
  62.         #byte TRISC=   getenv("SFR:TRISC")
  63. #endif
  64.  
  65. #ifdef getenv("SFR:PORTD")
  66.         #byte PORTD=   getenv("SFR:PORTD")
  67.                 #bit RD0 = PORTD.0
  68.                 #bit RD1 = PORTD.1
  69.                 #bit RD2 = PORTD.2
  70.                 #bit RD3 = PORTD.3
  71.                 #bit RD4 = PORTD.4
  72.                 #bit RD5 = PORTD.5
  73.                 #bit RD6 = PORTD.6
  74.                 #bit RD7 = PORTD.7
  75.         #byte TRISD=   getenv("SFR:TRISD")
  76. #endif
  77.  
  78. #ifdef getenv("SFR:PORTB")
  79.         #byte PORTE=   getenv("SFR:PORTE")
  80.                 #bit RE0 = PORTE.0
  81.                 #bit RE1 = PORTE.1
  82.                 #bit RE2 = PORTE.2
  83.                 #bit RE3 = PORTE.3
  84.                 #bit RE4 = PORTE.4
  85.                 #bit RE5 = PORTE.5
  86.                 #bit RE6 = PORTE.6
  87.                 #bit RE7 = PORTE.7
  88.         #byte TRISE=   getenv("SFR:TRISE")
  89. #endif
  90.  
  91. #list
Título: Re: Libreria para puertos CCS
Publicado por: bigluis en 19 de Julio de 2010, 22:53:20
a continuacion adjunto el archivo de la libreria
Título: Re: Libreria para puertos CCS
Publicado por: bigluis en 15 de Octubre de 2010, 17:55:51
A continuacion muestro un ejemplo de como utilizar la libreria Puertos.c

Código: C
  1. #include <16F628A.h>
  2. #fuses NOWDT,INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
  3. #use delay(clock=4M)
  4.  
  5. #include <Puertos.c>
  6.  
  7. void main(){  
  8.         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  9.         setup_timer_1(T1_DISABLED);
  10.         setup_timer_2(T2_DISABLED,0,1);
  11.         setup_comparator(NC_NC_NC_NC);
  12.         setup_vref(FALSE);
  13.         TRISA=0xFF;
  14.         TRISB=0xF0;
  15.         while(true){
  16.                 if(RA0){                        //Si presionas el boton conectado a RA0
  17.                         delay_ms(10);   //ESPERO SUELTA
  18.                         RB0=1;                  //RB0 sera igual a 1
  19.                 }
  20.                 else{                           //De lo contrario
  21.                         delay_ms(10);   //ESPERO SUELTA
  22.                         RB0=0;                  //RB0 sera igual a 0
  23.                 }
  24.         }
  25. }
Título: Re: Libreria para puertos CCS
Publicado por: MLO__ en 15 de Octubre de 2010, 19:31:38
Muy buena  :-/

Gracias por compartirla
Título: Re: Libreria para puertos CCS
Publicado por: soymoe en 16 de Octubre de 2010, 11:03:54
perdon por mi ignorancia pero donde tengo que colocar el archivo para poder incluirlo en los proyectos?
Título: Re: Libreria para puertos CCS
Publicado por: Cryn en 16 de Octubre de 2010, 13:14:55
muy buen aporte! muchas gracias bigluis :-/
Título: Re: Libreria para puertos CCS
Publicado por: bigluis en 16 de Octubre de 2010, 14:25:03
perdon por mi ignorancia pero donde tengo que colocar el archivo para poder incluirlo en los proyectos?

Todas las librerias se almacenan en la carpeta de Drivers de CCS, esta esta en la direccion C:\Program Files (x86)\PICC\Drivers.

La otra opcion es que la almacenes en la misma carpeta de tu proyecto, pero tendrias que copiarla para cada proyecto, lo cual no es recomendable.
Título: Re: Libreria para puertos CCS
Publicado por: Corleone en 22 de Octubre de 2010, 11:23:06
Estimado BigLuis,
Por sobre todo, muchas gracias por compartir esta libreria ya que resulta muy util. Hechos los agradecimientos, la consulta. Al intentar usarla, el compilador muestra> Error 43 "C:\Program Files\PICC\drivers\Puertos.c" Line 15(14,15): Expecting a declaration"

La llamada en el programa principal

#include <16F628A.h>         //pic a utilizar         
#fuses INTRC_IO,WDT,NOPROTECT,NOMCLR,BROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_IO(B)
#include <Puertos.c>   

El archivo esta copiado en la carpeta Drivers de PICC. Alguna idea del porque de este error?
Desde ya muchas Gracias!
Título: Re: Libreria para puertos CCS
Publicado por: AngelGris en 22 de Octubre de 2010, 14:05:14
Estimado BigLuis,
Por sobre todo, muchas gracias por compartir esta libreria ya que resulta muy util. Hechos los agradecimientos, la consulta. Al intentar usarla, el compilador muestra> Error 43 "C:\Program Files\PICC\drivers\Puertos.c" Line 15(14,15): Expecting a declaration"

La llamada en el programa principal

#include <16F628A.h>         //pic a utilizar         
#fuses INTRC_IO,WDT,NOPROTECT,NOMCLR,BROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_IO(B)
#include <Puertos.c>   

El archivo esta copiado en la carpeta Drivers de PICC. Alguna idea del porque de este error?
Desde ya muchas Gracias!

  Hola, proba escribiendo. Ademas, si no estoy equivocado, tenés que respetar mayúsculas y minúsculas al llamar a algún archivo.

Código: C
  1. #include "Puertos.c"
Título: Re: Libreria para puertos CCS
Publicado por: bigluis en 22 de Octubre de 2010, 16:35:43
Estimado BigLuis,
Por sobre todo, muchas gracias por compartir esta libreria ya que resulta muy util. Hechos los agradecimientos, la consulta. Al intentar usarla, el compilador muestra> Error 43 "C:\Program Files\PICC\drivers\Puertos.c" Line 15(14,15): Expecting a declaration"

La llamada en el programa principal

#include <16F628A.h>         //pic a utilizar         
#fuses INTRC_IO,WDT,NOPROTECT,NOMCLR,BROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_IO(B)
#include <Puertos.c>   

El archivo esta copiado en la carpeta Drivers de PICC. Alguna idea del porque de este error?
Desde ya muchas Gracias!

:oops: Hace poco encontré un pequeño error en la Librería.

En la línea 78 aparece lo siguiente:
Código: [Seleccionar]
#ifdef getenv("SFR:PORTB")
Y debes cambiarlo por
Código: [Seleccionar]
#ifdef getenv("SFR:PORTE")
Es decir, cometí el error de escribir 2 veces la misma pregunta, la primera vez es para el PORTB esa está correcta, la segunda vez se supone que debería preguntar por el PORTE y cometí el error de preguntarpor el PORTB.

 :-/ Suerte.
Título: Re: Libreria para puertos CCS
Publicado por: mauro_z18 en 04 de Noviembre de 2010, 13:06:40
Estimado BigLuis,
Por sobre todo, muchas gracias por compartir esta libreria ya que resulta muy util. Hechos los agradecimientos, la consulta. Al intentar usarla, el compilador muestra> Error 43 "C:\Program Files\PICC\drivers\Puertos.c" Line 15(14,15): Expecting a declaration"

La llamada en el programa principal

#include <16F628A.h>         //pic a utilizar         
#fuses INTRC_IO,WDT,NOPROTECT,NOMCLR,BROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use fast_IO(B)
#include <Puertos.c>   

El archivo esta copiado en la carpeta Drivers de PICC. Alguna idea del porque de este error?
Desde ya muchas Gracias!

:oops: Hace poco encontré un pequeño error en la Librería.

En la línea 78 aparece lo siguiente:
Código: [Seleccionar]
#ifdef getenv("SFR:PORTB")
Y debes cambiarlo por
Código: [Seleccionar]
#ifdef getenv("SFR:PORTE")
Es decir, cometí el error de escribir 2 veces la misma pregunta, la primera vez es para el PORTB esa está correcta, la segunda vez se supone que debería preguntar por el PORTE y cometí el error de preguntarpor el PORTB.

 :-/ Suerte.

Hola...muchas gracias por compartir esta libreria...sin embargo la acabo de descargar y no logro que compile. Te comento que presente el error que Corleone escribio antes.
Intente cambiando los corchetes por comillas y no funciono; tb  corregi lo del potb y el porte; pero ese no es el problema el error esta antes.
Te agradecia mucho si pudieras ayudarme.

Título: Re: Libreria para puertos CCS
Publicado por: bigluis en 04 de Noviembre de 2010, 14:27:05
Prueba con la siguiente libreria, y asegurate de no estar usando la primera libreria, ya que el error que me comentan se debe producir en la primera libreria que postee, pero no en la segunda.

Tambien prueba a quitar la instruccion
Código: [Seleccionar]
#use fast_IO(B)
Posiblemente este generando algun conflicto, aunque no lo creo.

 :? ¿Cuando le das doble clic a la línea de error en la consola de errores a donde te envia el compilador?

¿Te envia a la linea 15 de la libreria?
Título: Re: Libreria para puertos CCS
Publicado por: mauro_z18 en 04 de Noviembre de 2010, 17:48:01
Prueba con la siguiente libreria, y asegurate de no estar usando la primera libreria, ya que el error que me comentan se debe producir en la primera libreria que postee, pero no en la segunda.

Tambien prueba a quitar la instruccion
Código: [Seleccionar]
#use fast_IO(B)
Posiblemente este generando algun conflicto, aunque no lo creo.

 :? ¿Cuando le das doble clic a la línea de error en la consola de errores a donde te envia el compilador?

¿Te envia a la linea 15 de la libreria?

Si, es en la linea 15:15 el error,  y al compilar me tira "Expecting a declaration"...No entiendo por q sera.  :shock:

la linea es:
#ifdef getenv("SFR:GPIO").  Si puedes aydarme desde ya muchas gracias...sino seguire trabajando a ver si descubro q es.
Título: Re: Libreria para puertos CCS
Publicado por: bigluis en 04 de Noviembre de 2010, 19:35:28
:? ¿que version de ccs estas utilizando?

Lo otro que puedes hacer es probar poniendo como comentarios desde la linea 15 hasta la linea 24.