Problema con el FOR

Mi código es para mandar una cierta cantidad de veces un ciclo para un motor a pasos, pero cuando entra al for, no manda la señal al motor.
¿Qué debería cambiar?
C:
#INCLUDE <16f877A.h>
#FUSES XT, NOPUT, NOLVP, NOPROTECT, NOWRT
#USE DELAY (CLOCK=400000)

#iNCLUDE <lcd.c>
#INCLUDE <kbd3.c>
#BYTE TRISB=0x86
#BYTE PORTB=0x06
#BYTE PORTC=0x07
#BYTE TRISC=0x87

char k;
int n1;
int x=1;
int i=0;

void main (void)
{
    lcd_init();
    kbd_init();
    port_b_pullups(TRUE);
    PORTC=0x00;

    do
    {
        lcd_gotoxy(1,1);
        printf(lcd_putc,"B1 90  B2 180      ");
        lcd_gotoxy(1,2);
        printf(lcd_putc,"B3 270  B2 360");
        k=kbd_getc();
        n1=k-48;
        PORTC=0x00;
       
        while(x==1)
        {
            k=kbd_getc();
            if((k<=52)&&(k>=49))
            {
                n1=k-48;
                delay_ms(500);
                x++;
            }
        }
       
        while(x==2)
        {
            if(n1==1) //%
            {
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Elegiste 90 Grados      ");
                lcd_gotoxy(1,2);
                printf(lcd_putc,"                        ");
               
                for(i=0;i<=90;i++)
                {
                    PORTC=0b00000001;
                    delay_ms(30);
                    PORTC=0b00000010;
                    delay_ms(30);
                    PORTC=0b00000100;
                    delay_ms(30);
                    PORTC=0b00001000;
                    delay_ms(30);
                }
               
                delay_ms(500);
                x++;
            }
           
            if(n1==2) //%
            {
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Elegiste 180 Grados      ");
                lcd_gotoxy(1,2);
                printf(lcd_putc,"                        ");
               
                for(i=0;i<=180;i++)
                {
                    PORTC=0b00000001;
                    delay_ms(30);
                    PORTC=0b00000010;
                    delay_ms(30);
                    PORTC=0b00000100;
                    delay_ms(30);
                    PORTC=0b00001000;
                    delay_ms(30);
                }
               
                delay_ms(500);
                x++;
            }
           
            if(n1==3) //%
            {
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Elegiste 270 Grados      ");
                lcd_gotoxy(1,2);
                printf(lcd_putc,"                        ");
               
                for(i=0;i<=270;i++)
                {
                    PORTC=0b00000001;
                    delay_ms(30);
                    PORTC=0b00000010;
                    delay_ms(30);
                    PORTC=0b00000100;
                    delay_ms(30);
                    PORTC=0b00001000;
                    delay_ms(30);
                }
               
                delay_ms(500);
                x++;
            }
           
            if(n1==4) //%
            {
                lcd_gotoxy(1,1);
                printf(lcd_putc,"Elegiste 360 Grados      ");
                lcd_gotoxy(1,2);
                printf(lcd_putc,"                        ");
               
                for(i=0;i<=360;i++)
                {
                    PORTC=0b00000001;
                    delay_ms(30);
                    PORTC=0b00000010;
                    delay_ms(30);
                    PORTC=0b00000100;
                    delay_ms(30);
                    PORTC=0b00001000;
                    delay_ms(30);
                }
               
                delay_ms(500);
                x++;
            }
        }
       
        while(x==3)
        {
            delay_ms(5000);
            x=1;
        }
    }
    WHILE(TRUE);
}
 
¿Qué debería cambiar?
En PCWHD Compiler de la empresa CCS, las variables declaradas como int, equivalen a variables sin signo de 8 bits.
En tu programa estás usando la variable "i" como si se tratara de una variable de 16 bits.

Tienes declarado:
C:
int i=0;    // Variable sin signo de 8 bits = int8 (0 a 255)

Pero en estos bucles for estás excediendo su valor máximo:
C:
for(i=0;i<=270;i++)    // i > 255
for(i=0;i<=360;i++)    // i > 255


Type Specifiers.jpg

La ayuda del compilador dijo:
Note: All types, except float char, by default are un-signed; however, may be preceded by unsigned or signed (Except int64 may only be signed)
Short and long may have the keyword INT following them with no effect. Also see #TYPE to change the default size.
Y también lo que menciona Roberto es importante, nunca declaraste el puerto C como salida, aunque sí tienes su referencia.
 
Atrás
Arriba