medidor
Nota: Como puede verse en el esquema no esta puesto el circuito oscilador de 4 MHz necesario para que funcione el montaje, no olvidarse de ponerlo! (cristal de 4MHz y condensadores de 27pF)
El programa usa una tabla de conversión calibrada para usar con una cartulina blanca como objeto distante para la medición y muestra en el LCDla distancia en centímetros continuamente, para otros objetos de diferente color se puede modificar la tabla fácilmente.
;************************************************* www.x-robotics.com *******
; PROGRAMA : GP2D02.asm
; Funcion :Medicion de distancia de 10 a 80 cms con el sensor integrao GP2D02
; de Sharp y visualizacion en LCD conectado a PORTB 8 lineas + PORTA0, PORTA1
; yPORTA2
;
;
;---------------------------------------------------------------------------
; Revision : 1.00 Fecha: 8/12/2003 Programa para : PIC16F876
; CPU Clock : 4 MHz Tiempo instruccion : 1uS
; WDT : OFF Tipo de reloj : XT
; Code Prot : OFF cfg USART rs232 ; none
; Autor : ionitron -> ionitron@x-robotics.com;----------------------------------------------------------------------------
INICIO bcf STATUS,RP0 ;banco 0
bcf STATUS,RP1
clrf PORTA
bsf STATUS,RP0 ;banco 1
movlw 0x06
movwf ADCON1
movlw b'00001000' ;pone entradas y salidas.. RA3=IN
movwf TRISA
clrf TRISB ;portb como salida
clrf TRISC
bcf STATUS,RP0 ;banco 0
movlw b'00000000' ;todo a 0 menosRA3 a 1
movwf PORTA
bsf PORTC,0
movlw d'105' ;offset usado con tabla conversiones
movwf despl ;calibracion para centimetros.
movlw d'235'
movwf max
;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
START CALL LCD_INI ;Inicia LCD (CFG puertos...)
START_1 MOVLW b'00000001' ;Borrar LCD yHome
CALL LCD_REG
MOVLW b'00000110' ;
CALL LCD_REG
MOVLW b'00001100' ;LCD On, cursor Off,Parpadeo Off
CALL LCD_REGMOVLW 0x80 ;Direccion caracter
CALL LCD_REG
REPETIR MOVF Digito,w ;W=Digito
CALL DATO_1 ;Coge el caracter
IORLW 0 ;Compara
BTFSC STATUS,2 ;Es el ultimo?
GOTO acabar ;SiCALL LCD_DATOS ;Visualiza caracter
INCF Digito,f ;Incrementa numero de Digito
GOTO REPETIR ;Vuelve a escribir
acabar movlw d'7'
movwf cnt_bit ;contador de bits para lectura
bcf PORTC,0 ;pone a 0 Vin
movlw d'70' ;delay 70mS espera acaptura
call delay
bsf PORTC,0 ;sube de nuevo
;-----------------------------------------------
lee call Delayp1 ;delay 0,1mS
bcf PORTC,0 ;lee primer bit MSB
nop
nop
nop
nop
nop
nop
btfss PORTA,3 ;compara el bit entrante
goto es_cero
es_uno bsf BUFFER,0 ;pone el bit actual
bcf STATUS, C
rlf BUFFER,F ;rota a izquierda
gotocontinuar
es_cero bcf BUFFER,0 ;pone el bit actual
bcf STATUS, C
rlf BUFFER,F ;rota a izquierda
continuar bsf PORTC,0
decfsz cnt_bit,F
goto lee
;---------------------------------------------------------------
lee_ultimo bcf PORTC,0 ;lee primer bit MSB
nop
nop
nop
nop
nop
nop
btfss PORTA,3 ;compara el bit entrante
goto es_cero2...
Regístrate para leer el documento completo.