Autor Tema: Mi primer programa en C  (Leído 1849 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado LalitoX

  • PIC10
  • *
  • Mensajes: 13
Mi primer programa en C
« en: 03 de Abril de 2009, 12:08:40 »
Primero y principal me presento, mi nombre es Roque Terrani, vivo en C.A.B.A. y me apasiona la tecnologia. En la secundaria, recientemente terminada, use PICS y uno que otro ATMEL, pero siempre en ASM, como vengo de laburar en c y c++ pero no orientado a pic me decidi a empezar a programar los pic en c. Me decido a hacer mi simple primer programa y no sucede lo que yo quiero y me estoy dando la cabeza contra la pared desde ayer. Estoy trabajando con un 16f84a y simulo con PIC simulator IDE.
Bueno como todo primer programa su utilidad es dudosa =P, lo que tendria que hacer es que cada vez que toco el pulsador cambie de led. Primero se prende el 1, depsues el 2, despues el 3, despues se apagan y asi por siempre.
 Bueno no se si es necesario explicar lo que hice en el codigo, pero bue, se fija si el pulsador esta prendido, si lo esta se fija que led esta encendido y cambia el led encendido. Al final un do while que evita que en el medio segundo que el usuario pulsa el boton no cambie sin parar el led encendido.
Bueno desde ya muchas gracias y fue todo un esfuerzo hacer mi primer topic, ya que leo de hace mucho y me encanta el foro, pero nunca me anime a postear nada. Lamento que mi primer topic sea para pedir ayuda, pero ya vendran dias en donde yo ayude a otros =P.
en fin QUE TIENE MAl? me estoy dando la cabeza contra la pared porque realmente no encuentro el error de codigo

#include <16f84a.h>         
#fuses XT,NOWDT,NOPROTECT,PUT 
#use delay (clock=4000000)   
#use fast_io(b)   
//------Programa principal-----
void main(void)
{
   set_tris_b(0x08); 
   disable_interrupts(GLOBAL); 
   output_b(0x00);
   do{   
      if(input_state(PIN_B3)==1){           
         if(input_state(PIN_B0)==1){
            output_b(0x02);
         }else{
            if(input_state(PIN_B1)==1){
               output_b(0x04);
            }else{
               if(input_state(PIN_B2)==1){
                  output_b(0x00);
               }else{
                  output_b(0x01);
               }
            }
         }
      }
      do{
            delay_us(10);
      }while(input_state(PIN_B3)==1);
   }while(TRUE);           
}


Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Mi primer programa en C
« Respuesta #1 en: 03 de Abril de 2009, 12:57:07 »
Yo aplicaria algunos retardos para evitar los rebotes de los pulsadores, y tambien por hardware unos filtros pasa bajo.
Suerte!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado LalitoX

  • PIC10
  • *
  • Mensajes: 13
Re: Mi primer programa en C
« Respuesta #2 en: 03 de Abril de 2009, 18:42:06 »
#include <16f84a.h>         
#fuses XT,NOWDT,NOPROTECT,PUT 
#use delay (clock=4000000)   
#use fast_io(b)   
//------Programa principal-----
void main(void)
{
   set_tris_b(0x08); 
   disable_interrupts(GLOBAL); 
   output_b(0x00);
   do{   
      if(input_state(PIN_B3)==0){           
         if(input_state(PIN_B0)==1){
            output_b(0x02);
         }else{
            if(input_state(PIN_B1)==1){
               output_b(0x04);
            }else{
               if(input_state(PIN_B2)==1){
                  output_b(0x00);
               }else{
                  output_b(0x01);
               }
            }
         }
      delay_ms(300);
      do{
         
      }while(input_state(PIN_B3)==0);
      }
   }while(TRUE);           
}

Cambiando un poco el circuito y minimamente el codigo andubo, gracias por el consejo de los retardos, no hubiera funcionado sin eso