Saludos
Soy nuevo en esto de C. estoy reaizando un programa en C CCS compiler que incremente un contador, lo muestre un display de 3 dígitos y un letrero en la LCD y que a la vez haga rotar un led conectado al puerto A, pero siempre se me queda en el segundo FOR que les coloco en color, realmente no se que es lo que pasa. Les pego el código para que lo miren
FOR (I = 1; I < 10; I++)
{
PORTC = UNI;
PORTE = 0B00000100;
DELAY_MS (10);
PORTC = DEC;
PORTE = 0B00000010;
DELAY_MS (10);
PORTE = 0B00000001;
PORTC = CENT;
DELAY_MS (10);
}
#INCLUDE <16f887.h>
#USE DELAY(CLOCK=4000000)
#DEFINE USE_PORTB_LCD TRUE
#INCLUDE <LCD.C>
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#BYTE PORTA= 5
#BYTE PORTB= 6
#BYTE PORTC= 7
#BYTE PORTD= 8
#BYTE PORTE= 9
#DEFINE SW1 PORTB,0
#DEFINE SW2 PORTB,1
#DEFINE SW3 PORTB,2
#DEFINE TUNI PORTE,2//Definición de variables
#DEFINE TDEC PORTE,1//Definición de variables
#DEFINE TCEN PORTE,0//Definición de variables
Byte CONST display[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
BYTE CONST DERECHA[8]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
BYTE CONST ISQUIR[8]={0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01}; //un entero, es decir de 8 bits
INT CONT=0;//Declarar la variable CONTRET
SHORT UNI=0, DEC=0, CENT=0, I=0, J=0, K=0;
VOID MOSTRAR ()
{
LCD_PUTC ("\f"); // BORRA LCD
FOR (J = 1; J<6; J++)
{
PORTA = DERECHA[J];
LCD_GOTOXY (7, 1); //LINEA UNO CARACTER SIETE
LCD_PUTC ("ARRIBA");
FOR (I = 1; I < 10; I++)
{
PORTC = UNI;
PORTE = 0B00000100;
DELAY_MS (10);
PORTC = DEC;
PORTE = 0B00000010;
DELAY_MS (10);
PORTE = 0B00000001;
PORTC = CENT;
DELAY_MS (10);
}
}
LCD_PUTC ("\f"); // BORRA LCD
FOR (J = 0; J < 6; J++)
{
PORTA = ISQUIR[J];
LCD_GOTOXY (7, 2); //LINEA DOS CARACTER SIETE
LCD_PUTC ("ABAJO");
FOR (I = 1; I < 10; I++)
{
PORTC = UNI;
PORTE = 0B00000100;
DELAY_MS (10);
PORTC = DEC;
PORTE = 0B00000010;
DELAY_MS (10);
PORTE = 0B00000001;
PORTC = CENT;
DELAY_MS (10);
}
}
}
VOID MAIN ()
{
SET_TRIS_D (0B00000000);
SET_TRIS_A (0B00000000);
SET_TRIS_C (0B00000000);
SET_TRIS_B (0B00111000);
SET_TRIS_E (0B00000000);
// ! ANSEL = 0;
// ! ANSELH = 0;
PORTB = 0;
PORTE = 0;
PORTA = 0;
PORTC = 0;
PORTD = 0;
CONT = 0;
LCD_INIT (); //INICIALIZA LCD
LCD_PUTC ("\f"); // BORRA LCD
WHILE (1)
{
IF ( (BIT_TEST (SW1))&& ( ! BIT_TEST (SW2))&& ( ! BIT_TEST (SW3) ))
{
MOSTRAR () ;
IF (CONT == 1000)
{
CONT = 0;
}
CONT++;
CENT = CONT / 100;
DEC = (CONT % 100)/10;
UNI = (CONT % 100) % 10;
}
}
}