Yo tengo uno funcionando y la parte del programa que lee el acelerómetro es más corta. Lo pego también para que podamos compararla:
Codigo:
float lee_acelerometro (int Eje) { // Según Eje sea 0 o 1 se lee el pin D0 o D1
// Decimales indica la resolución del resultado
// El resultado siempre será un porcentaje
int32 alto=0, bajo=0, j;
float Resultado;
int i;
for (i=0;i<10;++i) { // se lee 10 veces, para evitar márgenes de error (se puede modificar)
// si es necesaria mayor frecuencia
if (Eje) {
while( input(PIN_C2)); // esperamos a que baje la señal de entrada
while( !input(PIN_C2)); // esperamos a que suba la señal de entrada
while( input(PIN_C2)) { // mientras esté arriba vamos contando en alto
alto++;
} ;
while( !input(PIN_C2)) { // y mientras esté abajo vamos contando en bajo
bajo++;
};
} else {
while( input(PIN_C3) );
while( !input(PIN_C3) );
while( input(PIN_C3) ) {
alto++;
} ;
while( !input(PIN_C3) ) {
bajo++;
};
};
};
return ((((float)alto/((float)alto+(float)bajo))-0.43)*10000/9);
}
Me ha sorprendido que hayas introducido parte del código en ASM, ¿porqué lo necesitaste?