Anda di halaman 1dari 2

10 bits: ADRESH (contiene los 2 bits mas significativos, poniendo los demas a 0 ) y el

ADRESL (contiene los 8 bits menos significativos) por ejemplo: ADRESH = 00000010 y
ADRESL= 10001100 lo que nos da un valor de 1010001100 (652 en decimal) con 10bits...

8bits: ADRESH (contiene los 8 bits mas significativos) y el ADRESL (contiene los 2 bits
menos significativos, poniendo los demas a 0 ) por ejemplo: ADRESH = 10100011 y
ADRESL = 00000000 es decir 1010001100 (652 en decimal), pero si ignoramos los 2 bits
menos significativos nos quedan solamente 8 bits que es lo que necesitas, con lo que
tendriamos un valor de 10100011 (163 en decimal)

La explicación está simple pero no has mencionado el tema de Left Justify o Right Justify y
aquí está bastante mezclado.

Para aclarar un poco mejor el asunto.

El conversor siempre funciona a 10 ó 12 (en los pics con conversor de 10 y 12 bits), el


truco para trabajar a 8 bits, consiste en usar el LEFT JUSTIFY.
Hablando de los de 10 bits (los más comunes) pongamos el siguiente ejemplo:

Rtdo (binario) = 00000010 00110011

Si se utiliza el right justify , es decir ADCON1,ADFM = 1 el resultado quedará

ADRESH = 00000010b
ADRESL = 00110011b

Si se utiliza el left justify , es decir ADCON1,ADFM = 0 el resultado quedará

ADRESH = 10001100b
ADRESL = 11000000b

Si quieres trabajar en 8 bits, pues pones el ADCON1,ADFM en 0, y solo lees y trabajas con
el ADRESH.

Si quieres trabajar en 10 bits, pues ambas formas sirven, aunque lo recomendable s usar
RIGHT JUSTIFY. Si utilizas LEFT JUSTIFY, deberás tener mayor cuidado y
probablemente hacer alguna rotación para guardar los datos si piensas procesarlos
normalmente. En muchos casos el A/D se usa para comparar valores y en función de ello
tomar decisiones y en estos casos, ambas cosas sirven ya que al final se termina
comparando con 'constantes' que en assembler sería lo mismo de una forma u otra.