You are on page 1of 2

#include <16f877A.

h>
#include <def_877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#define EN_LEFT RC1
#define EN_RIGHT RC2
#define SENSOR PORTD
void motor_left_forward();
void motor_left_stop();
void motor_right_forward();
void
void
void
void
void

motor_right_stop();
forward();
stop();
turn_left();
turn_right();

void motor_left_forward()
{
EN_LEFT=1;
setup_timer_2(T2_DIV_BY_4,124,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(125);
}

// Dieu xung 10kHz

void motor_left_stop()
{
EN_LEFT=0; //
setup_ccp1 (CCP_OFF);
}
void motor_right_forward()
{
EN_RIGHT=1;
setup_timer_2(T2_DIV_BY_4,124,1);
setup_ccp1(CCP_PWM);
set_pwm2_duty(125);
}
void motor_right_stop()
{
EN_RIGHT=0;
setup_ccp1(CCP_OFF);
}
void forward()
{
motor_left_forward();
motor_right_forward();
}
void stop()
{
motor_left_stop();

// Dieu xung 10kHz

motor_right_stop();
}
void turn_right()
{
motor_left_forward();
motor_right_stop();
}
void turn_left()
{
motor_left_stop();
motor_right_forward();
}
void main ()
{
TRISC=0x00; // PORTC l ng ra
TRISD=0x00; // PORTD l ng vo
PORTC=0x00;
while(1)
{
switch (SENSOR)
{
case 0b00011000: forward(); break;
case 0b00001100: turn_right(); break;
case 0b00000110: turn_right(); break;
case 0b00000011: turn_right(); break;
case 0b00000001: turn_right(); break;
case 0b00110000: turn_left(); break;
case 0b01100000: turn_left(); break;
case 0b11000000: turn_left(); break;
case 0b10000000: turn_left(); break;
case 0b00001110: turn_right(); break;
case 0b00001111: turn_right(); break;
case 0b01110000: turn_left(); break;
case 0b11110000: turn_left(); break;
}
}
}

You might also like