Un saludo a todos, es la primera ves que voy a publicar un articulo, espero que sirva
voy hablar del módulo A-D del pic16f877 debido a que visto muchas preguntas hacerca de esté módulo
Resumiendo el módulo tiene un registros de trabajo que es adcon0, donde se configura el canal, la habilitación del módulo y además se pregunta cuando ha terminado de convertir, el otro que es muy importante es el adcon1, esté registro sirve para configurar los terminales destinados a las señales análogas y seleccionar en que registro se va grabar la conversión una vez terminada (bit 7 (admf) creo) los registros son adresh y adresl
Bueno compañeros voy a poner un código en el ensamblador espero que sea útil si alguien me puede decir como adjuntar archivos estaría muy agradecido ya que me quedo grande.
; Conversión A/D a 8 bits, el resultado del registro ADRESH se muestra en los LEDs
; ******** DEFINICION DE REGISTROS UTILIZADOS
pcl equ 02h
status equ 03
ptoa equ 05
ptob equ 06
ptoc equ 07
ptod equ 08
ptoe equ 09
pclath equ 0ah
intcon equ 0bh
pir1 equ 0ch
rcsta equ 18h
txreg equ 19h
rcreg equ 1ah
adresh equ 1eh
adcon0 equ 1fh
trisa equ 85h
trisb equ 86h
trisc equ 87h
trisd equ 88h
trise equ 89h
txsta equ 98h
spbrg equ 99h
adresl equ 9eh
adcon1 equ 9fh
;Definición de bits utilizados
rp0 equ 5
rp1 equ 6
irp equ 7
z equ 2
c equ 0
txif equ 4
go equ 2
;Variables del usuario
loops equ 30h
loops2 equ 31h
buffer equ 32h
contador equ 43h
; ************ Configuración para el simulador Proteus
list p=16f877
_CP_ALL EQU H'0FCF'
_CP_HALF EQU H'1FDF'
_CP_UPPER_256 EQU H'2FEF'
_CP_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_DEBUG_OFF EQU H'3FFF'
_WRT_ENABLE_ON EQU H'3FFF'
_WRT_ENABLE_OFF EQU H'3DFF'
_CPD_ON EQU H'3EFF'
_CPD_OFF EQU H'3FFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
; ***** EMPIEZA EL PROGRAMA
org 00
goto inicio
;subrutina de retardo en milisegundos
retarms movwf loops
top2 movlw d'110' ;el numero de milisegundos llega
movwf loops2 ;cargado en el registro loops
top nop
nop
nop
nop
nop
nop
decfsz loops2,1 ;pregunta si termino 1 ms
goto top
decfsz loops,1 ;pregunta si termina el retardo
goto top2
return
;Rutina de conversión A/D a 8 bits
conver nop
nop ;estas instrucciones nop sirven para
nop ;darle al micro el tiempo de adquisición
nop ;requerido. En este caso es de 7 us aprox.
nop
nop
nop
nop
bsf adcon0,go ;inicia conversión
nop
nop
consu btfsc adcon0,go ;espera que termine de convertir el dato
goto consu
movf adresh,0 ;guarda resultado de 8 bits en W y en buffer
movwf buffer
return
; ************ PROGRAMA PRINCIPAL ***************
inicio clrf status ;poner status en cero para asegurar banco 0
bsf status,rp0 ;pasar al banco 1
movlw b'11111111'
movwf trisa ;puerto A entradas
movlw b'00000000'
movwf trisb ;puerto B salidas
movlw b'11111111'
movwf trisc ;puerto C entradas
movlw b'11111111'
movwf trisd ;puerto D entradas
movlw b'11111111'
movwf trise ;puerto E entradas
movlw b'00000010' ;selecciono Vref internos (+5 y GND) y 5 canales del puerto A análogos
movwf adcon1 ;el resultado de la conversión queda en ADRESH y 2 bits en ADRESL
bcf status,rp0 ;pasar al banco 0
movlw b'10000001' ;selecciona canal análogo 0, reloj de conv. fosc/32
movwf adcon0 ;convertidor encendido
call conver ;llama rutina de conversión A/D
movf buffer,0 ;el resultado binario de la conversión llega en registro buffer y pasa a W
movwf ptob ;entrega por el puerto B el dato binario de la conversión
movlw d'250' ;retardo entre conversiones de 4 caracteres
call retarms ;este retardo equivale a 250 milisegundos
;el usuario puede escoger el tiempo que desee
goto inicio ;Vuelve a empezar el ciclo para hacer otra conversión
end
chau