Módulo A/D en Microcontroladores PIC
Módulo A/D en Microcontroladores PIC
TEMA 9
MÓDULO CONVERSOR A/D
9.1.- INTRODUCCIÓN
9.2.- CONVERSIÓN ANALÓGICA/DIGITAL
9.2.1.- CONVERTIDOR A/D DE APROXIMACIONES SUCESIVAS
9.2.2.- CARACTERÍSTICAS DE LOS CONVERTIDORES A/D
9.3.- EL MÓDULO DE CONVERSIÓN A/D DE 10 BITS EN LOS MICROCONTROLADORES PIC 16F877A
9.3.1.- CARACTERÍSTICAS GENERALES EN EL PIC16F877A
9.3.2.- FUNCIÓN DE TRANSFERENCIA DEL CONVERTIDOR A/D
9.3.3.- REGISTROS DE CONTROL DEL MÓDULO A/D: ADCON0 y ADCON1
9.3.4.- TIEMPOS RELACIONADOS CON LA DIGITALIZACIÓN DE UNA SEÑAL ANALÓGICA EN
EL MÓDULO DE CONVERSIÓN A/D
9.3.5.- PROGRAMACIÓN DEL MÓDULO DE CONVERSIÓN A/D
9.3.6.- EFECTOS DE UN RESET SOBRE EL MÓDULO A/D
9.3.7.- REGISTROS RELACIONADOS CON LAS INTERRUPCIONES DE A/D
9.3.8.- MÓDULO A/D CUANDO EL MICRO ENTRA EN MODO DORMIDO (SLEEP)
9.3.9.- EJEMPLOS
Módulo Conversor A/D SDII-2
9.1.- INTRODUCCIÓN
• La información en el mundo real (presión, temperatura, etc) se representa mediante señales
analógicas.
• Las señales analógicas varían de forma continua a lo largo del tiempo. Pueden tomar infinitos
valores.
• Los sistemas digitales utilizan señales digitales (2 valores).
• Los sistemas encargados de realizar la conversión entre el mundo analógico y el digital son:
Convertidores A/D
Convertidores D/A.
PARÁMETRO PARÁMETRO
TRANSDUCTOR FÍSICO SISTEMA FÍSICO FÍSICO TRANSDUCTOR
(VENTILADOR) (HORNO) (TERMOPAR)
TEMPERATURA TEMPERATURA
SEÑAL SEÑAL
ANALÓGICA ANALÓGICA
Interruptor Señal de
• Requiere 4 procesos Señal
analógica
electrónico muestras
retenidas
Buffer Buffer
VA VM
C
1.- Muestreo: Obtener valores ("muestras") de la señal analógica
en determinados instantes de tiempo.
S Señal de muestreo
Señal
analógica
t
Cuanto mayor sea la frecuencia de muestreo (fs = 1/Ts),
mayor será el número de muestras obtenidas, y más
información se obtendrá de la señal analógica de
entrada.
S
Señal de
muestreo El período de muestreo (Ts) determinado por el tiempo de
t conversión del convertidor A/D.
TS
VM
Teorema de muestreo:
Señal de La frecuencia de muestreo viene dada por el criterio de
muestras Nyquist, según el cual dicha frecuencia debe ser mayor
retenidas
t que el doble del ancho de banda de la señal de entrada. Es
decir una señal de frecuencia fm se puede reconstruir a
partir de muestras tomadas a una frecuencia fs 2fm
Módulo Conversor A/D SDII-4
4.- Codificación: Asignación de una combinación binaria a cada uno de los valores de salida
del cuantificador.
Con n bits se podrán codificar m valores de salida si se cumple la relación m 2n
Salida V3 Q Salida V3
discreta 3 discreta 3
2 2
1 1
-3.5 -2.5 -1.5 -0.5 t4 t5 t6 t
0.5 1.5 2.5 3.5 V2 t1 t2 t3
-1 Entrada -1
analógica
-2 -2
-3 -3
V2
t1 Entrada
t2 analógica Ejemplo:
t3
SALIDA
t4 INTERVALO CODIFICACIÓN
CUANTIFICADOR
Entrada RELOJ
analógica VA El método de conversión que utiliza es
S/H + REGISTRO DE análogo al que se emplea en las
COMP APROXIMACIONES balanzas para calcular el peso de un
VD/A VC SUCESIVAS
- objeto, y que consiste en ir añadiendo
o quitando pesas hasta equilibrar la
COMPARADOR
balanza. Se trata de llegar al valor final
mediante aproximaciones sucesivas.
Convertidor Salida
D/A digital
VD/A
1 111
1 111 RAS FS 8
0 110
110 111 7/8 FS 7
1 101 110 6/8 FS 6
VC=1 0
101
101 5/8 FS 5
0 100
100 100 4/8 FS 4 VA
1 011
011 3/8 FS 3
1 011
VC=0 010 010 2/8 FS 2
0
010
1 001 1/8 FS 1
001 Impulsos
0
001 000 0
de reloj
0 000 0 1 2 3
Módulo Conversor A/D SDII-7
a) Si VA > VD/A se investiga la parte superior del rango. La salida del comparador se pone a 1
(VC=1). El 1º MSB (bit más significativo) del RAS no se modifica. El 2º MSB pasa a 1. El
resto de los bits quedan en 0. El RAS almacena (110...0).
b) Si VA < VD/A se investiga la parte inferior del rango. La salida del comparador se pone a 0
(VC=0). El 1º MSB del RAS se pone a 0. El 2º MSB pasa a 1. El resto de los bits quedan en 0.
El RAS almacena (010...0).
Tanto en un caso como en el otro, se efectúa una nueva conversión D/A y se aplica el mismo criterio
para el 2º MSB y 3º MSB del RAS. El proceso se repite hasta alcanzar el LSB (bit menos
significativo). Si el registro tiene n bits, el proceso se realiza n veces.
El tiempo de conversión es fijo e independiente del valor de VA. Para cada conversión se
necesita un número fijo de impulsos de reloj, que coincide con el número de bits del registro.
Módulo Conversor A/D SDII-8
Resolución
Mínimo incremento necesario en la entrada analógica para producir un cambio en la combinación
binaria de salida.
Se suele expresar con el número de bits de salida del convertidor.
Tiempo de adquisición
Tiempo necesario para cargar el condensador de mantenimiento (CHOLD).
Tiempo de conversión
Tiempo necesario para obtener la salida digital equivalente a la entrada analógica.
Orden de (ns) para los convertidores de gran velocidad como los flash.
Orden de (μs) para los de mediana velocidad como los de aproximaciones sucesivas
Orden de (ms) para los de velocidad baja como los de rampa doble.
Depende muchas veces de la tensión analógica de entrada.
Módulo Conversor A/D SDII-9
Convertidor
Timer0 Timer1 Timer2 A/D Comparador La configuración del
de 10 bits
convertidor A/D se realiza
mediante la carga de ciertos
Memoria de
Módulos
SSP Referencia registros presentes en RAM
Datos Puerto serie USART de
CCP1,2
EEPROM síncrono voltaje
Módulo Conversor A/D SDII-10
ADRESL
100
(8 bits)
(tensión (tensión
AN4/RA5 analógica) analógica
CHOLD
101 muestreada)
conversión A/D
AN5/RE0
110
AN6/RE1
10 bits
111
AN7/RE2
OSC Reloj
DIVISOR
ADRESH
CHS2:CHS0
(8 bits)
TRIS A VDD
(Selección canal)
ADCS2:ADCS0
VREF+
PORTA
TRIS E PCFG3:PCFG0 (Configuración entradas)
PORTE VREF-
VSS
Módulo Conversor A/D SDII-11
Puede seguir funcionando cuando el PIC está en modo SLEEP ya que dispone de
un oscilador RC interno propio
• Este módulo puede tener hasta ocho entradas analógicas, que están disponibles como
funciones alternativas de los terminales de los puertos paralelos. El número de entradas
analógicas o canales de entrada depende del PIC en particular. Por ejemplo, el PIC16F873 tiene 5
entradas analógicas, disponibles en igual número de terminales del puerto paralelo A (RA0/AN0,
RA1/AN1, RA2/AN2/VREF-, RA3/AN3/VREF+ y RA5/AN4). En los PIC que tienen más de cinco
entradas analógicas, PIC16F877, PIC16F877A, que tiene ocho, se utilizan también tres terminales
del puerto E para las entradas analógicas AN5, AN6 y AN7.
La selección del canal se realiza mediante los bits CHS2:CHS0 del registro ADCON0 (que
son las entradas de selección del multiplexor analógico).
• La tensión de referencia para la conversión A/D puede ser la tensión de alimentación del
microcontrolador (VDD y VSS) o una tensión externa que se aplique entre los terminales
AN3/VREF+ y AN2/VREF-.
La selección se hace por software, con los bits PCFG3:PCFG0 del registro ADCON1. En la opción
por defecto (es decir, la que se tiene después de una acción de reset), la tensión de referencia se
toma de la alimentación del microcontrolador.
• Las conversiones A/D se realizan en sincronismo con una señal de reloj. Este reloj se
obtiene o bien del oscilador principal del microcontrolador mediante un divisor programable, o bien
de un oscilador RC interno de frecuencia fija.
En el caso de los PIC16F87xA, con el bit ADCS2 del registro ADCON1 y los bits ADCS1 y
ADCS0 del registro ADCON0 se selecciona la fuente del reloj y se programa el divisor de
frecuencia si la fuente es el oscilador principal del microcontrolador.
Para que el CAD funcione mientras el microcontrolador está en el modo de bajo consumo (sleep),
hay que seleccionar el oscilador RC interno.
• Para iniciar una conversión A/D hay que activar el bit de control GO. Cuando ha terminado
la conversión, se activa el bit de estado DONE#. En realidad, GO y DONE# están realizados en
un mismo bit: el bit GO/DONE# del registro ADCON0. El programador debe poner a 1 este bit para
iniciar una conversión A/D y cuando este bit toma el valor 0, el resultado de la conversión está
disponible en ADRESH y ADRESL. Cuando finaliza una conversión A/D, se activa también el
bit ADIF del registro PIR1 para solicitar interrupción. Si el bit ADIE del registro PIE1 está
activo y el sistema de interrupción del microcontrolador está habilitado (el bit GIE del
registro INTON es 1), la solicitud de interrupción se hace efectiva.
Módulo Conversor A/D SDII-14
• El resultado de una conversión A/D (10 bits) se deposita para ser leído en los registros
ADRESH y ADRESL, en un formato que se especifica con el bit ADFM del registro ADCON1.
- Si ADFM = 0 resultado justificado a la izquierda en ADRESH quedan los 8 bits más
significativos de la conversión.
Este caso es el apropiado para hacer operar al CAD como un convertidor de 8 bits con el
resultado de la conversión en el registro ADRESH.
- Si ADFM = 1 resultado justificado a la derecha en ADRESL quedan los 8 bits menos
significativos de la conversión.
ADFM = 0 ADFM = 1
Resultado 10 bits
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0
1111111101b = 3FDh
1111111100b = 3FCh
El valor a
fondo de
escala no se
0000000100b = 004h alcanza
0000000011b = 003h
0000000010b = 002h
0000000001b = 001h
VREF- VREF+
0000000000b = 000h
Tensión
1024 LSb
1021 LSb
1022 LSb
1023 LSb
1 LSb
2 LSb
3 LSb
4 LSb
entrada
analógica
Módulo Conversor A/D SDII-16
bit 7-6 ADCS1:ADCS0: Selección del reloj para bit 5-3 CHS2:CHS0:
la conversión A/D junto con ADCS2 que está Selección del canal de conversión
en ADCON1 000 = Canal 0 100 = Canal 4
001 = Canal 1 101 = Canal 5
Frecuencia del reloj del 010 = Canal 2 110 = Canal 6
Fuente convertidor A/D
ADCS1:ADCS0
de reloj 011 = Canal 3 111 = Canal 7
ADCS2 = 0 ADCS2 = 1
Oscilador
00 Fosc/2 Fosc/4 bit 2 GO/DONE#:
principal
Oscilador Estado de la conversión
01 Fosc/8 Fosc/16 Si ADON=1:
principal
Oscilador 1 = Conversión en progreso
10 Fosc/32 Fosc/64
principal 0 = Conversión finalizada
Oscilador 167 KHz 167 KHz
11 RC a a
interno 500 KHz bit 0 ADON:
500 KHz
Bit de encendido del convertidor A/D
1 = Módulo A/D encendido
0 = Módulo A/D apagado
Módulo Conversor A/D SDII-17
b) REGISTRO ADCON1
bit 7 ADFM: Selección de formato del bit 3-0 PCFG3:PCFG0: Configuración de las
resultado entradas al módulo A/D
1 = Ajuste a la derecha PCFG3
0 = Ajuste a la izquierda AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
: VREF+ VREF-
RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
PCFG0
ADFM = 0 ADFM = 1 0000 A A A A A A A A VDD VSS
Resultado 10 bits 0001 A A A A VREF+ A A A RA3 VSS
0010 D D D A A A A A VDD VSS
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0011 D D D A VREF+ A A A RA3 VSS
0 0 0 0 0 0 0 0 0 0 0 0 0100 D D D D A D A A VDD VSS
0101 D D D D VREF+ D A A RA3 VSS
ADRESH ADRESL ADRESH ADRESL
011x D D D D D D D D - -
1000 A A A A VREF+ VREF- A A RA3 RA2
Resultado 10 bits Resultado 10 bits
1001 D D A A A A A A VDD VSS
1010 D D A A VREF+ A A A RA3 VSS
1011 D D A A VREF+ VREF- A A RA3 RA2
bit 6 ADCS2: Selección de reloj para
1100 D D D A VREF+ VREF- A A RA3 RA2
conversión A/D junto con ADCS1 y
1101 D D D D VREF+ VREF- A A RA3 RA2
ADCS0 de ADCON0 1110 D D D D D D D A VDD VSS
1111 D D D D VREF+ VREF- D A RA3 RA2
D: digital y A; analógica
Módulo Conversor A/D SDII-18
EJEMPLO:
Configuración para conversión de la tensión analógica presente en el canal 3 (RA3/AN3) y
reloj TAD a partir del oscilador RC interno y con formato ajustado a la derecha. Caso de un
PIC16F877A
bit 7 bit 6 REGISTRO ADCON1 (Dirección 9Fh) bit 0
ADFM 1 -
ADCS2 0 - - PCFG3 0 PCFG2 0 PCFG1 1 PCFG0 0
bit 7 ADFM: Selección de formato del resultado bit 3-0 PCFG3:PCFG0: Configuración de las
1 = Ajuste a la derecha entradas al módulo A/D
0 = Ajuste a la izquierda
PCFG3: AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
PCFG0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
0000 A A A A A A A A
0001 A A A A VREF+ A A A
ADFM = 0 ADFM = 1
Resultado 10 bits 0010 D D D A A A A A
0011 D D D A VREF+ A A A
0100 D D D D A D A A
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0
0101 D D D D VREF+ D A A
011x D D D D D D D D
ADRESH ADRESL ADRESH ADRESL 1000 A A A A VREF+ VREF- A A
1001 D D A A A A A A
Resultado 10 bits Resultado 10 bits 1010 D D A A VREF+ A A A
1011 D D A A VREF+ VREF- A A
1 1 0 1 1 0 1
• En los PIC de la gama media, el condensador de retención tarda en cargarse un tiempo que es el
tiempo de adquisición (TACQ). Una vez transcurrido este tiempo puede comenzar la conversión
en el convertidor A/D de 10 bits, que dura un tiempo TCONV (tiempo de conversión).
TAD TACQ : tiempo de adquisición.
TACQ TCONV TAD: tiempo de conversión de un bit
en el convertidor A/D.
Tiempo TCONV: tiempo de conversión A/D de
un dato
TDIG
TDIG: tiempo de digitalización.
• La suma de los tiempos de adquisición y conversión constituye el tiempo de digitalización (TDIG)
de la señal analógica,
TDIG = TACQ + TCONV
• Si una señal analógica se digitaliza periódicamente con un periodo Ts, denominado periodo de
muestreo, la frecuencia de muestreo es Fs = 1/Ts.
Ts debe ser mayor o igual que la duración del proceso de digitalización.
1
En los PIC16F87xA Ts TDIG Fs
TDIG
Módulo Conversor A/D SDII-21
b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Comienza la conversión
Se abre SS (típ. 100ns) Se carga ADRES
Se pone GO/DONE# a “0”
1 GO/DONE#
Se levanta el flag ADIF
CHOLD conectado a entrada analógica
• Para TAD = 1,6 µs, el tiempo de conversión A/D de 10 bits es TCONV = 19,2 µs
• El valor de TAD es igual al periodo del reloj del convertidor A/D. Como el reloj de convertidor
A/D se puede obtener del oscilador principal del microcontrolador, el valor de la frecuencia de este
oscilador debe establecerse de modo que se cumpla la condición TAD > 1,6 µs.
Módulo Conversor A/D SDII-23
• Valor (máximo) que debe tener la frecuencia (Fosc) del oscilador principal del
microcontrolador para que el tiempo de conversión (mínimo) por bit (TAD) sea de 1,6 µs, en
las diferentes configuraciones.
Frecuencia del
Fuente de Fosc
ADCS2:ADCS1:ADCS0 reloj del TAD Fosc
reloj
convertidor A/D (para TAD 1,6 µs)
Oscilador
000 Fosc / 2 2 / Fosc 2 / TAD 1,25 MHz
principal
Oscilador
100 Fosc / 4 4 / Fosc 4 / TAD 2,5 MHz
principal
Oscilador
001 Fosc / 8 8 / Fosc 8 / TAD 5 MHz
principal
Oscilador
101 Fosc / 16 16 / Fosc 16 / TAD 10 MHz
principal
Oscilador
010 Fosc / 32 32 / Fosc 32 / TAD 20 MHz
principal
Oscilador
110 Fosc / 64 64 / Fosc 64 / TAD 40 MHz
principal
Oscilador 167 KHz 2 µs a 6 µs
x11 a -
RC interno 500 KHz (Típico 4 µs)
Módulo Conversor A/D SDII-24
Va
(tensión
analógica) Vcondensador
CONDICIÓN A CUMPLIR:
Tiempo
T muestreo > T conversión + T adquisición
Tiempo Tiempo
conversión adquisición
Módulo Conversor A/D SDII-25
4. Comenzar la conversión.
• Poner a “1” el bit GO/DONE#. (ADCON0)
No activar este bit a la vez que se enciende el convertidor A/D
Un RESET del dispositivo provoca que los registros del módulo A/D se inicialicen a los
valores indicados en la tabla. Por tanto, un RESET provoca que el módulo A/D se apague y
que cualquier conversión que se estuviera realizando cuando se produce el RESET se aborte.
Todos los pines asociados al módulo A/D pasan a ser entradas analógicas. Los valores
acumulados en ADRESH:ADRESL no se modifican por un Power-On-Reset. El valor que
contendrán los registros ADRESH:ADRESL tras un POR serán desconocidos inicialmente.
Value on
Value on:
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 MCLR
POR, BOR
WDT
0Bh. 8Bh
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Bh, 18Bh
0Ch PIR1 PSPIP(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
1Eh ADRESH A/D Result Register High Byte xxxx xxxx uuuu uuuu
9Eh ADRESL A/D Result Register High Byte xxxx xxxx uuuu uuuu
1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE - ADON 0000 00-0 0000 00-0
9Fh ADCON1 ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0 --0- 0000 --0- 0000
-
85h TRISA - PORTA Data Direction Register --11 1111 --11 1111
-
05h PORTA - PORTA Data Latch when writen. PORTA pins when read --0x 0000 --0u 0000
89h(1) TRISE IBF OBF IBOV PSPMODE - PORTE Data Direction bits 0000 -111 0000 -111
-
09h(1) PORTE - - - - RE2 RE1 RE0 ---- -xxx ---- -uuu
Legend: x = unknown. u = unchanged. - = unimplemented locations read as ‘0’. Shaded cells are not used
Módulo Conversor A/D SDII-28
• Si se elige como reloj el RC, el módulo A/D espera 1 ciclo de instrucción antes de
iniciar la conversión. Esto permitiría la ejecución de la instrucción SLEEP que se
coloque a continuación, esto eliminaría todo posible ruido de conmutación (debido
al paso de normal a dormido) durante la conversión.
9.3.9.- EJEMPLOS
Ejemplo sencillo de uso del modulo A/D (1 solo canal e interrupciones)
; Este es un programa ejemplo de uso del conversor A/D en un PIC16F877A, donde se usa
; un solo canal (CH0) y se usan interrupciones
; El conversor A/D se configura como sigue:
; Vref = +5V interna.
; A/D Osc. = RC interna
; Canal A/D = CH0
; Se puede usar como Hardware para probar este ejemplo la tarjeta PICDEM 2.
; El programa convierte el valor del potenciómetro conectado a RA0 en 10 bits, de los
; que los 8 bits más significativos se muestran en los leds conectados al PORTB.
list p=16F877A
include <[Link]>
TEMP equ 20h ; Variable de almacenamiento temporal.
;----------------------------------------------------------------------------------
; Subrutina para inicializar (configurar) el modulo A/D:
; Selecciona RA0, RA1 y RA3 como entradas analógicas. Tensiones VDD y VSS.
; Selecciona el resultado justificado a la izquierda.
; Selecciona el canal CH0.
; Selecciona el reloj RC.
;----------------------------------------------------------------------------------
IniciarCAD bsf STATUS,RP0 ; Selecciono Banco 1.
movlw B'00000100‘ ; RA0,RA1,RA3 entradas analógicas,
movwf ADCON1 ; justificado a la izquierda el resultado
; con los 8 bits más significativos en ADRESH.
bsf PIE1,ADIE ; Habilitamos interrupciones A/D.
bcf STATUS,RP0 ; Selecciono Banco 0.
movlw b’11000001’ ; Oscilador RC, Entrada analógica CH0,
movwf ADCON0 ; Modulo A/D en funcionamiento.
bcf PIR1,ADIF ; Limpio flag interrupción.
bsf INTCON,PEIE ; Habilito interrupciones de periféricos.
bsf INTCON,GIE ; Habilito interrupciones globales.
return
;----------------------------------------------------------------------------------------
; Subrutina de retardo para TACQ
; Esta rutina es un retardo software de más de 10us si se usa un oscilador de 4MHz.
; Se usa para asegurar un tiempo de adquisición de más de 20 us mediante una doble llamada
; antes de lanzar una nueva conversión.
;------------------------------------------------------------------------------------------
RetardoTACQ movlw 3 ; Carga Temp con 3
movwf TEMP
SD decfsz TEMP,F ; Bucle de retardo
goto SD
return
Módulo Conversor A/D SDII-32
;--------------------------------------------------------------------------------
; Rutina de atención a la interrupción del A/D:
; Mostrar el valor en los leds del PORTB
;--------------------------------------------------------------------------------
RAI btfss PIR1,ADIF ; ¿Interrupción del modulo A/D?
retfie ; Si no interrupción de A/D, retornamos.
movf ADRESH,W ; Cojo los 8 bits altos de la conversión y
movwf PORTB ; los muestro en los LEDS del PORTB.
bcf PIR1,ADIF ; Desactivo el flag (Reseteo el flag).
call RetardoTACQ ; Retardo de adquisición
call RetardoTACQ ; mayor de 20 us (2TDA)
bsf ADCON0,GO ; Lanzar una nueva conversión.
retfie ; Retorno y habilito GIE.
END
Módulo Conversor A/D SDII-33
ORG 0x10
INICIO bsf STATUS,RP0 ; Selección Banco 1.
movlw 0FFh
movwf TRISA ; Configuro los terminales del PORTA como entradas (W=FFh).
movlw b'10000000‘ ; Definimos todos los pines como analógicos,
movwf ADCON1 ; referencia de VDD = 5V
; y resultado ajustado a la derecha
; 8 bits menos significativos en ADRESL
; 2 bits más significativos en ADRESH.
bcf STATUS,RP0 ; Selección Banco 0.
movlw b'10000001‘ ; Oscilador: TAD=32*Tosc= 4us > 1,6us,
; sin iniciar conversión, A/D encendido
movwf ADCON0 ; y selección inicial en RA<0> (canal CH0).
movlw PTablaAD ; colocamos el puntero del dir. indirecto (FSR)
movwf FSR ; apuntando a la primera posición de la tabla.
Módulo Conversor A/D SDII-34
;----------------------------------------------------------------
; Subrutina de retardo
; Temporización del tiempo de adquisición
;----------------------------------------------------------------
RetardoADQ movlw 8 ; bucle del tiempo de adquisición (con 9 sale 20,5 useg)
movwf TEMP ; 18,5 useg incluyendo call y return
adq nop ; 1 ciclo
decfsz TEMP,F ; decremento y comparación con cero
goto adq ; si no hemos llegado a cero, repetimos
return ; si ya llegamos a cero, retornamos
END