#include <16F877A.h> #include <iostream.h> #include<string.h> #use delay(clock=4000000) #define max 2 struct tiempos { int n_int; int valor; ; struct tiempos intentos[max]; const unsigned short SERVOD=PORTB.7 const unsigned short SERVOI=PORTB.6 const unsigned short SERVOU=PORTB.5 const unsigned short ENTRADA=PORTA.0 const unsigned short ULTRASONIDO2=PORTA.1 unsigned short PRENDER; unsigned short ASS; unsigned short CONT; unsigned int TEMPO; unsigned int TEMPO1; unsigned int SONDA1; unsigned int SONDA2; unsigned int SONDA3; unsigned short SALIR; unsigned short COMANDO; unsigned short CONTADOR; unsigned short bandera; unsigned short ESTADO; unsigned short bandera_1; unsigned short CMPN; int VALOR1; int VALOR2;
int VALOR3; unsigned short i; void INICIO() { TRISB=1 ; PORTB=0 ; TRISA=1 ; PORTA=0 ; ADCON1=6 ; INTCON=0b11010000; PIE1= 0b00000001 ; PIR1= 0b00000000 ; TMR1H=0 ; TMR1L=0 ; T1CON=0 ; OPTION_REG=0b10000000; bandera=0 ; bandera_1=0; ESTADO=0 ; PRENDER=0 ; void TIEMPO() { INTCON=0b11000000; TEMPO1=TMR0*2 ; TEMPO=CONT*256 ; TEMPO=TEMPO+TEMPO1 ; void PASO() { TMR0=0; CONT=0 ; INTCON=0b11100000;
void INTERRUPT() { if (INTCON.T0IF=1){ CONT++ ; INTCON=0b11100000 ; if (PIR1.TMR1IF=1){ VALOR1++; TMR1L=0; TMR1H=0 ; PIR1.TMR1IF=0; void ATRAS() { '**** SERVO ATRAS *****************************/ SERVOI=1 ; DELAY_US(1200); SERVOI=0 ; SERVOD=1 ; DELAY_US(1600); SERVOD=0 ; void AVANCE() { /********************************************** '**** SERVO ADELANTE **************************/ if (bandera=0){ FOR (ass=1; ass=2;ass++){
SERVOI=1 ; DELAY_US(1600); SERVOI=0; bandera=1 ; else SERVOI=1 ; DELAY_US(1600); SERVOI=0 ; bandera=0 ; SERVOD=1; DELAY_US(1200); SERVOD=0 ; / void TM1() { INTCON.GIE=1; TMR1H=0 ; TMR1L=0 ; PIR1=0 ; T1CON=1 ; void TM2() { INTCON.GIE=0; TMR1H=0; TMR1L=0; PIR1=0; T1CON=0;
void ATRASDER() { '**** SERVO DERECHO ATRAS *********************/ SERVOD=1 ; DELAY_US(1600); SERVOD=0 ; void AVANCEDER() { /*'**** SERVO ADELANTE D ************************/ /*'AVANCE*/ SERVOD=1 ; DELAY_US(1200); SERVOD=0 ; void ATRASIZQ() { '**** SERVO IZQUIERDO ATRAS *******************/ SERVOI=1 ; DELAY_US(1200); SERVOI=0 ; void AVANCEIZQ() {
'**** SERVO ADELANTE **************************/ SERVOI=1 ; DELAY_US(1600); SERVOI=0 ; void STOPID() { '**** SERVO STOP ******************************/ SERVOD=1 ; SERVOI=1; DELAY_US(1500); SERVOI=0 ; SERVOD=0 ; DELAY_MS(20) ; void STOPI() { '**** SERVO STOP I ****************************/ SERVOI=1 ; DELAY_US(1500); SERVOI=0 ; DELAY_MS(20) ;
void STOPD() { '**** SERVO STOP D ****************************/ SERVOD=1 ; DELAY_US(1500); SERVOD=0 ; DELAY_MS(20) ; void ATRASUP() { '**** SERVO UP ATRAS *******************/ SERVOU=1 ; DELAY_US(1400); SERVOU=0 ; void AVANCEUP() { '**** SERVO UP AVANCE *******************/ SERVOU=1 ; DELAY_US(1607); SERVOU=0 ; DELAY_MS(20) ; void STOPD() { '**** SERVO STOP D ****************************/
SERVOU=1 ; DELAY_US(1500); SERVOU=0 ; void FUNCION() { FOR (ASS=1; ass=2;ass++){ PORTB.4=1 ; DELAY_MS(10); PORTB.4=0 ; void DATOS() { PORTB.4=1 ; DELAY_MS(10) ; PORTB.4=0 ; TRISA.1=0 ; ULTRASONIDO2=1 ; DELAY_US(5) ; ULTRASONIDO2=0; TRISA.1=1 ; WHILE {SALIR<1 if (ULTRASONIDO2 = 1){ PASO ; SALIR=2; WHILE (SALIR<1) {
if (ULTRASONIDO2 = 0) { TIEMPO ; SALIR=2 ; SONDA2=TEMPO ; void SCANER() { FOR (comando=1; comando=2;comando++){ ATRASUP ; FOR (comando=1; comando=12;comando++){ AVANCEUP ; DATOS ; SONDA1=SONDA2 ; DELAY_MS(500) ; FOR (comando=1; comando=2;comando++){ AVANCEUP ; FOR (comando=1; comando=8;comando++){ SERVOU=1 ; DELAY_US(1150) ; SERVOU=0 ;
DATOS ; SONDA3=SONDA2; DELAY_MS(500); // main void main() { INICIO(); WHILE (1){; SALIR=0; WHILE (SALIR<1){ IF (ENTRADA = 0){ AVANCE ; SALIR=2 ; DELAY_MS(1000); INC(CONTADOR); VALOR1=0; TM1 ; SALIR=0 WHILE (SALIR < 1){ DATOS ; AVANCE ; IF (SONDA2 < 500){ TM2 ; FOR (comando=1; comando=20;comando++){ ATRAS ;
FOR (comando=1; comando=50;comando++){ STOPI ; AVANCEDER; FOR (comando=1; comando=40;comando++){ STOPD; AVANCEIZQ; INTCON.GIE=1 ; FOR (ass=1; ass=2;ass++){ INC(VALOR1); TM1; IF (ENTRADA=0){ DELAY_MS(200) ; SALIR=2; TM2 VALOR2 = VALOR1 VALOR1 = 0 DELAY_MS(2000) ; WHILE (SALIR<1){ IF (ENTRADA = 0){ SALIR=2 ;
AVANCE ; DELAY_MS(1000) ; INC(CONTADOR) ; VALOR1=0 ; TM1 ; SALIR=0 WHILE (SALIR < 1){ DATOS ; AVANCE ; IF (SONDA2 < 500){ TM2 ; FOR (comando=1; comando=20;comando++){ ATRAS ; FOR (comando=1; comando=40;comando++){ STOPD ; AVANCEIZQ; FOR (comando=1; comando=45;comando++){ STOPI ; AVANCEDER ; FOR (ass=1; ass=30;ass++){ INC(VALOR1); TM1; IF (ENTRADA=0){ DELAY_MS(200);
SALIR=2 ; TM2 ; VALOR3 = VALOR1; VALOR1 = 0 ; DELAY_MS(2000); intentos[0].n_int=0; intentos[0].valor=valor2; intentos[1].n_int=1; intentos[1].valor=valor3; IF (intentos[0].valor < intentos[1].valor){ CMPN=0; ELSE CMPN=1 ; IF (CMPN=0){ WHILE (SALIR<1){ IF (ENTRADA = 0) { AVANCE ; SALIR=2 ; DELAY_MS(1000);
INC(CONTADOR); WHILE (SALIR < 1){ DATOS ; AVANCE ; IF (SONDA2 < 500){ FOR (comando=1; comando=20;comando++){ ATRAS ; FOR (comando=1; comando=50;comando++){ STOPI ; AVANCEDER; FOR (comando=1; comando=45;comando++){ STOPD ; AVANCEIZQ; IF (ENTRADA=0){ THEN DELAY_MS(200); SALIR=2 ; DELAY_MS(2000); IF (CONTADOR=3){ CONTADOR=0; ELSE
WHILE (SALIR<1){ IF (ENTRADA = 0){ AVANCE ; SALIR=2 ; DELAY_MS(1000) ; INC(CONTADOR) ; WHILE (SALIR < 1){ DATOS ; AVANCE ; FUNCION; IF (SONDA2 < 500) { FOR (comando=1; comando=20;comando++){ ATRAS ; FOR (comando=1; comando=50;comando++){ STOPD ; AVANCEIZQ; FOR (comando=1; comando=40;comando++){ STOPI; AVANCEDER; IF (ENTRADA=0){ DELAY_MS(200) ;
SALIR=2; DELAY_MS(2000); SALIR=0; IF (CONTADOR=3){ CONTADOR=0; //~!