yo creo que te estas olvidando de quitarlos como analogicos y ademas de quitar el comparador.
Cuando arranca el PIC las entradas estan como analogas, tenes que cambiarlas a digitales, y en algunos PIC el puerto b u otro suele tener los comparadores analogicos, estos suelen estar activos en el reset y tambien hay que configurarlos.
Si esta como analogo siempre te va a dar 0 por eso imagino que dice : Codigo sin efecto
Exactamente como no se... no uso CCS, pero creo que lo que te dije te puede iluminar un poco
Creo que para lo analogico es:
setup_adc_ports(ALL_DIGITAL);
y para el comparador es:
setup_comparator(NC_NC_NC_NC);
Hay ademas mas cosas para arreglar en el programa:
Propongo esto:
void main(){
int i=0;
output_b(0b00000000);
setup_adc_ports(ALL_DIGITAL);
setup_comparator(NC_NC_NC_NC);
while(1)
{
if(!input(PIN_A0)); // Aca es simple si te da un 0 no entra, si tenes cualquier valor 1, una letra 'a', lo que sea entra al if, por eso si A0 = 0 el negado es 1 y va a entrar, por eso quite la comparacion
{
delay_ms(10); // Espero un tiempito para que el rebote del boton no afecte, el rebote hace que varie en 1 y 0 el valor del pin, entonces espero ese tiempito para que quede en 0
while(!input(PIN_A0)); // Ya establecido el valor, lo encierro aca para que no proceda hasta que suelte el boton, esto es para hacerlo sin delays, solo cuando suelto el boton sale de aca y aumenta
output_b(conteo[i++]); // Esto es lo mismo que hacer output_b[i] y luego hacer i++
if(i>9)
{
i=0;
}
}
}
}
Ademas voy a decirte que hiciste mal en el tuyo.
- No tenes un bucle infinito, observas que en el mio hay un while(1)
- optput_b(conteo) no va a hacer lo que vos queres
Cuando tenes un array, conteo
- si haces usas conteo solo estas apuntando a la direccion de memoria donde se guarda conteo[0]...
Imaginate esto:
Creo un array que de 4 variables de 8 bits, el compilador lo pone en la direccion 0x50 y ocupa hasta 0x53, ademas le asigno valores {11,22,33,44}
Si yo hago esto:
int i,a,j;
i = conteo;
a = conteo[0];
j = *(conteo+1)
"i" va a ser igual a 0x50, y "a" va a ser igual a 11 , y j va a valer 33, Este ultimo es lo que se llama puntero y es bastante util en C pero creo que es lo mas complejo de tratar del mismo.
Basicamente para que lo entiendas al puntero es, el contenido que hay en la direccion "conteo+1" como conteo apuntaba a conteo[0] si le sumo 1 al tratarse de variables de 8 bits es lo mismo conteo[1], pero no nos vayamos por las ramas, mejor dejarlo donde qudamos, y podes ver la diferencia entre "i" y "a". Esto ocurre en los arrays.
Si es una variable comun y corriente, la direccion se logra con el operador &, es decir
int i,a,j; // Supone que se guardaron en las posiciones 0x40 a 0x42 respectivamente, es decir i en 0x40, a en 0x41 y j en 0x42
i = 30;
a = &i;
j = i;
Entonces ahora tenes "a" va a ser igual a 0x40 y "j" va a ser igual a 30.