Problema con sbit!! cambia todo el puerto

Que tal, necesito ayuda con un programa no entiendo porque falla si en otros programas que hice salia perfecto, es un programa que saca PWM por los puertos, si se activa el boton PORTA.4 va a la funcion que enciende los leds


Código:
void subir();
void subiroff();
void bajar();
void pwm();

unsigned char ldr,s1,s2,l1,l2,l3,l4,l5,l6,l7,l8;
unsigned char paso,ww,j,i;
 sbit a1 at rb0_bit;
 sbit a2 at rb1_bit;
 sbit a3 at rb2_bit;
 sbit a4 at rb3_bit;
 sbit a5 at rb4_bit;
 sbit a6 at rb5_bit;
 sbit a7 at rb6_bit;
 sbit a8 at rb7_bit;
 sbit bot1 at ra4_bit;
 sbit bot2 at ra5_bit;

void main()
{

 
 trisa=0xff;
 porta=0;
 trisb=0x00;
 portb=0;

 while(1)
 {
  if(bot1==1)s1=1;     //si es presionado coloca en 1 s1
  if(bot2==1)s2=1;
  if(s1==1)
  {
   subir();     //lleva a la rutina subir
   delay_ms(2000);

  }
 }
}

void pwm(void)        //rutina de PWM AQUI EL PROBLEMA
{

paso=1;
    for(ww=0;ww<255;ww++)
    {
    if(paso==255) paso=1;        //si paso==0, paso=1

    if(l1>=paso) a1=1; else a1=0;  //Entra a 1 si es mayor segun la rutina que se dio en subida()

    if(l2>=paso) a2=1; else a2=0;  //cuando va a else y coloca en 0 todo el puerto........ no se porque

    if(l3>=paso) a3=1; else a3=0;  //solo debería apagar el bit y no todo el puerto

    if(l4>=paso) a4=1; else a4=0;

    if(l5>=paso) a5=1; else a5=0;

    if(l6>=paso) a6=1; else a6=0;

    if(l7>=paso) a7=1; else a7=0;

    if(l8>=paso) a8=1; else a8=0;




    paso++;//incrementar paso


    }

}
void subir(void)    //aqui comienza la magia
{
    for(j=0;j<254;j=j+2)    // con esto va variando el ancho de pulso que sera enviado a la funcion PWM
    {
               l1=j;
               pwm();
    }
        a1=1;
    for(j=0;j<254;j=j+2)
    {
               l2=j;
               pwm();
    }
    for(j=0;j<254;j=j+2)
    {
               l1=j;
               pwm();
    }
    for(j=0;j<254;j=j+2)
    {
               l1=j;
               pwm();
    }
    for(j=0;j<254;j=j+2)
    {
               l1=j;
               pwm();
    }
    for(j=0;j<254;j=j+2)
    {
               l1=j;
               pwm();
    }
}
Espero puedan ayudarme con este problemilla!!!! me tiene loco si es necesario envio los otros programas que tienen la misma lógica pero estan hechos en CC5x cuestion de modificar cabeceras, igual al transportarlo a CC5X no funciona :unsure:

Muchas gracias!!
 

Adjuntos

  • gradassebe.rar
    21.2 KB · Visitas: 1
Atrás
Arriba