Saludos, bueno para comenzar me parece que el micro que estas empleando es demasiado para la aplicación en cuestión, podrías emplear uno más pequeño y barato. Por otro lado en la simulación te falto emplear resistencias en los pulsadores y colocar el pin EN1 y EN2 del l293d a nivel alto, esto te evitara problemas al momento de realizar el montaje real, las resistencias fueron colocadas de modo que cumplan con las condiciones de tu programa.
En cuanto al programa el motivo por el cual mostraba los leds encendidos todo el tiempo se debe a tus sentencias “ELSE”, el pic al no detectar que se presiona un pulsador siempre ingresaban a las sentencias “ELSE” en donde se encendían los leds y por eso parecía que los leds se encontraban todo el tiempo encendidos, y como tu condición es que se ejecute una acción solo cuando se presione un pulsador cambie los “IF” por “WHILE” para que se quede ejecutando la acción mientras se presiona el botón ejecutada la misma se pondrá todo en cero y listo. Como no se explica bien en tu comentario para que empleas los leds asumo que son para indicar el estado de cada motor. Espero te sirva de ayuda, dejo el código y la simulación en formato rar bye
.
#include <16f877.h>
#byte LEDS=0x07//CONFIGURO TODO EL BYTE PARA LOS LEDS EN EL PUERTO C
#byte MOTORES=0x08//CONFIGURO TODO EL BYTE PARA LOS MOTORES EN EL PUERTO D
#bit led_amarillo_1=0x07.0//PARA CONECTAR UN SOLO LED EN EL PIN RC7.0
#bit led_amarillo_2=0x07.1//PARA CONECTAR UN SOLO LED EN EL PIN RC7.1
#bit led_rojo_1=0x07.2//PARA CONECTAR UN SOLO LED EN EL PIN RC7.2
#bit led_rojo_2=0x07.3//PARA CONECTAR UN SOLO LED EN EL PIN RC7.3
#bit pulsador_A=0x05.0//PARA CONECTAR EL PULSADOR A EN EL PIN RA0
#bit pulsador_B=0x05.1//PARA CONECTAR EL PULSADOR B EN EL PIN RA1
#bit pulsador_C=0x05.2//PARA CONECTAR EL PULSADOR C EN EL PIN RA2
#bit pulsador_D=0x05.3//PARA CONECTAR EL PULSADOR D EN EL PIN RA3
#bit MOTOR1_DER=0x08.0//PARA CONECTAR UN MOTOR DE GIRO DERECHA EN EL PIN RD0
#bit MOTOR1_IZQ=0x08.1//PARA CONECTAR UN MOTOR DE GIRO IZQUIERDA EN EL PIN RD1
#bit MOTOR2_DER=0x08.2//PARA CONECTAR UN MOTOR DE GIRO DERECHA EN EL PIN RD2
#bit MOTOR2_IZQ=0x08.3//PARA CONECTAR UN MOTOR DE GIRO IZQUIERDA EN EL PIN RD3
#byte tris_led=0x87//PARA DECIRLE SI VA A HACER ENTRADA O SALIDA LOS LED
#byte tris_pulsador=0x85//PARA DECIRLE SI VA A HACER ENTRADA O SALIDA LOS PULSADORES
#byte tris_motores=0x88//PARA DECIRLE SI VA A HACER ENTRADA O SALIDA LOS MOTORES
void main()
{
tris_pulsador=0b11111111;//CONFIGURO LOS PULSADORES COMO ENTRADAS
tris_led=0b11110000;//CONFIGURO LOS LED COMO SALIDAS
tris_motores=0b11110000;//CONFIGURO LOS MOTORES COMO SALIDAS
leds=0x00;//COMIENZAN LOS LEDS APAGADOS
motores=0x00;//COMIENZAN LOS MOTORES APAGADOS
while(1)
{
while(pulsador_A==1) //SI PULSADOR A SE MANTIENE EN ESTE CICLO
{
led_amarillo_1=1; //SE ENCIENDEN LOS LEDS INDICADORES
led_amarillo_2=1;
MOTOR1_DER=1; //LOS MOTORES 1 Y 2 DERECHA SE ACTIVAN
MOTOR2_DER=1;
};
leds=0x00; //SI SE ENCENDERÍAN LOS LEDS POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
motores=0x00; //SI SE ENCENDERÍAN LOS MOTORES POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
while(pulsador_B==1)//SI SE MANTIENE PRESIONADO B
{
led_rojo_1=1;
led_rojo_2=1; //LOS MOTORES Y 2 IZQUIERDA SE ACTIVAN PARA QUE EL CARRITO RETROCEDA
MOTOR1_IZQ=1;
MOTOR2_IZQ=1;
}
leds=0x00; //SI SE ENCENDERÍAN LOS LEDS POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
motores=0x00; //SI SE ENCENDERÍAN LOS MOTORES POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
while(pulsador_C==1)//AQUÍ ES DONDE QUIERO QUE AL PRESIONAR C, EL MOTOR 1 DERECHA SE ACTIVE SOLAMENTE
{
led_amarillo_1=1; //SE ACTIVA EL LED QUE INDICA QUE EL MOTOR 1 DERECHA SE ENCIENDE;
MOTOR1_DER=1; //SE ACTIVA EL MOTOR
};
leds=0x00; //SI SE ENCENDERÍAN LOS LEDS POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
motores=0x00; //SI SE ENCENDERÍAN LOS MOTORES POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
while(pulsador_D==1)//AQUÍ ES DONDE QUIERO QUE AL PRESIONAR C, EL MOTOR 1 DERECHA SE ACTIVE SOLAMENTE
{
led_amarillo_2=1; //SE ACTIVA EL LED QUE INDICA QUE EL MOTOR 1 DERECHA SE ENCIENDE;
MOTOR2_DER=1; //SE ACTIVA EL MOTOR
};
leds=0x00; //SI SE ENCENDERÍAN LOS LEDS POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
motores=0x00; //SI SE ENCENDERÍAN LOS MOTORES POR LA OPERACIÓN ANTERIOR SERÁN APAGADOS
};
}