Prueba esto:
short status; // 1=> up_count 0=> down_count
int valor=0;
void incremento() {
for (i=0;i<10;i++) {
valor+=10;
delay_ms(500);
}
status=0; //Despues del incremento debe ir el decremento
}
void decremento() {
for (i=0;i<10;i++) {
valor-=10;
delay_ms(500);
}
status=1 //Despues del decremento debe ir el incremento
}
void main() {
valor=0; //Valor inicial
status=1; //Primedo incrementamos
while(1) {
switch(status) {
case 1: incremento():break;
case 0: decremento();break;
} //switch
} //while
} //main
Podrias probar enviar en valor de "valor" al puerto rs232 usando un putc("valor) por éjemplo, a modo de debugger. Sin embafrgo, hay que considerar que esta funcion ocupa ciclos y por tanto el requermiento de los 500ms se pierde...podrias contar cuantos ciclos genera el compilador y restarlo a los retardos, o bien, y creo la mejor solucion, es usar el TMR0 para efetcos de temporización, lo que te da realmente los 500 ms....claro que con ajustes en el valor de carga del tmr0...
Cuentanos como te va