Sie sind auf Seite 1von 7

;********************************************************************************

;**PROGRAMA PARA DETECCION DE DISTANCIAS POR MEDIO DE SENSOR ULTRASONICO SRF04***


;************************5 SENSORES EN PARALELO**********************************
;********************************************************************************

LIST P=16F873A
#INCLUDE <P16F873A.INC>

__config _XT_OSC & _WDT_OFF & _PWRTE_OFF & _LVP_OFF & _BODEN_OFF

RET1 EQU 20H


DIST EQU 21H
FREQ EQU 22H
T_LOUD EQU 23H
FREQ3 EQU 24H
FREQ4 EQU 25H
FREQ5 EQU 26H
VARFREQ EQU 27H
VARPITO EQU 28H
RET2 EQU 29H
RET3 EQU 2AH
RET4 EQU 2BH
VOLT EQU 2cH

ORG 00H
GOTO INICIO
ORG 05H

INICIO BSF STATUS,RP0 ;BANCO DE MEMORY 1

MOVLW B'00001110' ;left justified adresH:L, RA0 ANALOGA,


OTROS DIGITAL VERF INTERNOS
MOVWF ADCON1

MOVLW B'00000001' ;PUERTO A DE SALIDA RA4 OPEN DRIVE, RA0 ENTRADA


ANALOGA MEDIDOR DE BATTERIA DE 9V
MOVWF TRISA

MOVLW B'11111111'
MOVWF TRISB ;TODOS LOS PINES DEL PUERTO B COMO ENTRADAS
PARA SENSAR DURACION DEL ECO Y DISTANCIA

CLRF TRISC ;TODOS LOS PINES DEL PUERTO C COMO SALIDAS PARA
PULSO DE EMISION DE ULTRASONIDO

MOVLW B'00000111' ;INTERNAL INSTRUCTION CYCLE CLOCK


(CLKOUT),INCREMENT ON LOW-TO-HIGH TRANSITION ON T0CKI PIN,
MOVWF OPTION_REG ;PRESCALER IS ASSIGNED TO THE TIMER0 MODULE,
PRESCALER 1 : 256

CLRF STATUS

MOVLW B'01000000' ;FOSC/8,RA0,DONE,OFF


MOVWF ADCON0
START CALL SL

CALL RET254M

CALL SDL

CALL RET254M

CALL SC

CALL RET254M

CALL SDR

CALL RET254M

CALL SR

CALL RET254M

CALL CHECKBAT

GOTO START

SL MOVLW 0AH ;PERIODO DE ONDA BOCINA


MOVWF VARFREQ

BSF PORTC,0 ;ENVIA PULSO DE 15uS PARA EMITIR


ULTRASONIDO
CALL RET15U ;LLAMA RETARDO DE 15uS
BCF PORTC,0 ;PONE PUERTO EN CERO

CLRF DIST
BTFSS PORTB,0 ;SENSA EL REBOTE DE LA ONDA
GOTO $-1 ;SI NO ESTA EN UNO VUELVE A PREGUNTAR
CALL RET4M ;LLAMA RETARDO DE 6mS
BTFSS PORTB,0 ;PUERTO EN UNO?
GOTO PITEYA
INCF DIST,F ;SI EN UNO, EL TIEMPO DE REGRESO SIGUE EN
AUMENTO
GOTO $-4 ;VUELVE A CONTAR 6mS DE ESPERA

SDL MOVLW 3AH ;PERIODO DE ONDA BOCINA


MOVWF VARFREQ

BSF PORTC,1 ;ENVIA PULSO DE 15uS PARA EMITIR


ULTRASONIDO
CALL RET15U ;LLAMA RETARDO DE 15uS
BCF PORTC,1 ;PONE PUERTO EN CERO

CLRF DIST
BTFSS PORTB,1 ;SENSA EL REBOTE DE LA ONDA
GOTO $-1 ;SI NO ESTA EN UNO VUELVE A PREGUNTAR
CALL RET4M ;LLAMA RETARDO DE 6mS
BTFSS PORTB,1 ;PUERTO EN UNO?
GOTO PITEYA
INCF DIST,F ;SI EN UNO, EL TIEMPO DE REGRESO SIGUE EN
AUMENTO
GOTO $-4 ;VUELVE A CONTAR 6mS DE ESPERA

SC MOVLW 6AH ;PERIODO DE ONDA BOCINA


MOVWF VARFREQ

BSF PORTC,2 ;ENVIA PULSO DE 15uS PARA EMITIR


ULTRASONIDO
CALL RET15U ;LLAMA RETARDO DE 15uS
BCF PORTC,2 ;PONE PUERTO EN CERO

CLRF DIST
BTFSS PORTB,2 ;SENSA EL REBOTE DE LA ONDA
GOTO $-1 ;SI NO ESTA EN UNO VUELVE A PREGUNTAR
CALL RET4M ;LLAMA RETARDO DE 6mS
BTFSS PORTB,2 ;PUERTO EN UNO?
GOTO PITEYA
INCF DIST,F ;SI EN UNO, EL TIEMPO DE REGRESO SIGUE EN
AUMENTO
GOTO $-4 ;VUELVE A CONTAR 6mS DE ESPERA

SDR MOVLW 9AH ;PERIODO DE ONDA BOCINA


MOVWF VARFREQ

BSF PORTC,3 ;ENVIA PULSO DE 15uS PARA EMITIR


ULTRASONIDO
CALL RET15U ;LLAMA RETARDO DE 15uS
BCF PORTC,3 ;PONE PUERTO EN CERO

CLRF DIST
BTFSS PORTB,3 ;SENSA EL REBOTE DE LA ONDA
GOTO $-1 ;SI NO ESTA EN UNO VUELVE A PREGUNTAR
CALL RET4M ;LLAMA RETARDO DE 6mS
BTFSS PORTB,3 ;PUERTO EN UNO?
GOTO PITEYA
INCF DIST,F ;SI EN UNO, EL TIEMPO DE REGRESO SIGUE EN
AUMENTO
GOTO $-4 ;VUELVE A CONTAR 6mS DE ESPERA

SR MOVLW 0CAH ;PERIODO DE ONDA BOCINA


MOVWF VARFREQ

BSF PORTC,4 ;ENVIA PULSO DE 15uS PARA EMITIR


ULTRASONIDO
CALL RET15U ;LLAMA RETARDO DE 15uS
BCF PORTC,4 ;PONE PUERTO EN CERO

CLRF DIST
BTFSS PORTB,4 ;SENSA EL REBOTE DE LA ONDA
GOTO $-1 ;SI NO ESTA EN UNO VUELVE A PREGUNTAR
CALL RET4M ;LLAMA RETARDO DE 6mS
BTFSS PORTB,4 ;PUERTO EN UNO?
GOTO PITEYA
INCF DIST,F ;SI EN UNO, EL TIEMPO DE REGRESO SIGUE EN
AUMENTO
GOTO $-4 ;VUELVE A CONTAR 6mS DE ESPERA

TABLADIST
MOVF DIST,W
ADDWF PCL,F
RETLW 2H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H
RETLW 1H

;============================================================
PITEYA CALL TABLADIST
MOVWF VARPITO

PITE DECFSZ VARPITO


GOTO $+2
RETURN
MOVLW 3FH
MOVWF T_LOUD
SPEAKER BSF PORTA,1 ;PUERTO DE SPEAKER
CALL RETARHZ
BCF PORTA,1
CALL RETARHZ
DECFSZ T_LOUD
GOTO SPEAKER
CALL RET254M
GOTO PITE

;**************************************************

;MODULO TIMER 0 CUENTA 7.8mS el tiempo que tarda la senal de audio en recorrer 1.32
m

RET4M CLRF TMR0 ;CLEAR TIMER0 REGISTER


CLRF INTCON ;DESHABILITA INTERRUPCIONES EXTERNAS,
LIMPIA FLAG DE SOBREFLUJO TMR0 FF->00H
MOVLW B'00000111' ;INTERNAL INSTRUCTION CYCLE CLOCK
(CLKOUT),INCREMENT ON LOW-TO-HIGH TRANSITION ON T0CKI PIN,
MOVWF OPTION_REG ;PRESCALER IS ASSIGNED TO THE TIMER0 MODULE,
PRESCALER 1 : 256

MOVLW D'255'-D'30' ; INICIALIZAMOS CON EL VALOR DE DESBORDE QUE ES


255 Y LE
; RESTAMOS EL VALOR QUE QUEREMOS CONTAR, CADA 30
INCREMENTOS SON 7.8 mS POR PRESCALAR 1:256
MOVWF TMR0 ; A PARTIR DE AQUI CONTAMOS CON 2 CICLOS
BCF INTCON,T0IF ; BORRAMOS LA BANDERA YA QUE NO SABEMOS SI YA
; SE DESBORDO EL TIMER
NOP ; DESDE AQUI COMIENZA A CONTAR ��GO

BTFSS INTCON,T0IF ; EVALUAMOS SI EL TIMER YA REALIZO SU


LABOR.
GOTO $-1 ;ESPERAR...
RETURN

;**************************************************

;MODULO TIMER 0 CUENTA 254mS

RET254M CLRF TMR0 ;CLEAR TIMER0 REGISTER


CLRF INTCON ;DESHABILITA INTERRUPCIONES EXTERNAS,
LIMPIA FLAG DE SOBREFLUJO TMR0 FF->00H
MOVLW B'00000111' ;INTERNAL INSTRUCTION CYCLE CLOCK
(CLKOUT),INCREMENT ON LOW-TO-HIGH TRANSITION ON T0CKI PIN,
MOVWF OPTION_REG ;PRESCALER IS ASSIGNED TO THE TIMER0 MODULE,
PRESCALER 1 : 256

MOVLW D'255'-D'254' ; INICIALIZAMOS CON EL VALOR DE DESBORDE QUE


ES 255 Y LE
; RESTAMOS EL VALOR QUE QUEREMOS CONTAR, CADA 4
INCREMENTOS ES UN MILISEGUNDO POR PRESCALAR 1:256
MOVWF TMR0 ; A PARTIR DE AQUI CONTAMOS CON 2 CICLOS
BCF INTCON,T0IF ; BORRAMOS LA BANDERA YA QUE NO SABEMOS SI YA
; SE DESBORDO EL TIMER
NOP ; DESDE AQUI COMIENZA A CONTAR ��

BTFSS INTCON,T0IF ; EVALUAMOS SI EL TIMER YA REALIZO SU


LABOR.
GOTO $-1 ;ESPERAR...
RETURN

;**************************************************

;MODULO PARA VERIFICAR EL ESTADO DE UNA BATERIA DE 9 VOLTIOS

CHECKBAT BSF ADCON0,ADON ;ENCIENDE ADC


BCF PIR1,ADIF ;limpia flag de conversion completa
CALL RET170U
BSF ADCON0,GO ;INICIA CONVERSION

PREGUNTA BTFSC ADCON0,GO


GOTO PREGUNTA
MOVF ADRESH,W
MOVWF VOLT
BCF ADCON0,ADON ;APAGA ADC

MOVLW B'11010000' ;CARGA D 208 , QUE EQUIVALEN A 4.9


VOLTIOS EN DATO DIGITAL
SUBWF VOLT,F

BTFSS STATUS,C ;VERIFICA SI LA RESTA ENTREGA UN


RESULTADO NEGATIVO
GOTO BATLOW ;SI EL BIT C ESTA EN O ENTONCES ES
NEGATIVO EL RESULTADO Y EL VOLTAJE ES MENOR DE 8V
RETURN

BATLOW MOVLW 6H ;PITA 5 VECES SI LA BATERIA ESTA


BAJA
MOVWF VARPITO
MOVLW 0FFH ;PERIODO DE ONDA BOCINA PARA INDICAR
BATERIA BAJA
MOVWF VARFREQ
CALL PITE
RETURN

;**************************************************

RET15U MOVLW 09H ;RETARDO DE 15uS


MOVWF RET1
DECFSZ RET1
GOTO $-1
RETURN

RET170U MOVLW 0DAH ;RETARDO DE 170uS


MOVWF RET1
DECFSZ RET1
GOTO $-1
RETURN

RETARHZ MOVF VARFREQ,W ;RETARDO AUXILIAR 2


MOVWF RET4
RETIME DECFSZ RET4
GOTO RETIME
CALL RET170U
RETURN

END

Das könnte Ihnen auch gefallen