hola a todos, mi programa consta en rasgos generales de un sistema de seguridad vehicular para conductor dormido al volante. su funcionamiento se basa, en los latidos del corazon, yo los simulo con un tren de pulsos, que al variar la frec. ase una cosa o otra; actua como llave. Cuando tiene mas de 60Hz lo controlo yo, la direccion, y hacia donde gira.Cuando la frec. es menor que 60Hz, la direccion del auto se controla por medio de dos sensores CNY70, uno asta a la izquierda y el otro a la derecha,que mantien el auto entre dos lineas, simulando la carretera. Aqui esta mi problema, cuando el sensor de la derecha (funciona con BLANCO=0 Y NEGRO=1, YA PASADO A DIGITAL) detecta el la linea blanca debe girar a la izquierda, pero aqui le debe preguntar al otro sensor que esta detectando, y si el sensor izq. detecta la linea blanca debe girar a la derecha. yo utilizo en el porta RA0 y RA1. yo hice el programa pero parece como que nunca entra.
espero que me puedan ayudar.
ACA PONGO MI PROGRAMA:
#INCLUDE P16F88.INC
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO
REG3 EQU 0X20
REG4 EQU 0X21
REG_FREC EQU 0X22
REG5 EQU 0X23
REG6 EQU 0X24
SEG EQU 0X25
temp EQU 0X26
FREC EQU 0X27
OPTION_REG EQU 0X81
PDel0 EQU 0X28
PDel1 EQU 0X29
PDel2 EQU 0X30
REG1 EQU 0X31
REG2 EQU 0X32
temp1 equ 0x33
temp2 equ 0x34
temp3 equ 0X35
DupStat equ 0x36
DupW equ 0x37
REG_SENSORES EQU 0X38
ADRESH1 EQU 0X39
ADRESH2 EQU 0X40
REG7 EQU 0X41
REG8 EQU 0X42
DATORX equ 0x43
DATOTX equ 0x44
;agregados con minuscula
org 0x00
goto CONFIGURACION;inicio
org 0X04
; CALL INTER
RETFIE
inicio
clrf PORTA
clrf PORTB
call CONFIGURACION
SIGO
CLRF TMR0
CALL DEMORA; TIENE QUE SER LO MAS CERCANO A 1SEG
MOVF TMR0,W
MOVWF FREC
MOVFW FREC
SUBLW D'60'
BTFSC STATUS,C;carrier
GOTO MAXFREC;PARAR MOTOR
GOTO MINFREC;MOTOR FUNCIONANDO
BCF PORTB,1
BCF PORTB,0
;BCF PORTA,2
;BCF PORTA,3
GOTO SIGO
OTRO1
movlw 0x55
movwf PORTB
call tempo
movlw 0xAA
movwf PORTB
call tempo
return
OTRO
bsf PORTA,0
call tempo
bcf PORTA,0
CALL tempo
return
CONFIGURACION
BANKSEL PORTA
CLRF PORTB
CLRF PORTA
BANKSEL ANSEL
MOVLW 0X07
MOVWF ANSEL
movlw b'10000000';sensores
movwf ADCON1
MOVLW 0X00;SALIDAS
MOVWF TRISB
MOVLW 0XFF ; RA4 ENTRADA PULSOS 0XCF
MOVWF TRISA
MOVLW B'11101000' ; POR CADA PULSO QUE INGRESE A RA4 SE INCREMENTA TMRO
MOVWF OPTION_REG
movlw b'01100000';Seleciono 4Mhz
movwf OSCCON
BANKSEL PORTA
;BCF ADCON0,ADCS1;sensor
;BSF ADCON0,ADCS0;
BSF INTCON,7;GIE
goto SIGO
tempo
banksel temp1
movlw 0x8
movwf temp1
otro2
movlw 0xff
movwf temp2
otro1
movlw 0xff
movwf temp3
;//////////////////////////////////////////////////
MINFREC
BSF PORTB,0
BCF PORTB,1
GOTO CONDUCTOR;90 PULSOS,ESTA ALREVES
MAXFREC
BCF PORTB,6;DESACTIVO CNY70 CONDUCTOR
GOTO DORMIDO
DORMIDO
BCF PORTB,1;al bajar la frec espero un tiempo de 2min en los q controlo los sensores y luego apago el motor traseroBSF
BCF PORTB,0 ;voy a s derecha y sensor izquierda
goto S1
CALL BUZER
CALL FLASHEO
GOTO SIGO ;60
CONDUCTOR
BSF PORTB,6;ACTIVO CNY70(CONDUCTOR) POR TENSION
BCF PORTB,2
BCF PORTB,3
BTFSC PORTA,7; izquierda
GOTO IZQUIERDA
BTFSC PORTA,6
GOTO DERECHA
GOTO SIGO
IZQUIERDA
BTFSS PORTA,7;PREG SI ESTA ACTIVADO PULSADOR
GOTO SIGO
CR
CALL TEMPO50m; POR EL REBOTE
BTFSS PORTA,7
GOTO CR
ANDAR
BTFSS PORTA,7
GOTO DERECHA
BCF PORTB,3
BSF PORTB,2
BTFSC PORTA,7; SI EL PULASADOR ESTA LEVANTADO PARO MOTOR
GOTO ANDAR
;BCF PORTA,7;PARAR
BCF PORTB,3
BCF PORTB,2
GOTO SIGO
DERECHA
BTFSS PORTA,6;PREG SI ESTA ACTIVADO PULSADOR
GOTO SIGO
CC
CALL TEMPO50m; POR EL REBOTE
BTFSS PORTA,6
GOTO CC
ANDAR1
BTFSS PORTA,6
GOTO IZQUIERDA
BSF PORTB,3
BCF PORTB,2
BTFSC PORTA,6; DERECHA
GOTO ANDAR1; GOTO ANDAR1;PARAR1
;BCF PORTA,6
BCF PORTB,3
BCF PORTB,2
GOTO SIGO
DEMORA;1seg
movlw .14 ; 1 set numero de repeticion (C)
movwf PDel0 ; 1 |
PLoop0 movlw .72 ; 1 set numero de repeticion (B)
movwf PDel1 ; 1 |
PLoop1 movlw .247 ; 1 set numero de repeticion (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
TEMPO50m
MOVLW 0X81
MOVWF REG1
DOS MOVLW 0X81
MOVWF REG2
UNO DECFSZ REG2
GOTO UNO
DECFSZ REG1
GOTO DOS
RETURN
FLASHEO
BSF PORTB,4
CALL TEMPO2;INTER
BCF PORTB,4
;CALL TEMPO2;INTER
;GOTO FLASHEO
RETURN
BUZER
BSF PORTB,5
RETURN
TEMPO2
MOVLW 0X30
MOVWF REG5
SEIS MOVLW 0X30
MOVWF REG6
CINCO DECFSZ REG6
GOTO CINCO
DECFSZ REG5
GOTO SEIS
RETURN
TEMPO ;VARIO EL TIEMPO DE GIRO
MOVLW 0X20
MOVWF REG3
CUATRO MOVLW 0X20
MOVWF REG4
TRES DECFSZ REG4
GOTO TRES
DECFSZ REG3
GOTO CUATRO
RETURN
;///////////////////////////////////////////////////////////////////////////////
;funcionamiento con negro;BLANCO=0, NEGRO=1
S1; SENSOR1 IZQUIERDA
CLRF ADRESH
BCF ADCON0,5;LEO SENSOR 1
BCF ADCON0,4
BCF ADCON0,3
BSF ADCON0,0
CALL TEMPO20u
BSF ADCON0,2
ESPERO
BTFSC ADCON0,2
GOTO ESPERO
BCF ADCON0,0
ADRE
MOVFW ADRESH
MOVWF ADRESH1
BUSCOADRESH
MOVLW 0X7D
SUBWF ADRESH,W
BTFSS STATUS,0;SI ES IGUAL A "1" MENOR A 2,5V BLANCO, SI ES "0" MAYOR A 2,5V NEGRO
GOTO SENSOR1ENUNO;NEGRO
GOTO SENSOR1ENCERO;BLANCO
SENSOR1ENUNO;negro
BCF REG_SENSORES,0
CLRF ADRESH
GOTO S2;DERECHAaaaaaaaaaaaa
SENSOR1ENCERO
BSF REG_SENSORES,0
CALL DERECHA1;MAXFREC;60HZ///////////////////////////////
GOTO MAXFREC
S2;derecha
CLRF ADRESH
BCF ADCON0,5;LEO SENSOR 2
BCF ADCON0,4
BCF ADCON0,3
BSF ADCON0,0
CALL TEMPO20u
BSF ADCON0,2
ESPERO1
BTFSC ADCON0,2
GOTO ESPERO1
BCF ADCON0,0
ADRE1
MOVFW ADRESH
MOVWF ADRESH2
BUSCOADRESH1
MOVLW 0X7D
SUBWF ADRESH2,W
BTFSS STATUS,0
GOTO SENSOR2ENUNO;NEGRO
GOTO SENSOR2ENCERO;BLANCO
SENSOR2ENUNO;negro
BCF REG_SENSORES,1
CLRF ADRESH2
GOTO S1
SENSOR2ENCERO
BSF REG_SENSORES,1
CALL IZQUIERDA1;MAXFREC
GOTO MAXFREC
;///////////////////////////////////////////////////////////////////////////
SR1; SENSOR POR COLISION
BSF PORTB,7
BTFSS PORTA,3
GOTO MAXFREC;//////////////////// VER /////////////////
GOTO DORMIDO
DERECHA1
;bsf PORTB,6;LED ROJO GIRO DERECHA
BSF PORTB,3
BCF PORTB,2
CALL DEMORA;tiempo en que funciona,luego paro
BCF PORTB,3
BCF PORTB,2
RETURN
IZQUIERDA1
;bsf PORTB,7;LED VERDE GIRO IZQUIERDA
BCF PORTB,3
BSF PORTB,2
CALL DEMORA
BCF PORTB,3
BCF PORTB,2
RETURN
TEMPO20u
MOVLW 0X2
MOVWF REG7
OCHO MOVLW 0X2
MOVWF REG8
SIETE DECFSZ REG8
GOTO SIETE
DECFSZ REG7
GOTO OCHO
RETURN
END
CREO QUE LO COPIE BIEN, ADJUNTO UN DIBUJITO PARA QUE SE ENTIENDA LO DEL CANAL DONDE ESTAN LOS SENSORES.