TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: soymoe en 15 de Octubre de 2010, 16:56:13

Título: Problema con programita en CCS
Publicado por: soymoe en 15 de Octubre de 2010, 16:56:13
Estoy haciendo mis primeras armas en CCS y estoy  tratando de prender y apagar un led conectado a RB0 al pulsar una tecla conectada a RA0, pero solo funciona la primera vez, se apaga pero no vuelve a encender. Este es el codigo.
Código: [Seleccionar]
#include <16F628A.h>
#use standard_io(b) 
#fuses NOWDT,INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#byte PORTA=0x05
void main()
{  set_tris_a(0xFF);
   set_tris_b(0xF0);
   output_bit(PIN_B0,0x01);
   while(true)
{  if(!bit_test(PORTA,0))
{  delay_ms(100);//ESPERO SUELTA
   if(bit_test(PORTA,0))
   output_bit(PIN_B0,!PIN_B0);}}
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   }
Espero me puedan decir porque.
Título: Re: Problema con programita en CCS
Publicado por: bigluis en 15 de Octubre de 2010, 17:48:33
Tu problema radica en el algoritmo, ya que preguntabas si RA0 es igual a cero y luego preguntas si es igual a 1, es decir el segundo if estaba adentro del primero por lo cual se debia cumplir que ambas condiciones ocurrieran, por eso solo lo hacia la primera vez.

prueba con esto

Código: [Seleccionar]
#include <16F628A.h>
#use standard_io(b) 
#fuses NOWDT,INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#byte PORTA=0x05
void main(){ 
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    set_tris_a(0xFF);
    set_tris_b(0xF0);
    output_bit(PIN_B0,0x01);
    while(true){
        if(bit_test(PORTA,0)){        //Si presionas el boton conectado a RA0
            delay_ms(10);            //ESPERO SUELTA
            output_bit(PIN_B0,1);    //RB0 sera igual a 1
        }
        else{                        //De lo contrario
            delay_ms(10);            //ESPERO SUELTA
            output_bit(PIN_B0,0);    //RB0 sera igual a 0
        }
    }
}

Por aqui (http://www.todopic.com.ar/foros/index.php?topic=30662.msg261568#msg261568) podras encontrar una libraria para utilizar los puertos de otra forma en CCS.
Título: Re: Problema con programita en CCS
Publicado por: soymoe en 16 de Octubre de 2010, 12:11:29
La idea es que al apretar el pulsador conectado a RA0 ,el led conectado a RB0 se apague si esta encendido o se encienda si esta apagado. osea cambie de estado y permanezca asi hasta que se vuelva a pulsar la tecla de RA0
Título: Re: Problema con programita en CCS
Publicado por: AngelGris en 16 de Octubre de 2010, 12:20:22
Hola Moe.   :)

Más allá de lo que necesites, fijate como te ordenó el programa BigLuis.
Por defecto los pines A0, A1, A2 y A3 corresponden a entradas analógicas.

En tu programa las configuras como digitales constantemente y dentro del "IF" pero hay que hacerlo como te mostró BigLuis. Primero configuras los periféricos (en tu caso los comparadores tenés que deshabilitarlos para poder usar las entradas digitales) y luego hacer las cosas que necesite tu programa.
Título: Re: Problema con programita en CCS
Publicado por: bmb en 16 de Octubre de 2010, 13:35:19
Hola soymoe, si entendí bien que lo que quieres es que si el LED está encendido se apague y si está apagado se encienda, entonces puedes intentar algo asi:
Código: [Seleccionar]
#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)

#byte PORTB=0x06

void main()
{
   int1 anterior =true;
  
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_tris_b(0xF0);

   // Asumiendo que el cátodo esté conectado al negativo y el ánodo al
   // pin B0 a través de una resistencia...
  
   output_low(PIN_B0); // LED apagado

   while(true)
   {
      // Asumiendo que la tecla en RA0 tiene una resistencia pullup....
      if( !input(PIN_A0))
      {
         if(anterior)
         {
            if (!bit_test(PORTB,0))    // Si el LED está apagado
               output_high(PIN_B0);    // Enciende el LED
            else
               output_low(PIN_B0);     // Si no, lo apaga
          
            anterior = false;
         }
      }
      else
         anterior = true;
   }
}

Son muy importantes las anotaciones sobre el orden en los programas que te hacen los colegas.  Asi tienes menos posibilidades de error.

Saludos!

Edito: olvidaba el set_tris del puerto b.
Título: Re: Problema con programita en CCS
Publicado por: bigluis en 16 de Octubre de 2010, 14:44:26
Otra forma de resolver ese problema es esperando hasta que la tecla sea presionada, para ello lo puedes hacer de dos formas, mediante una tecnia a la que llamamos polling, o mediante interrupciones.

La tecnica polling es similar a la que muestra bmb y sería de la siguiente manera.
Código: [Seleccionar]
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_tris_b(0xF0);

   // Asumiendo que el cátodo esté conectado al negativo y el ánodo al
   // pin B0 a través de una resistencia...
   
   output_low(PIN_B0); // LED apagado

   while(true)
   {
      // Asumiendo que la tecla en RA0 tiene una resistencia pullup....

      while( !input(PIN_A0));    //Esperar hasta que se presione RA0.

      if (!bit_test(PORTB,0))    // Si el LED está apagado
         output_high(PIN_B0);    // Enciende el LED
      else
         output_low(PIN_B0);     // Si no, lo apaga
   }
}
Título: Re: Problema con programita en CCS
Publicado por: bmb en 16 de Octubre de 2010, 15:22:53
Otra forma de resolver ese problema es esperando hasta que la tecla sea presionada, para ello lo puedes hacer de dos formas, mediante una tecnia a la que llamamos polling, o mediante interrupciones.

La tecnica polling es similar a la que muestra bmb y sería de la siguiente manera.
Código: [Seleccionar]
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_tris_b(0xF0);

   // Asumiendo que el cátodo esté conectado al negativo y el ánodo al
   // pin B0 a través de una resistencia...
   
   output_low(PIN_B0); // LED apagado

   while(true)
   {
      // Asumiendo que la tecla en RA0 tiene una resistencia pullup....

      while( !input(PIN_A0));    //Esperar hasta que se presione RA0.

      if (!bit_test(PORTB,0))    // Si el LED está apagado
         output_high(PIN_B0);    // Enciende el LED
      else
         output_low(PIN_B0);     // Si no, lo apaga
   }
}

Hola bigluis. Asi como dices, el LED va a estar encendiendo y apagando constantemente.  Aunque (me imagino que por olvido) no le pusiste los corchetes {} al segundo while y si cambiaras la instrucción while( !input(PIN_A0)); por while( input(PIN_A0));, de todos modos mientras el pulsador esté presionado va a cambiar constantemente el estado del LED.  De ahí que se use una bandera para evitar esto.

Saludos!
Título: Re: Problema con programita en CCS
Publicado por: soymoe en 16 de Octubre de 2010, 17:58:29
Otra forma de resolver ese problema es esperando hasta que la tecla sea presionada, para ello lo puedes hacer de dos formas, mediante una tecnia a la que llamamos polling, o mediante interrupciones.

La tecnica polling es similar a la que muestra bmb y sería de la siguiente manera.
Código: [Seleccionar]
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_tris_b(0xF0);

   // Asumiendo que el cátodo esté conectado al negativo y el ánodo al
   // pin B0 a través de una resistencia...
   
   output_low(PIN_B0); // LED apagado

   while(true)
   {
      // Asumiendo que la tecla en RA0 tiene una resistencia pullup....

      while( !input(PIN_A0));    //Esperar hasta que se presione RA0.

      if (!bit_test(PORTB,0))    // Si el LED está apagado
         output_high(PIN_B0);    // Enciende el LED
      else
         output_low(PIN_B0);     // Si no, lo apaga
   }
}
Este programa funciona, lo que pasa es que no elimina el rebote y a veces falla.Es por esa razon es que yo ponia un delay para eliminar el rebote.
Título: Re: Problema con programita en CCS
Publicado por: bmb en 16 de Octubre de 2010, 20:11:10
...Este programa funciona, lo que pasa es que no elimina el rebote y a veces falla.Es por esa razon es que yo ponia un delay para eliminar el rebote.

Hola soymoe. Me alcanzaste a preocupar, monté el circuito en Proteus y como había dicho en el post anterior, el LED prende y apaga constantemente.  Podrías subir tu esquemático para ver el por que a ti si te funciona?  Te adjunto una simulación en Proteus con los dos códigos fuentes y los compilados para que hagas las pruebas.

Saludos!
Título: Re: Problema con programita en CCS
Publicado por: bigluis en 16 de Octubre de 2010, 20:37:12
Este programa funciona, lo que pasa es que no elimina el rebote y a veces falla.Es por esa razon es que yo ponia un delay para eliminar el rebote.

Exactamente es necesario poner un deley luego del segundo while para eliminar rebotes.

Hola bigluis. Asi como dices, el LED va a estar encendiendo y apagando constantemente.  Aunque (me imagino que por olvido) no le pusiste los corchetes {} al segundo while y si cambiaras la instrucción while( !input(PIN_A0)); por while( input(PIN_A0));, de todos modos mientras el pulsador esté presionado va a cambiar constantemente el estado del LED.  De ahí que se use una bandera para evitar esto.

:lol: No olvide ponerle los corchetes al segund while, simplemente no los necesita ya que no tendrá ningun argumento.

Por otro lado para evitar eso de que cuando tienes presionado el boton este comienza a cambiar constantemente es necesario que pongas un while de espera para que sueltes el boton.
Código: [Seleccionar]
output_low(PIN_B0); // LED apagado

   while(true)
   {
      // Asumiendo que la tecla en RA0 tiene una resistencia pullup....

      while(input(PIN_A0));    //Esperar hasta que se presione RA0.
     
         if (!bit_test(PORTB,0))    // Si el LED está apagado
           output_high(PIN_B0);    // Enciende el LED
         else
            output_low(PIN_B0);     // Si no, lo apaga
     
      delay_ms(10); //Retardo para eliminar Rebotes.
      while(!input(PIN_A0));    //Esperar hasta que se suelte RA0.
     
   }
}
Título: Re: Problema con programita en CCS
Publicado por: AngelGris en 16 de Octubre de 2010, 21:39:06
Acá dejo una versión hecha en HiTech C.
Van a notar que también hago uso de "setup_comparator" y "disable_interrupt"; pero no son funciones que tenga HiTech sino unas definiciones que hice para, en su momento, hacerme más fácil la mudanza de CCS a HiTech

Código: C
  1. /*
  2.   El pin RA0 lleva una resistencia de pull up y el pulsador une a GND
  3.   El led se conecta con el cátodo a GND y el ánodo por medio de una resistencia RB0
  4. */
  5.  
  6.  
  7.  
  8. #include <pic.h>
  9.  
  10. __CONFIG (MCLRDIS & LVPDIS & WDTDIS);
  11.  
  12. #include "Def16f62xa.h"
  13. #define PIC_CLK 4000000
  14. #include "delayhd.h"
  15.  
  16. void AntiRebote(void)
  17. {
  18.   unsigned char veces;
  19.  
  20.   for (veces = 40; veces > 0; veces--)
  21.     DelayUs (250);
  22.  
  23. }
  24.  
  25.  
  26. void main(void)
  27. {
  28.   setup_comparator (NC_NC_NC_NC);    // deshabilito los comparadores
  29.   disable_interrupt (GLOBAL);        // deshabilito las interrupciones
  30.   TRISA = 1;                        // A0 como entrada
  31.   TRISB = 0;                        // todo el puerto B como salida
  32.   PORTB = 0;                        // Led apagado
  33.   while (1)
  34.   {
  35.     if (RA0 == 0)                    // Switch presionado?
  36.     {
  37.       AntiRebote();                    // espera anti rebote
  38.       if (RA0 == 0)                 // si aun sigue presionado
  39.       {  
  40.         RB0 ^= 1;                    // cambio el estado de RB0
  41.         while (RA0 == 0);            // espero hasta soltar el swtich
  42.       }
  43.     }
  44.   }
  45. }
Título: Re: Problema con programita en CCS
Publicado por: bmb en 16 de Octubre de 2010, 22:51:25
Hola bigluis, ahora con las correcciones que hiciste, el programa si funciona.  Sin embargo es bueno aclararle a soymoe, que el programa siempre se va a quedar detenido en alguno de los while alli implementados según sea accionado el pulsador en A0.  Con esto quiero decir que si el programa es solo para cambiar de estado el LED estaría muy bien, pero si se le van a adicionar otras funciones no le va a servir asi.

Saludos!
Título: Re: Problema con programita en CCS
Publicado por: soymoe en 17 de Octubre de 2010, 21:54:25
...Este programa funciona, lo que pasa es que no elimina el rebote y a veces falla.Es por esa razon es que yo ponia un delay para eliminar el rebote.

Hola soymoe. Me alcanzaste a preocupar, monté el circuito en Proteus y como había dicho en el post anterior, el LED prende y apaga constantemente.  Podrías subir tu esquemático para ver el por que a ti si te funciona?  Te adjunto una simulación en Proteus con los dos códigos fuentes y los compilados para que hagas las pruebas.

Saludos!
Yo no uso el proteus, lo armo en proto, este es el esquematico
Título: Re: Problema con programita en CCS
Publicado por: bmb en 18 de Octubre de 2010, 00:11:02
Hola soymoe, según se ve en tu esquemático, tienes mal conectados los pines.  Te adjunto un diagrama con las conexiones.

Saludos!
Título: Re: Problema con programita en CCS
Publicado por: soymoe en 19 de Octubre de 2010, 17:41:50
Hola amigos: He podido resolver el problemita de apagar y prender un led con una tecla.
Código: [Seleccionar]
#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES MCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)

#byte PORTB=0x06

void main()
{   
   int1 presiono =false;
   int1 solto =false;
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_tris_a(0x0F);
   set_tris_b(0xF0);

   // Asumiendo que el cátodo esté conectado al negativo y el ánodo al
   // pin B0 a través de una resistencia...
   
   output_low(PIN_B0); // LED apagado
   while(true)
   {presiono =false;
    solto =false;
   while(input(PIN_A0)&(!presiono));//Esperar hasta que se presione RA0.
   {delay_ms(100);}
   presiono=true;
   while(!input(PIN_A0));//Esperar hasta que se suelte RA0.
   {delay_ms(100);}
   solto=true;
   if (!bit_test(PORTB,0)&(presiono)&(solto))    // Si el LED está apagado
           output_high(PIN_B0);    // Enciende el LED
         else
            output_low(PIN_B0);     // Si no, lo apaga
   }}
Quizas no sea lo mas elegante pero funciona. Se los dejo para lo que les interese.
Título: Re: Problema con programita en CCS
Publicado por: bmb en 19 de Octubre de 2010, 19:08:18
Hola soymoe, una de las cosas interesantes al hacer programas es entenderlos, no simplemente ver prender y apagar un LED.  El problema es que si sigues adelante sin entender lo que está haciendo el programa en el microcontrolador, más adelante vas a tener problemas mayores y no vas a entender que es lo que pasa.  Te recomiendo leer lo que puse al final del post #11.  Lo que ocurre es que bigluis quiso mostrarte simplemente un método que es totalmente válido para algunas situaciones, pero que para lo simple de tu aplicación no es el más recomendable ya que si quisieras ampliar tu programa tendrías problemas, como en el caso de que quisieras colocar otro pulsador y otro LED que cumplieran independientemente las mismas funciones de los que tienes ahora.  Ensayaste el programa que te muestro en el post #4?  Es un forma muy simple de resolverlo: ensáyalo y sobretodo estudia la forma en que trabaja.

Saludos!
Título: Re: Problema con programita en CCS
Publicado por: soymoe en 19 de Octubre de 2010, 22:35:15
Si sin con su ayuda pude resolver el problema, lo que mas me interesa es aprender a programar asi que voy a revisar los programas que me pasaron.
Título: Re: Problema con programita en CCS
Publicado por: AngelGris en 19 de Octubre de 2010, 23:25:24
Yo creo que entre el último programa que te mostró BigLuis y el que puse yo (que es casi idéntico) fácilmente podrías llegar a entender y acomodar el programa.

Basícamente sería

ciclo while
{
  preguntar como está el pin A0 (if.....)
  {  
    esperar un tiempo como antirrebote (con 10ms está bien)
    volver a preguntar como está el pin A0 (if...) en este punto A0 debe estar igual que en la primer pregunta para asegurar que está presionado.
    {  
      actuar en consecuencia (si el led estaba apagado encenderlo y si estaba encendido apagarlo). Podés usar un IF para detectar eso o una XOR con "1" (que hace que el valor cambie de estado) como hice yo
      ciclo while hasta que A0 cambie de estado, lo que indicaría que se suelta la tecla
    }
  }
}
Título: Re: Problema con programita en CCS
Publicado por: bmb en 20 de Octubre de 2010, 10:11:39
Hola AngelGris, creo que tu programa difiere al de bigluis en algo bien importante y es en la forma de esperar a que se pulse el botón en A0. En tu programa tienes: if (RA0 == 0) que básicamente es de la misma forma en que yo lo tengo en el mio: if( !input(PIN_A0));.  Bigluis lo hace asi: while(input(PIN_A0)); en su código.  Como bien sabes, si el programa se encuentra un if(), simplemente revisa si su condición es verdadera o falsa; bien sea que encuentre que la condición es verdadera o falsa, cumple con las instrucciones asociadas y el programa sigue corriendo normalmente.  Mientras que si el programa se encuentra con una instrucción while(), se va a detener en ella y no va a ejecutar ninguna otra instrucción hasta que su condición sea verdadera y salga del ciclo while.  Mi punto es que si al programa se le adicionaran más intrucciones y más adelante tuviese que estar revisando por ejemplo, la condicón de otras entradas diferentes a A0, no lo podría hacer ya que el programa se detendría en el primer ciclo while() que encontrase.

Hasta aqui, está muy bien tu código incluso mejor ya que al mio le falta insertarle un atirrebotes. En el código de ejemplo que pongo en el post #4 utilizo una bandera para evitar que vuelva a entrar a la instrucción de revisión del estado de A0, en caso de dejar presionada la tecla.  Con esta bandera simplemente se pasa por alto la instrucción y el programa sigue corriendo normalmente en caso de que tuviese que cumplir con otras tareas.  Tanto en tu programa, como en el de bigluis, hacen esto con una instrucción while() mientras se suelta el botón con las consecuencias que ya mencioné. En este último caso se que podría tratarse tan solo de algunos 'milisegundos' mientras se suelta el pulsador, pero en una aplicación con muchas funciones y cierto grado de complejidad unos 'milisegundos' pueden llegar ser una 'eternidad' y hacer que el programa no funcione apropiadamente.

Saludos!
Título: Re: Problema con programita en CCS
Publicado por: AngelGris en 20 de Octubre de 2010, 12:07:47
Hola AngelGris, creo que tu programa difiere al de bigluis en algo bien importante y es en la forma de esperar a que se pulse el botón en A0. En tu programa tienes: if (RA0 == 0) que básicamente es de la misma forma en que yo lo tengo en el mio: if( !input(PIN_A0));.  Bigluis lo hace asi: while(input(PIN_A0)); en su código.  Como bien sabes, si el programa se encuentra un if(), simplemente revisa si su condición es verdadera o falsa; bien sea que encuentre que la condición es verdadera o falsa, cumple con las instrucciones asociadas y el programa sigue corriendo normalmente.  Mientras que si el programa se encuentra con una instrucción while(), se va a detener en ella y no va a ejecutar ninguna otra instrucción hasta que su condición sea verdadera y salga del ciclo while.  Mi punto es que si al programa se le adicionaran más intrucciones y más adelante tuviese que estar revisando por ejemplo, la condicón de otras entradas diferentes a A0, no lo podría hacer ya que el programa se detendría en el primer ciclo while() que encontrase.

Hasta aqui, está muy bien tu código incluso mejor ya que al mio le falta insertarle un atirrebotes. En el código de ejemplo que pongo en el post #4 utilizo una bandera para evitar que vuelva a entrar a la instrucción de revisión del estado de A0, en caso de dejar presionada la tecla.  Con esta bandera simplemente se pasa por alto la instrucción y el programa sigue corriendo normalmente en caso de que tuviese que cumplir con otras tareas.  Tanto en tu programa, como en el de bigluis, hacen esto con una instrucción while() mientras se suelta el botón con las consecuencias que ya mencioné. En este último caso se que podría tratarse tan solo de algunos 'milisegundos' mientras se suelta el pulsador, pero en una aplicación con muchas funciones y cierto grado de complejidad unos 'milisegundos' pueden llegar ser una 'eternidad' y hacer que el programa no funcione apropiadamente.

Saludos!

  Estoy de acuerdo.
  Yo simplemente mencioné mi ejemplo y el de BigLuis porque eran, quizá y sólo quizá, un poco más sencillos de entender para alguien que está comenzando. Digo que quizá es un poco más sencillos por el hecho de no estar unsando "flags (o banderas)" y que tal vez ello podría llevar a una interpretación equivocada. (suponiendo que alguien no entiende suficiente, tal vez crea que sí o sí tiene que hacer uso de los "Flags").

  Mas allá de esos detalles me parece fántastico el consejo que le has dado a soymoe respecto que lo interesante de hacer programas es entenderlos.

  Yo creo que para ello debería leer algún libro aunque sea básico de C aplicado a microcontroladores.

  En mi caso yo venía de hacer algunos programejos para PC en el viejo Pascal 7.0 y luego también algo de Delphi, nunca me había puesto con el C ya que me costaba bastante adaptarme a las distintas formas de expresar lo mismo (veía algunos ejemplos pero escritos distinto y me mareaba un poco). Después, por curiosidad, quise ver como era eso de programar en C los PIC (siempre lo había hecho en ASM) y me bajé un librito básico y también uno de ANNSI C y la verdad que me resulto de una gran ayuda.
  Si bien yo ya entendía bien la idea de una instrucción IF, o un ciclo While (que sería el equivalente al REPEAT de pascal) en los libros que bajé también explica la teoría de dichas estructuras y por ello es muy fácil de entender. Y si mal no recuerdo también detalla las distintas formas de expresar lo mismo. Un ejemplo típico seria A = A&1 (A = A and 1) que también lo puedo escribir A &= 1;
Título: Re: Problema con programita en CCS
Publicado por: bmb en 20 de Octubre de 2010, 15:07:39
Cuando comencé con el CCS, compré un libro que se llama:

PICmicro MCU C
An Introduction to Programming the Microchip PIC in CCS C
By Nigel Gardner.

Este es un libro donde explica muy detalladamente el uso de las instrucciones básicas del CCS y me ha servido muchísimo. Normalmente recomiendo este libro para los que quieren comenzar en CCS.  También me he acompañado constantemente del manual del CCS y logicamente de las hojas de datos de cada PIC.

Saludos!
Título: Re: Problema con programita en CCS
Publicado por: AngelGris en 20 de Octubre de 2010, 15:35:12
Cuando comencé con el CCS, compré un libro que se llama:

PICmicro MCU C
An Introduction to Programming the Microchip PIC in CCS C
By Nigel Gardner.


  Yo bajé un PDF con el título que tu indicas y también este otro

PICmicro MCU C
An Introduction to Programming the Microchip PIC in C
By Nigel Gardner.


  También este otro

Compilador C CCS y simulador PROTEUS para Microcontroladores PIC
Eduardo Garcia Breijo


  También este otro

Programming 8-bit PIC Microcontrollers in C
Martin P. Bates


  y también un PDF buscado como "Aprenda Lenguaje ANSI C como si estuviera en primero"
Título: Re: Problema con programita en CCS
Publicado por: soymoe en 29 de Agosto de 2013, 00:17:52
Gracias por las respuestas ya aprendi un poco mas de CCS