mcpiebot
Bovino adicto
- Desde
- 7 Oct 2009
- Mensajes
- 730
- Tema Autor
- #1
En este video se muestra un PIC16F886 usando su ADC para leer la respuesta de un sensor de gas lp, tambien usa su USART para mandar los datos a la PC por medio de un modulo bluetooth.
Aqui el video.
[YOUTUBE]http://www.youtube.com/watch?v=wnaLNLqzRrY[/YOUTUBE]
Aqui el codigo del microcontrolador:
Aqui el video.
[YOUTUBE]http://www.youtube.com/watch?v=wnaLNLqzRrY[/YOUTUBE]
Aqui el codigo del microcontrolador:
Código:
#INCLUDE <P16F886.INC>
;***D E C L A R A C I O N D E L O S B I T S D E C O N F I G U R A C I O N****
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
;*********************************************************************************
errorlevel -302
;--------DECLARACION DE REGRISTROS--------
CBLOCK 0X20
;******************************************************************
POINTER ;REGISTROS UTILIZADOS EN
UNIDADES, DECENAS ;BINBCD Y EN LA ADQUISICION DE
CENTENAS,MILLARES ;DATOS
UNIDADEST, DECENAST ;BINBCD Y EN LA ADQUISICION DE
CENTENAST,MILLAREST ;DATOS
TEMPORAL
;******************************************************************
W_TEMP,STATUS_TEMP, PCLATH_TEMP,SAMPLE, DATO
NUM1,NUM2,NUM3
ENDC
CBLOCK 0X73
DATOL,DATOH
ENDC
ENVIA MACRO
BSF STATUS,RP0
BTFSS TXSTA,TRMT
GOTO $-1
BCF STATUS,RP0
ENDM
ORG 0X00
GOTO INICIO
ORG 0X04
INTERRUPCION MOVWF W_TEMP ;Copy W to TEMP register
SWAPF STATUS,W ;Swap status to be saved into W
CLRF STATUS ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP ;Save status to bank zero STATUS_TEMP register
MOVF PCLATH, W ;Only required if using pages 1, 2 and/or 3
MOVWF PCLATH_TEMP ;Save PCLATH into W
CLRF PCLATH ;Page zero, regardless of current page
MOVF RCREG,W
ADDLW 0X01
MOVWF TXREG
ENVIA
FIN_INT
MOVF PCLATH_TEMP, W ;Restore PCLATH
MOVWF PCLATH ;Move W into PCLATH
SWAPF STATUS_TEMP,W ;Swap STATUS_TEMP register into W
;(sets bank to original state)
MOVWF STATUS ;Move W into STATUS register
SWAPF W_TEMP,F ;Swap W_TEMP
SWAPF W_TEMP,W ;Swap W_TEMP into W
RETFIE
;*************************************************************
;TABLAS DE DATOS PARA LA SUBRUTINA BINBCD
TABLAU ;TABLA DE UNIDADES
MOVF POINTER,W
ADDWF PCL,F
RETLW D'2'
RETLW D'6'
RETLW D'8'
RETLW D'4'
RETLW D'2'
RETLW D'6'
RETLW D'8'
RETLW D'4'
RETLW D'2'
RETLW D'1'
TABLAD ;TABLA DE DECENAS
MOVF POINTER,W
ADDWF PCL,F
RETLW D'1'
RETLW D'5'
RETLW D'2'
RETLW D'6'
RETLW D'3'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
TABLAC ;TABLA DE CENTENAS
MOVF POINTER,W
ADDWF PCL,F
RETLW D'5'
RETLW D'2'
RETLW D'1'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
RETLW D'0'
;*********************************************************
DT "www.cosasdeingenieria.com"
DT "www.cosasdeingenieria.com"
INICIO: CALL USARTINI
CALL INIT_ADQUI
START CALL ADQUI
CALL BINBCD
MOVLW 0x24 ;initialize pointer
MOVWF FSR ;to RAM
NEXTx MOVF INDF,W
MOVWF TXREG
ENVIA
DECF FSR ;inc pointer
MOVF FSR,W
SUBLW 0X20
BTFSS STATUS,Z
GOTO NEXTx
MOVLW 0X0D
MOVWF TXREG
ENVIA
MOVLW 0X0A
MOVWF TXREG
ENVIA
CALL RETARDO1S
GOTO START
;**********S U B R U T I N A D E A D Q U I S I C I O N D E L A D C**********
ADQUI: ; MOVWF ADCON0
MOVLW B'11000001'
MOVWF ADCON0
CALL SAMPLETIME ;RETARDO DE ADQUISICION CALL SAMPLETIME ;RETARDO DE ADQUISICION
CALL SAMPLETIME
BSF ADCON0,GO ;INICIA LA CONVERSION
BTFSC ADCON0,GO ;YA SE TERMINO LA CONVERSION?
GOTO $-1 ;NO? PREGUNTA DE NUEVO
CALL SAMPLETIME
BANKSEL ADRESH ;SI, CONTINUA
MOVF ADRESH,W ;LEE LA PARTE MAS SIGNIFICATIVA
MOVWF DATOH ;GUARDALO EN DATOH
BANKSEL ADRESL ;CAMBIO A BANCO1
MOVF ADRESL,W ;LEE LA PARTE MENOS SIGNIFICATIVA
MOVWF DATOL ;GUARDALO EN DATOL
BANKSEL PORTB ;CAMBIO A BANCO 0
RETURN
SAMPLETIME: MOVLW .255
MOVWF SAMPLE
ESPERA_S: NOP
NOP
DECFSZ SAMPLE,F
GOTO ESPERA_S
RETURN
;*********************************************************
;subrutina de conversion de binario a codigo ASCII
BINBCD CLRF MILLARES
CLRF UNIDADES
CLRF DECENAS
CLRF CENTENAS
CLRF POINTER
OTRA
BTFSS DATOH,7
GOTO ROTA
CALL TABLAU
ADDWF UNIDADES,F
CALL TABLAD
ADDWF DECENAS,F
CALL TABLAC
ADDWF CENTENAS,F
;**************************************
MOVF UNIDADES,W
SUBLW D'10'
BTFSS STATUS,C
GOTO MAYOR
GOTO MENOR
MAYOR INCF DECENAS,F
MOVLW D'10'
SUBWF UNIDADES,F
GOTO DECE
MENOR MOVLW D'10'
SUBWF UNIDADES,W
BTFSS STATUS,Z
GOTO DECE
GOTO MAYOR
;**************************************
DECE MOVF DECENAS,W
SUBLW D'10'
BTFSS STATUS,C
GOTO MAYORD
GOTO MENORD
MAYORD INCF CENTENAS,F
MOVLW D'10'
SUBWF DECENAS,F
GOTO CENTE
MENORD MOVLW D'10'
SUBWF DECENAS,W
BTFSS STATUS,Z
GOTO CENTE
GOTO MAYORD
;**************************************
CENTE MOVF CENTENAS,W
SUBLW D'10'
BTFSS STATUS,C
GOTO MAYORC
GOTO MENORC
MAYORC INCF MILLARES,F
MOVLW D'10'
SUBWF CENTENAS,F
GOTO MILLA
MENORC MOVLW D'10'
SUBWF CENTENAS,W
BTFSS STATUS,Z
GOTO MILLA
GOTO MAYORC
;**************************************
MILLA MOVF MILLARES,W
SUBLW D'10'
BTFSS STATUS,C
GOTO MAYORM
GOTO MENORM
MAYORM MOVLW D'10'
SUBWF MILLARES,F
GOTO ROTA
MENORM MOVLW D'10'
SUBWF MILLARES,W
BTFSS STATUS,Z
GOTO ROTA
GOTO MAYORM
;**************************************
ROTA
RLF DATOL,F
RLF DATOH,F
INCF POINTER,F
MOVF POINTER,W
SUBLW D'10'
BTFSS STATUS,Z
GOTO OTRA
MOVLW 0X30
ADDWF UNIDADES,F
MOVLW 0X30
ADDWF DECENAS,F
MOVLW 0X30
ADDWF CENTENAS,F
MOVLW 0X30
ADDWF MILLARES,F
RETURN
SHOW MOVF MILLARES,W
CALL DATO
MOVF CENTENAS,W
CALL DATO
MOVF DECENAS,W
CALL DATO
MOVF UNIDADES,W
CALL DATO
RETURN
USARTINI: BSF STATUS,RP0
MOVLW 0X24
MOVWF TXSTA
MOVLW D'25'
MOVWF SPBRG
BSF PIE1,RCIE
MOVLW 0XC0
MOVWF INTCON
BCF STATUS,RP0 ;BANCO 0
MOVLW 0X90
MOVWF RCSTA
RETURN
RETARDO100US
REBOTE: MOVLW d'1'
MOVWF NUM3
OTRA2 MOVLW d'200'
MOVWF NUM2
OTRA1 MOVLW d'166'
MOVWF NUM1
OTRAX: DECFSZ NUM1,F
GOTO OTRAX
DECFSZ NUM2,F
GOTO OTRA1
DECFSZ NUM3,F
GOTO OTRA2
return
RETARDO1S: MOVLW d'1'
MOVWF NUM3
OTRA2S MOVLW d'100'
MOVWF NUM2
OTRA1S MOVLW d'166'
MOVWF NUM1
OTRAS: DECFSZ NUM1,F
GOTO OTRAS
DECFSZ NUM2,F
GOTO OTRA1S
DECFSZ NUM3,F
GOTO OTRA2S
return
INIT_ADQUI:
BANKSEL ADCON1 ;
MOVLW B'00000000' ;JUSTIFICACION A LA IZQUIERDA
MOVWF ADCON1 ;VDD Y VSS COMO VREF
BcF ADCON1,4
BANKSEL TRISA ;
BSF TRISA,1 ;PONEMOS A RA0 COMO ENTRADA
BANKSEL ANSEL ;
BSF ANSEL,1
BANKSEL ADCON0 ;
MOVLW B'11000101' ;ELEGIMOS EL RELOJ FRC DEL ADC
MOVWF ADCON0 ;Y ENCENDEMOS EL CONVERTIDOR
RETURN
END