;*********************************************************************************************** ; PROGRAMA DE PRUEBA DEL CONV A/D DE UN PIC PARA LAS TARJETAS DE PUNTO FLOTANTE, S.A. ; UTILIZANDO EL PIC16F88 COMO MICROCONTROLADOR ;*********************************************************************************************** LIST P=16f88 ;MICROCONTROLADOR A USAR INCLUDE ;LLAMADA A CABECERA ;*********************************************************************************************** CBLOCK 0x20 ENDC ;*********************************************************************************************** ORG 0 ;INICIO DEL PROGRAMA EN LA PRIMERA LOCACIÓN DE MEMORIA CLRF PCLATH GOTO INICIO ;DIRECCIONAMOS AL "INICIO" DEL BLOQUE DE INSTRUCCIONES ORG 15 INICIO BANKSEL TRISA ;USAMOS LA DIRECTIVA "BANKSEL" SEGUIDA DEL REGISTRO AL QUE QUEREMOS ACCEDER Y EL COMPILADOR ;SELECCIONA AUTOMÁTICAMENTE EL BANCO DE MEMORIA EN EL QUE EL REGISTRO SE ENCUENTRA. MOVLW 0XFF MOVWF TRISA ;PUERTO A COMO ENTRADAS CLRF TRISB ;PUERTO B COMO SALIDAS ;************************************************************************************************* ; REGISTROS IMPORTANTES QUE INTERVIENEN EN EL USO DEL CONV A/D ; ; ANSEL => REGISTRO EN EL QUE SE SELECCIONA EL CANAL DEL CONV A/D CON EL QUE SE VA A TRABAJAR ; BIT7 .- NO IMPLEMENTADO Y SE LEE COMO 0 ; BIT6-0.- DEBEN ESTAR EN "0" PARA QUE LAS ENTRADAS DEL PUERTO SEAN DIGITALES Y EN "1" PARA ANALÓGICAS ; ; ADCON0 => REGISTRO DE CONFIGURACIÓN DEL CONV A/D ; BIT7-6.- ADCS<1:0> ; 00 = Fosc/2 ; 01 = Fosc/8 ; 10 = Fosc/32 ; 11 = FRC (EL RELOJ DE CONVERSIÓN DEL CAD SE TOMA DEL RELOJ RC INTERNO) ; NOTA: ESTE BIT VA LIGADO AL BIT6 (ADCS2) DEL REGISTRO ADCON1 ; ; BIT5-3.- CHS<2:0> ; EL VALOR EN BINARIO DE ESTOS BITS SELECCIONAN EL CANAL DEL CONV A/D A UTILIZAR ; EN CASO DE USAR VARIOS CANALES DURANTE EL PROCESO SE DEBE ACCEDER A ESTOS BITS ; PARA CAMBIAR DE CANAL. ; ; BIT2.- GO_DONE ; '1' .- PONIENDO ESTE BIT EN ESTADO ALTO INICIA LA CONVERSIÓN Y SE MANTIENE ASÍ HASTA QUE EL PROCESO TERMINA ; '0' .- CONVERSIÓN TERMINADA ; NOTA: PONIENDO ESTE BIT A '0' DURANTE LA CONVERSIÓN, EL PROCESO SE ABORTARÁ Y EL RESULTADO SERÁ EL MISMO DE LA ; ÚLTIMA CONVERSIÓN TERMINADA SATISFACTORIAMENTE. ; ; BIT1.- NO IMPLEMENTADO. SE LEE COMO '0' ; ; BIT0.- ADON ; '1' .- CONVERTIDOR A/D ENCENDIDO ; '0' .- CONVERTIDOR A/D APAGADO Y SIN CONSUMIR ENERGÍA ; NOTA: DEBE PONERSE EN '1' ESTE BIT ANTES DE INICIAR LA CONVERSIÓN ; ; ADCON1 => REGISTRO DE CONFIGURACIÓN DEL CONV A/D ; BIT7.- ADFM ; '1' .- RESULTADO DE LA CONVERSIÓN JUSTIFICADO A LA DERECHA. LOS 4 MSB DE ADRESH SE LEEN COMO '0' ; '0' .- RESULTADO DE LA CONVERSIÓN JUSTIFICADO A LA IZQUIERDA. LOS 4 LSB DE ADRESL SE LEEN COMO '0' ; ; BIT6.- ADCS2 ; '1' .- DIVIDE POR 2 LA FRECUENCIA DEL OSC (Fosc) ; '0' .- DESHABILITADO ; ; BIT5-4.- VCFG<1:0> CONFIGURACIÓN DE LOS VOLTAJES DE REFERENCIA DEL CONV A/D SEGÚN LA TABLA: ; ; VALOR VREF+ VREF- ; 00 VDD VSS ; 01 VDD VREF- ; 10 VREF+ VSS ; 11 VREF+ VREF- ; NOTAS: ° SE DEBE CONSULTAR LA HOJA DE DATOS DE MICROCHIP UBICADA EN EL LINK: ; http://ww1.microchip.com/downloads/en/DeviceDoc/30487c.pdf ; PARA CONOCER LOS VALORES MÁXIMOS DE VREF+ Y VREF- ; ° VREF- SE INTRODUCE AL PIC POR RA2 ; ° VREF+ SE INTRODUCE AL PIC POR RA3 ; ° PARA USAR LOS PUERTOS COMO ENTRADA PARA VOLTAJE DE REFERENCIA SE DEBEN CONFIGURAR COMO ENTRADAS ANALÓGICAS ; USANDO LOS REGISTROS TRISA Y ANSEL ; ; BIT3-0.- NO IMPLEMENTADOS. SE LEEN COMO '0' ; ; ADRESH => REGISTRO EN EL QUE SE ALMACENAN LOS 2 MSB PARA RESULTADOS JUSTIFICADOS A LA DERECHA Y 8 SI ES A LA IZQUIERDA ; ADRESL => REGISTRO EN EL QUE SE ALMACENAN LOS 8 LSB PARA RESULTADOS JUSTIFICADOS A LA DERECHA Y 2 SI ES A LA IZQUIERDA ; ;************************************************************************************************* ;EL SIGUIENTE ES EL PROCESO RECOMENDADO POR MICROCHIP PARA INICIALIZAR EL CONVERTIDOR A/D ;************************************************************************************************* MOVLW B'00001000' MOVWF ANSEL ;RA3 COMO ENTRADA ANALÓGICA CLRF ADCON1 ;SIN DIVISOR DE FRECUENCIA, VREF+ = VDD Y VREF- = VSS BSF ADCON1,ADFM ;JUSTIFICADO A LA DERECHA BANKSEL ADCON0 ;ACCEDE DIRECTAMENTE AL BANCO EN EL QUE SE ENCUENTRA ESTE REGISTRO BSF ADCON0,CHS0 ;SELECCIONAMOS EL CANAL ANALÓGICO 3 BSF ADCON0,CHS1 BCF ADCON0,CHS2 BCF ADCON0,ADCS0 ;FRECUENCIA DE CONVERSIÓN A/D = Fosc/2 (MÁXIMA POSIBLE) BCF ADCON0,ADCS1 BSF ADCON0,ADON ;ENCENDIDO DEL CONV. A/D CALL Retardo_4micros ;TIEMPO DE ESPERA IMPLEMENTADO PARA QUE FUNCIONE ADECUADAMENTE EL CONV A/D CICLO BANKSEL ADCON0 BSF ADCON0,GO ;INICIAMOS LA CONVERSIÓN ESPERA BTFSC ADCON0,GO_DONE ;YA TERMINO LA CONVERSIÓN? GOTO ESPERA ;NO. ESPERA A QUE TERMINE. BANKSEL ADRESL MOVF ADRESL,W ;YA. TOMA LOS 8 LSB BANKSEL PORTB MOVWF PORTB ;MUESTRA EL RESULTADO DE LA CONVERSIÓN EN EL PUERTO B CALL Retardo_2s ;ESPERAMOS 2 SEGUNDOS MOVF ADRESH,W ;CARGAMOS LOS 2 MSB EN EL REGISTRO DE TRABAJO MOVWF PORTB ;LOS MOSTRAMOS EN EL PUERTO B CALL Retardo_2s ;ESPERAMOS 2 SEGUNDOS ;NOP ;TIEMPO DE ESPERA IMPLEMENTADO PARA QUE FUNCIONE ADECUADAMENTE EL CONV A/D ;CALL Retardo_20ms GOTO CICLO ;CICLO INFINITO INCLUDE "RETARDOS.INC" END