Hola,
Estoy empezando a entender el codigo asm, y tengo una rutina que no acabo de entender.
Esta pequeña rutina, lo que hace es ver si el contador esta dentro de unos limites, si no es así vuelve a loop a la espera de un conteo que se encuentre dentro de los límites para continuar...
clrf STATUS ; limpia Status
movfw perh ; carga perh to w
movwf aargb0 ; carga al aargb0 (high)
movfw perl ; carga perl al w
movwf aargb1 ;carga w a aargb1 (low)
clrf bargb0 ; limpia bargb0
movlw D'57' ; carga valor 57 a w
movwf bargb1 ; carga w a bargb1
movf bargb1,W ; mueve bargb1 al W
subwf aargb1,F ; resta aargb1(counter_low) - w(57) pone valor FileReg bargb1
movf bargb0,W ; mueve bargb0 al w
btfss STATUS,C ; Si resta < 0 entonces
incf bargb0,W ; incrementa bargb0+1
subwf aargb0,F ; resta aargb0(counter_high) - w pone valor FileReg aargb0
btfss STATUS,C ; Si H/L counter < 57 entonces
goto LOOP ; vuelve al loop
Lo que me gustaría es que alguien me explicara que es lo que hace esta rutina paso a paso, no se si los comentarios estan correctos, los puse yo. Las primeras instrucciones creo que están claras. Carga el valor de perh al aargb0 y el perl al aargb1.
Luego limpia bargb0, y pone el valor 57 en bargb1, mueve ese valor al acumulador y hace la resta, el valor del contador low - 57. Luego no tengo muy claro donde se guarda ese valor ??.
Entonces mueve el valor bargb0 al acumulador, que se supone = 0 porque lo ha limpiado antes!.
Luego va a comprobar cmo esta el flag C, si el valor es negativo se pone C=0, por tanto no saltará la proxima instruccion.
Entonces incrementaría bargb0+1, que si era 0 ahora será 1??. resta el valor del contadorhigh - el acumulador que será 1 en teoría, y lo guarda en aarb0??, al ser valido valores >57, el contador high debería ser 0, 0-1, sería negativo C=0 y entonces en el btfss iria al goto y volvería al loop?. No lo entiendo y me lio mucho.
Si por ejemplo tuvieramos valor perl=57 y perh=0, serían 57 conteos del timer, con lo cual la primera resta = 0, C=1 y saltaría, luego restaría perh - 0 = 0 , C=1 saltaría y seguiría con el programa porque sería un conteo valido ok!, Creo que está bien interpretado, no es asi??.
Luego imaginemos que tenemos perl=57 y perh=1 (que sería fuera de rango aceptado), la primera resta sería = 0, C=1 y saltaría, luego la segunda serían perh = 1 - 0 (del bargb0) = 1 C=1, y saltaría pero no debe saltar porque ese contador esta fuera de rango, creo que lo interpreto mal, me gustaría que me explicase algun alma caritativa, lo que va haciendo paso a paso con las restas y los contadores high y low. Creo que no lo entiendo bien...
Espero que alguien me de un poco de luz, gracias