Selector de secuencias en Mikro C no cumple al simularlo!!

Iniciado por ...DaNiEl..., 24 Julio 2009, 17:39 PM

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

...DaNiEl...

/*Selector de secuencias*/
int cont=0,sc1,sc2,sc3;
void main()
{
ANSEL=0;
ANSELH=0;
TRISA=1; /*Entrada que cuenta los pulsos con un push button*/
TRISC=0; /*Configurado como salida para hacer la secuencia*/
while(1)
{
if(PORTA==1)
{
cont++;
if(cont>=3)
cont=0;
while(PORTA==1)
{
}
}
switch(cont)
{
case 1:
for(sc1=0;sc1<255;sc1++)
{
PORTC=sc1;
delay_ms(5);
}
break;
case 2:
for(sc1=255;sc1>0;sc1--)
{
PORTC=sc1;
delay_ms(5);
break;
case 3:
sc2=1;
for(sc1=0;sc1<7;sc1++)
{
PORTC=sc2;
delay_ms(5);
sc2=sc2*2;
if(sc2==256)
sc2=1;
break;
case 4:
sc2=128;
for(sc1=0;sc1<7;sc1++)
{
PORTC=sc2;
delay_ms(5);
sc2=sc2/2;
if(sc2==1)
sc2=128;
break;
}
}
}
}
}
}
/*PIC16F690*/

Me recomendarian hacerlo con la sentencia while en vez de for??? :huh:
>...We ArE a HuMaNs AfTeR aLl...<

h0oke

Veamos si entiendo...

Lo que necesitas es como un temporizador?

Por PORTA irían por ejemplo... los minutos, por PORTC los segundos... Ese efecto quieres lograr?

...DaNiEl...

Cita de: 嘇sZeus嘇 en 24 Julio 2009, 17:47 PM
Veamos si entiendo...

Lo que necesitas es como un temporizador?

Por PORTA irían por ejemplo... los minutos, por PORTC los segundos... Ese efecto quieres lograr?

Ps yo utilizo el PORTA como una entrada la cual cada vez que le llegue un pulso cambia de secuencia; la secuencia sale en el PORTC; lo que pasa es que a la hora de simularlo solo saca una secuencia y no cambia si se le introduce un pulso en PORTA!!
>...We ArE a HuMaNs AfTeR aLl...<

h0oke

Aver, aver, aver...

Tienes una entrada de onda cuadrada con su respectiva frecuencia, tu quieres que por cada alto se active un pin del otro puerto, hasta que llegue a los 8 si mal no recuerdo, y luego al próximo alto(también podría ser bajo), vuelva a comenzar la secuencia?

...DaNiEl...

Cita de: 嘇sZeus嘇 en 24 Julio 2009, 17:54 PM
Aver, aver, aver...

Tienes una entrada de onda cuadrada con su respectiva frecuencia, tu quieres que por cada alto se active un pin del otro puerto, hasta que llegue a los 8 si mal no recuerdo, y luego al próximo alto(también podría ser bajo), vuelva a comenzar la secuencia?

Sip, la entrada se podria decir que es PORTA.F0; yo quiero que por cada pulso que entre en ella, cambie a la proxima secuencia que puse en los "case" de mi sentencia switch, la cual se muestra en los pines del PORTC; pero al enviarle un pulso no cambia de secuencia, no se si es por algun error que haya puesto yo en alguno de los case o en algun for!!
>...We ArE a HuMaNs AfTeR aLl...<

h0oke

Bien, analizando tu code, no son necesarios tus "switchs". Otra cosa, pusiste PORTA==1, ¿?, tu PORTA es únicamente el pin de tu clock?

Yo en todo caso

Citarwhile(1)
{
  if( PORTA.(X)==1)
  {
           cnt++;
            if(cnt<(cantidad pines + 1))
           PORTC=cnt;
            else
            cnt=0;  
  }
}

Se entiende la idea?

...DaNiEl...

Cita de: 嘇sZeus嘇 en 24 Julio 2009, 18:17 PM
Bien, analizando tu code, no son necesarios tus "switchs". Otra cosa, pusiste PORTA==1, ¿?, tu PORTA es únicamente el pin de tu clock?

Yo en todo caso

Citarwhile(1)
{
  if( PORTA.(X)==1)
  {
           cnt++;
            if(cnt<(cantidad pines + 1))
           PORTC=cnt;
            else
            cnt=0;  
  }
}

Se entiende la idea?

Ok... entendi tu idea, seria mucho mas facil si lo hiciera con while verdad!! es mas creo que quedaria mas pequeño... pero mi profesor insiste!! gracias!! probare hacer cambios en el codigo que ya tengo o si no creare uno nuevo!! Muchas gracias por tu ayuda!!

Saludos!!  :)  ;)
>...We ArE a HuMaNs AfTeR aLl...<

h0oke

Citarwhile(1)
{
  if( PORTA.(X)==1)
  {
           cnt=0;
           while(cnt<(cantidadpines+1)
           {
                PORTC=cnt;
                 cnt++;
           }  
  }
}

...DaNiEl...

/*Selector de secuencias*/
int cont=1,sc1=0b00000001,sc2=0b10000000;
void main()
{
ANSEL=0;
ANSELH=0;
TRISA=1; /*Entrada que cuenta los pulsos con un push button*/
TRISC=0; /*Configurado como salida para hacer la secuencia*/
while(1)
{
if(PORTA==1)
{
cont++;
if(cont>=5)
cont=1;
while(PORTA==1)
{
}
}
switch(cont)
{
case 1:
PORTC=sc1;
sc1=sc1<<1;
if(sc1>128)
sc1=1;
break;
case 2:
PORTC=sc2;
sc2=sc2>>1;
if(sc2<1)
sc2=128;
break;
case 3:
PORTC=sc1;
sc1=sc1<<2;
if(sc1>128)
sc1=1;
break;
case 4:
PORTC=sc2;
sc2=sc2>>2;
if(sc2<1)
sc2=128;
break;
}
}
}


Jijiji!! solo queria poner el codigo ya corregido!! ya me funciona!! lo hice utilizando if y le agregue 4 secuencias diferentes!! gracias por tu ayuda!!
>...We ArE a HuMaNs AfTeR aLl...<

h0oke

De nada. Por suerte tu solo puedes solucionar tus problemas  ::)