Estoy intentando hacer un termostato con un pic16f88 y un lm35, cuando lo simulo en proteus me tira error en el TAD, la pata que uso para tomar el voltaje analogico es la RA3, por ahora solo estoy intentando realizar la conversion y poder leer los datos, solo necesitaria ayuda con el ADC y del resto me encargaría yo, muchas gracias
;=============================este es mi código===============================
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created: mar mar 17 2015
; Processor: PIC16F88
; Compiler: MPASM (MPLAB)
;====================================================================
;====================================================================
; DEFINITIONS
;====================================================================
#include p16f88.inc
; Include register definition file
__CONFIG _CONFIG1, _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _MCLR_OFF& _LVP_OFF & _INTRC_IO
;====================================================================
; VARIABLES
;====================================================================
cblock H'70'
TEMPE
GRADOS
UNIDADES
DECENAS
CENTENAS
CounterA
CounterB
CounterC
endc
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
ORG 0x00
goto Start
;====================================================================
; CODE SEGMENT
;====================================================================
PGM code
Start
;---------------------puertos--------------------------------------------------
bsf STATUS, RP0
movlw b'11111111'
movwf TRISA
MOVLW B'00000000'
MOVWF TRISB ;configure entradas y salidas
movlw 0x60
movwf OSCCON ;reloj interno 4mhz
MOVLW B'00001000'
MOVWF ANSEL ;entrada analogica ra3
;-----------------------a/d----------------------------------------------------
MOVLW B'10000000'
MOVWF ADCON1 ;SIN DIVISOR DE FRECUENCIA
BANKSEL ADCON0
MOVLW B'11011001'
MOVWF ADCON0
;------------------------PROGRAMA---------------------------------------------
INICIO
;BANKSEL ADCON0
CALL DELAY
BSF ADCON0,2 ;COMENZE LA CONVERSIÓN ;ESPERO LA CONVERSIÓN
BTFSS ADCON0,2 ;PREGUNTO SI TERMINÓ
CALL CUENTA ;SI TERMINÓ VOY A CUENTA
CALL MUESTRA
GOTO INICIO
CUENTA
CALL DELAY
CLRF UNIDADES
CLRF CENTENAS
CLRF DECENAS
MOVF ADRESH,W
ADDWF ADRESH,W ;DUPLICO EL VALOR PARA OBTENER GRADOS
MOVWF TEMPE
CENTENAS1 movlw d'100' ;W=d'100'
subwf TEMPE,W ;Resto - d'100' (W)
btfss STATUS,C ;Resto menor que d'100'?
goto DECENAS1 ;SI
movwf TEMPE ;NO, Salva el resto
incf CENTENAS,1 ;Incrementa el contador de centenas BCD
goto CENTENAS1 ;Realiza otra resta
DECENAS1
movlw d'10' ;W=d'10'
subwf TEMPE,W ;Resto - d'10' (W)
btfss STATUS,C ;Resto menor que d'10'?
goto UNIDADES1 ;Si
movwf TEMPE ;No, Salva el resto
incf DECENAS,1 ;Incrementa el contador de centenas BCD
goto DECENAS1 ;Realiza otra resta
UNIDADES1
movf TEMPE,W ;El resto son la Unidades BCD
movwf UNIDADES
clrf TEMPE
RETURN
;OBTEN_ASCII ;Rutina que obtiene el equivalente en ASCII
; movlw h'30'
; iorwf UNIDADES,f
; iorwf DECENAS,f
; iorwf CENTENAS,f
; return
MUESTRA
MOVF UNIDADES,PORTB
RETURN
DELAY
movlw D'102'
movwf CounterC
movlw D'118'
movwf CounterB
movlw D'192'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
decfsz CounterC,1
goto loop
retlw 0
END