Hola Isfan, no es tan complicado lo que requerís implementar, primero, olvidate del 4V, (por ahora) mejor que sean:
(1023*4)/5=818,4 (*1)
o sea, el valor 818 ó 819 (valor discreto del ADC), con este número (11.0011.0010) te planteas la famosa comparación, primero con los bit_H, si resulta ó mayor ó menor, se termino el jaleo.
Si resultan iguales, nuevamente a comparar, pero esta vez los bit_L...
La comparación en assembler, se hace con una resta, y después mirando las banderas "C" & "Z".
Se viene el tema de la operación (*1), escalar proporcionalmente, se hace de un solo tiro, esto es UNA multiplicación (para simplificar las cosas):
tu constante de proporcionalidad en este caso es:
5/1023=0,0048875855.... decimos que es 488
al número 488 lo multiplicas por el valor obtenido del ADC, p.e.:
488*818=399184 (*2)
Esta vez se viene una descomposición BCD, de un número de 24 o tal vez 32 bit, el punto decimal se lo trabaja como fijo, pues siempre aparece entre la cifra 5ta y 6ta de (*2)
Una de esas la cosa sigue..... imaginá si querés mostrar estos resultados, en Led display 7 segmentos, o LCD?, "demultiplexión" en 4 ú 8 bit, comunicacion de 4 ú 8 bit, y la cosa sigue.
Si te mandaron de la "U" o el "Cole", una forma de resolverlo es como lo propongo.
Si no es lo anterior, podrías pasar por:
http://piclist.com/techref/microchip/compcon.htm#16_bitdonde hay cantidad de rutinas matemáticas y utilidades, listas para emplear.
Ya cansado de liarme con esto, me pase al C!.-