Problema proyecto simple conversor a/d

Buenas, estos dias estoy intentando hacer un proyecto sencillo para clase con un pic16f88, lo unico que hace es comparar los valores recogidos con una LDR y encender una luz o otra en funcion de la luminosidad que perciba en cada momento.
He simulado con proteus, y todo va perfecto, compilo.. quemo el pic.. y este no responde.. no hace nada al montarlo..
incluso añadi al principio del programa un par de instruciones para que encendiese las luces durante unos segundos para probar si el fallo era de la conversion A/D, pero nada.. no funciona..

Estoy empezando a desesperarme.. :( no se que estare haciendo mal..

si alguien podria echarme una mano, os lo agradeceria un monton.

aqui adjunto el programa.

Gracias.



list p=16f88
#include "p16f88.inc"

__config _config1,(3f10) ;palabra de configuracion

reg1 equ 0x20
reg2 equ 0x21
reg3 equ 0x22
reg4 equ 0x23
ldrmem1 equ 0x24
ldrmem2 equ 0x25
valormax equ 0x26
valormin equ 0x27

org 0
banksel ansel ;seleccionamos bank1
movlw b'11100000'
movwf ansel ;ra0 ra1 ra2 analog las demas digital
movlw b'00000000'
movwf trisb ; puerto b salida digital entero
movwf b'11100100'
movlw trisa ;selecion de entradas
banksel porta ;volver a bank0
clrf porta ;limpiamos bancos
clrf portb ;limpiamos bancos
;movwf adcon1
bsf porta,6
bsf porta,7
bsf portb,0xff
call retardo1s
call retardo1s
clrf porta
clrf portb

inicio

clrf porta
clrf portb
movlw b'11101010' ;valor para encender luz
movwf valormax
movlw b'10000010' ;valor para encender led
movwf valormin
movfw ldrmem1 ;resta el valor fijo del valor obtenido para compararlos, si dan 0 son iguales
subwf valormax
movwf ldrmem1
btfss ldrmem1,b'11000000' ;ni puta idea de como me a funcionado.... por fin!
call encenderluz
movfw ldrmem2
subwf valormin
movwf ldrmem2
btfsc ldrmem2,0xff ;comprueva si los bits de la resta an dado 0 y por tanto son iguales, si es asi, realiza la siguiente instrucion sin saltarsela.
call encenderled
goto ldr


encenderled
bsf porta,6
return

encenderluz
bsf porta,7
return



;****ldr*** en patilla 0 habilitada por defecto

ldr
movlw 1 ;enciende el conversor a/d
movwf adcon0
call retardo767 ;llama al retardo de 767 microsegundos

rep1
bsf adcon0,2 ;inicia la conversion

pregunta
btfsc adcon0,2 ;pregunta si termino de convertir
goto pregunta ;vuelve a preguntar si no ha terminado
movf adresh,w ;pasa el resultado a la emmoria bit mas isgnificativo)
movwf ldrmem1
movwf ldrmem2
bsf status,5
bcf status,5
goto inicio ;comienza de nuevo la conversion****






retardo767 ;retardo 767 microsegundos
movlw .255
movwf reg4
rep4
decfsz reg4,f
goto rep4
return


retd ;retardo de 100 milisegundos
movlw 2
movwf reg1
rep6
movlw 84h
movwf reg2
rep2
movlw 0ffh
movwf reg3
rep7
decfsz reg3,f
goto rep7
decfsz reg1,f
goto rep6
return

retardo1s ;retardo de 1seg
movlw .10
movwf reg1
rep13
movlw .132
movwf reg2
rep12
movlw .255
movwf reg3
rep11
decfsz reg3,f
goto rep11

decfsz reg2,f
goto rep12
decfsz reg1,f
goto rep13
return

end
 
puedes subir el esquematico a mi me paso lo mismo con un pic 16F877A lo simulaba en proteus y bien pero cuando lo montaba no andaba el problema era una configuracion de programacion del programa :

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

o tambien que no habia ubicado una resistencia de 10k entre MCRL y vdd( 5 VDC)
 
Asegurate al momento de quemarlo de escojer bien el tipo de oscilador, XP, LP, HC o RC, desactivar el watch dog timer, LVP, BODEN, MCLRE, y las demas opciones de configuracion.
 
la palabra de configuracion que utulizo es (3f10) osea que se supone que esta todo desactivado, y utiliza el oscilador interno...
sigo sin saber que estoy aciendo mal... :(
 
Atrás
Arriba