Hola
Gracias por la ayuda prestada en mi anterior duda, ahora tengo problemas con el convertidor A/D del pic16f819.
Estoy trabajando en la creación de un programa cargador de baterias NiMH, el cual necesita testear voltaje y corriente de carga, para esto utilizo el A/D.
Tengo escrito el programa en código fuente pero al probarlo en mplabsim se queda pegado en el bucle convlista que aun no entiendo por que.
Al cargar el código al pic, no hace lo esperado, que seria encender un led verde si la tensión de entada es mayor a 0,1 volt y un led rojo sino.
Cualquier ayuda me seria de gran utilidad, acontinuación el programa para que lo vean... la conversion se realiza en la subrutina coci convlista.
Gracias
; *********************************************** Definición de Variables ***********************************************
status equ 03h ;registro de estados
porta equ 05h ;puerto A en la dirección 5h de la RAM
portb equ 06h ;puerto B en la dirección 6h de la RAM
trisa equ 85h ;dirección de configuración puerto A
trisb equ 86h ;dirección de configuración puerto B
osccon equ 8fh ;dirección de registro del reloj
adcon1 equ 9fh ;registros de configuración para
adcon0 equ 1fh ;conversor análogo a digital
adresh equ 1eh ;
adresl equ 9eh ;
pir1 equ 0ch ;dirección de registro conversor AD
lazo1 equ 20h ;dirección de configuración registro conta
lazo2 equ 21h ;dirección de configuración registro lazo1
sumah equ 22h ;dirección de configuración registro lazo2
sumal equ 23h ;
z equ 02h ;bandera de 0 del registro de estados
go equ 02h ;bandera de 0 del registro de estados
adif equ 06h ;bandera de 0 del registro de estados
dc equ 01h ;bandera de 0 del registro de estados
; *********************************************** Inicio de Programa ***************************************************
reset org 00h ;el vector reset esta en la posicion 00
goto inicio ;se salta al programa principal
;
org 05h ;el programa empieza en la posicion de memoria 0
;
inicio bsf status,5 ;se ubica en banco 1 de memoria RAM
movlw b'1100000' ;se guarda en W el valor a usar del reloj en binario 110
movwf osccon ;se configura el reloj interno a 4Mhz
bcf status,5 ;regresa al primer banco de memoria RAM limpiando
goto principal ;
; *********************************************** Subrutinas de Programa ***********************************************
coci bsf status,5 ;
movlw b'10000000' ;
movwf adcon1 ;
movlw b'11111110' ;
movwf trisa ;
bcf status,5 ;
movlw b'10000001' ;
movwf adcon0 ;
clrf sumah ;
clrf sumal ;
call retardo ;
bcf pir1,adif ;
bsf adcon0,go ;
convlista btfss pir1,adif ;
goto convlista ;regresa si adif distinto de 1
bsf status,5 ;
movf adresl,w ;
bcf status,5 ;
addwf sumal,1 ;
movf adresh,w ;
addwf sumal,1 ;
retlw 00h ;
retardo movlw d'5' ;registro W contiene 5 decimal
movwf lazo1 ;registro lazo1 contiene cantidad de milisegundos
ciclo1 movlw d'110' ;registro W contiene 110 decimal
movwf lazo2 ;carga numero de milisegundos en lazo2
ciclo2 nop
nop
nop
nop
nop
nop
decfsz lazo2,1 ;pregunta si termino 50 ms
goto ciclo2
decfsz lazo1,1 ;pregunta si termino el retardo
goto ciclo1
retlw 00h ;salta instruccion despues de call
ledcoci bsf status,5 ;
movlw b'10111111' ;
movwf trisa ;
bcf status,5 ;
movlw b'01000000' ;
movwf porta ;
goto principal ;
led bsf status,5 ;
movlw b'01111111' ;
movwf trisa ;
bcf status,5 ;
movlw b'10000000' ;
movwf porta ;
goto principal ;
; *********************************************** Programa Principal ***************************************************
principal call coci ;llama subrutina coci
movlw b'00010101' ;
subwf sumal,0 ;
btfsc sumal,dc ;
goto ledcoci ;
call led ;
end