TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: EDJMM9 en 04 de Agosto de 2012, 16:01:42

Título: Como controlar varios puertos con pulsadores con el pic 16f877a ? pic c compiler
Publicado por: EDJMM9 en 04 de Agosto de 2012, 16:01:42
 buenas soy  nuevo  en  el  foro  y en esto de  los  pics tengo algunas dudas hasta  los momentos se que si escribo
 el codigo:

//teniendo conectado un pulsador en el (pin_A1) Y UN led en el (pin_b2) // puedo encender el led pulsando el boton y apagarlo pulsandolo de nuevo. lo probe en proteus y funciona .

   while(true){
    if(input(pin_A1)==0){
    delay_ms(30);
    if(input(pin_A1)==0)
    output_toggle(pin_b2);
    while(input(pin_A1)==0);

//ahora me pregunto como haría para hacer esto con varios pulsadores y varios leds . trabajando independientemente . osea poner un 5 pulsadores en (pin_a0) (pin_a1) (pin_a2) (pin_a3) (pin_a4) y que cada uno controle los leds conectados en los puertos  b0 b1 b2 b3 b4

algo asi como:
(pin_a0) enciende y apaga el led qe esta en (pin_b0) //controla on/off el led amarillo//
(pin_a1) enciende y apaga el led qe esta en (pin_b1) //controla on/off el led  rojo//
(pin_a2) enciende y apaga el led qe esta en (pin_b2) //controla on/off el led verde//        (todos independientemente)
(pin_a3) enciende y apaga el led qe esta en (pin_b3) //controla on/off el led  blanco//
(pin_a4) enciende y apaga el led qe esta en (pin_b4) //controla on/off el led azul//

yo ignorantemente pense claro hago el mismo programa de arriba asi

programa en pic c compiler

   while(true){
    if(input(pin_A0)==0){
    delay_ms(30);
    if(input(pin_A0)==0)
    output_toggle(pin_b0);  // led amarillo//
    while(input(pin_A0)==0);
 
}   
    if(input(pin_A1)==0)
    delay_ms(30);
    if(input(pin_A1)==0)
    output_toggle(pin_b1);  // led rojo//
    while(input(pin_A1)==0);

if(input(pin_A1)==0)
    delay_ms(30);
    if(input(pin_A1)==0)
    output_toggle(pin_b1);  // led verde//
    while(input(pin_A1)==0);
}
y asi con los demas
 
solo que  no  funciona como yo quiero solo controla el primer led y los demas no  :? se que estoy haciendo algo mal en la programacion pero  soy nuevo en este idioma mi imagino q es algun problema con las interrupciones .  o bueno si hay  alguien que me pueda ayudar  le agradeceria en el alma :D
Título: Re: Como controlar varios puertos con pulsadores con el pic 16f877a ? pic c compiler
Publicado por: miglo en 29 de Octubre de 2012, 20:08:23
Hola: EDJMM9
Yo aun soy mas principiante que tu en C,
hazlo asi que si no me equiboco te tirara bien,
el problema lo tenias en que te dejabas las sentencias abiertas.
Comparalo con el tuyo y mira donde esta la diferencia.
Un saludo.


void main()
{
  while(true){
      if(input(pin_A0)==0){
      delay_ms(30);
      if(input(pin_A0)==0)
      output_toggle(pin_B0);       // led amarillo//
      while(input(pin_A0)==0);}
 
   
      if(input(pin_A1)==0){
      delay_ms(30);
      if(input(pin_A1)==0)
      output_toggle(pin_B1);       // led rojo//
      while(input(pin_A1)==0);}

      if(input(pin_A2)==0){
      delay_ms(30);
      if(input(pin_A2)==0)
      output_toggle(pin_B2);       // led verde//
      while(input(pin_A2)==0);}
}
   
}
Título: Re: Como controlar varios puertos con pulsadores con el pic 16f877a ? pic c compiler
Publicado por: josefe en 02 de Diciembre de 2012, 14:49:41
buenas soy  nuevo  en  el  foro  y en esto de  los  pics tengo algunas dudas hasta  los momentos se que si escribo
 el codigo:

//teniendo conectado un pulsador en el (pin_A1) Y UN led en el (pin_b2) // puedo encender el led pulsando el boton y apagarlo pulsandolo de nuevo. lo probe en proteus y funciona .

   while(true){
    if(input(pin_A1)==0){
    delay_ms(30);
    if(input(pin_A1)==0)
    output_toggle(pin_b2);
    while(input(pin_A1)==0);

//ahora me pregunto como haría para hacer esto con varios pulsadores y varios leds . trabajando independientemente . osea poner un 5 pulsadores en (pin_a0) (pin_a1) (pin_a2) (pin_a3) (pin_a4) y que cada uno controle los leds conectados en los puertos  b0 b1 b2 b3 b4

algo asi como:
(pin_a0) enciende y apaga el led qe esta en (pin_b0) //controla on/off el led amarillo//
(pin_a1) enciende y apaga el led qe esta en (pin_b1) //controla on/off el led  rojo//
(pin_a2) enciende y apaga el led qe esta en (pin_b2) //controla on/off el led verde//        (todos independientemente)
(pin_a3) enciende y apaga el led qe esta en (pin_b3) //controla on/off el led  blanco//
(pin_a4) enciende y apaga el led qe esta en (pin_b4) //controla on/off el led azul//

yo ignorantemente pense claro hago el mismo programa de arriba asi

programa en pic c compiler

   while(true){
    if(input(pin_A0)==0){
    delay_ms(30);
    if(input(pin_A0)==0)
    output_toggle(pin_b0);  // led amarillo//
    while(input(pin_A0)==0);
 
}    
    if(input(pin_A1)==0)
    delay_ms(30);
    if(input(pin_A1)==0)
    output_toggle(pin_b1);  // led rojo//
    while(input(pin_A1)==0);

if(input(pin_A1)==0)
    delay_ms(30);
    if(input(pin_A1)==0)
    output_toggle(pin_b1);  // led verde//
    while(input(pin_A1)==0);
}
y asi con los demas




Me parece que hay muchos condicionales imnecesarios, es mi apreciación, creo que se podria hacer mas sencillo. No te dejo codigo porq utilizo mikroc y las sentencias no son iguales creo.