hala a todos mi nombre es juan carlos estoy tratando de realizar la convercion analoga digital y convertirla luego a bcd para visualizar los datos por el hiperterminal del pc pero no me funciona y no encuentro el error si alguen puede ayudarme se lo agradeceria porfa es urgente muchas gracias a todos
aqui les dejo el codigo que he realizado hasta el momento
;********************************************************
processor 16F873a
LIST P=16F873a ;Se indica el modo de procesador
INCLUDE <P16f873a.inc> ;se incluye la definicion de los
;registros internos
__config 3D31
ERRORLEVEL -306, -302 ;QUITAMOS LOS ERRORES DE BANCO EN MPLAB
Contador equ 0x22 ; registro utilizado en demora.-
ASCII_H EQU 0x23
ASCII_M EQU 0x24
ASCII_L EQU 0x25
HEXADECIMAL EQU 0x26
;----------------------------------------------------------------------------
org 0x00 ;vector de inicio
goto INICIO
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
;----------------------------------------------------------------------------
INICIO bcf STATUS,RP0 ;banco 0
bcf STATUS,RP1
clrf PORTA
bsf STATUS,RP0 ;banco 1
clrf TRISB ;portb como salida
clrf TRISC
bcf STATUS,RP0 ;banco 0
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
;confuguracion del puerto serial
bsf STATUS,RP0 ;Cambio al banco 1 -------------
bcf STATUS,RP1
bsf TRISC,6 ;RC6/Tx como salida
bsf TRISC,7
movlw b'00100100' ;Configuracion USART
movwf TXSTA ;y activacion de transmision
movlw .25 ;9600 baudios
movwf SPBRG
bcf STATUS,RP0 ;Cambio al banco 0 -------------
bsf RCSTA,SPEN ;se activa la USART
bsf STATUS,RP0 ;Cambio al banco 1 -------------
bcf STATUS,RP1
bsf TXSTA,TXEN ;Habilita la transmision
bcf STATUS,RP0 ;Cambio al banco 0 -------------
;===========================================================================
; Inicio de conversion de valores analogicos
;===========================================================================
;---------------------Configuracion CONVERTIDOR A/D-------------------------
CFGADC
bsf STATUS,RP0 ;Banco 1
bcf STATUS,RP1
movlw b'00000011' ;seleccion tipo puertos A/D
movwf ADCON1
movlw b'11111111'
movwf TRISA ;PORTA como entrada
bsf STATUS,RP0 ; Pasar a RAM BANK #1
movlw B'10001110' ; RA0 analog inputs(EL RESTO RAx SERAN SEÑALES I/O DIGITALES)
movwf ADCON1
; FIN de configuracion de registros
;*****************************************************************************
RUN_ADC bcf STATUS,RP0 ;Banco 0
bcf STATUS,RP1 ;Banco 0
movlw b'01000001' ;repone a cero para que iorlw pueda
movwf ADCON0
nop
nop
GO_ADC
call Demora_20us ; Demora de adquision.-
bsf ADCON0,GO_DONE ;Inicio conversion
wait_ADC
btfsc ADCON0,GO_DONE ; Espera a que termine conversion.- ;espera a que finalice la conversion
goto wait_ADC ;bucle
movf ADRESH,W
Hex_Ascii ;cargar en W el dato hex.
movwf HEXADECIMAL
clrf ASCII_H ;Para BCD D'0'
clrf ASCII_M ;Para BCD D'0'
clrf ASCII_L ;Para BCD D'0'
Centenas
movlw D'100' ;D'100' --> W
subwf HEXADECIMAL,W ;HEXADECIMAL - D'100' --> W
btfss STATUS,C ;¿ HEXADECIMAL es menor que D'100' ?
goto Decenas ;Si
movwf HEXADECIMAL ;Salva el resto
incf ASCII_H,F ;Incrementa el contador de centenas BCD
goto Centenas ;Vuelve por otros D'100'
Decenas
movlw D'10' ;D'10' --> W
subwf HEXADECIMAL,W ;HEXADECIMAL - D'10' --> W
btfss STATUS,C ;¿ HEXADECIMAL es menor que D'10' ?
goto Unidades ;Si
movwf HEXADECIMAL ;Salva el resto
incf ASCII_M,F ;Incrementa el contador de decenas BCD
goto Decenas ;Vuelve por otros D'10'
Unidades
movf HEXADECIMAL,W ;El resto pertenece
movwf ASCII_L ;a las unidades BCD
clrf HEXADECIMAL ;Pone a cero el registro HEXADECIMAL
;()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
;*******************************************************************************
;***************************************************************************
; Subprograma de envio de un byte por el puerto serie
; se envía el byte que llega cargado en W
;***************************************************************************
ENVIAR
bcf STATUS,RP0 ;pasamos al banco 1
movwf TXREG ;Se carga en TXREG el byte que inicia el envío
nop
bsf STATUS,RP0 ;pasamos al banco 1
LAZO1 btfss TXSTA,TRMT ;para poder explorar TXSTA y esperamos a que se transmita
goto LAZO1 ;mientras TRMT permanezca a 0 seguimos esperando
bcf STATUS,RP0 ;en cuanto TRMT=1 se acabó el envío y volvemos al banco o
goto GO_ADC ;Retornamos del subprograma
;**********************************************************************************************
Demora_20us
movlw 0x05 ;
movwf Contador ; Iniciamos contador1.-
Repeticion
decfsz Contador,1 ; Decrementa Contador1.-
goto Repeticion ; Si no es cero repetimos ciclo.-
return
end