Kod:
#include <16F877A.h>
#device adc=10
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(c)
unsigned int8 sensorler=0solpwm=0sagpwm=0;
void main()
{
setup_timer_2(T2_DIV_BY_12491); //50.0 us overflow 50.0 us interrupt
setup_ccp1(CCP_PWM); // ccp1 ucu pwm çıkışı olarak ayarlandı
setup_ccp2(CCP_PWM); // ccp2 ucu pwm çıkışı olarak ayarlandı
set_tris_a(0xFF); // a portunu giriş olarak ayarla
set_tris_c(0xF0);
while(true) //sonsuz döngü
{
sensorler = input_a(); // A porundaki tüm pinleri oku
sensorler = sensorler * 0b00101111; // Sensörden gelen değerleri maskeleyerek al
// birinci ifade beyaz zemin üzeri siyah çizgi için
// ikinci ifade siyah zemin üzerine beyaz çizgi için
//Düz git
if(sensorler==0b00000100 || sensorler==0b00101011)
{
solpwm=990;
sagpwm=990;
}
//sola dön vites1
if(sensorler==0b00000110 || sensorler==0b00101001)
{
solpwm=700;
sagpwm=990;
}
//saga dön vites1
if(sensorler==0b00001100 || sensorler==0b00100011)
{
solpwm=990;
sagpwm=700;
}
//sola dön vites2
if(sensorler==0b00000010 || sensorler==0b00101101)
{
solpwm=500;
sagpwm=990;
}
//saga dön vites2
if(sensorler==0b00001000 || sensorler==0b00100111)
{
solpwm=990;
sagpwm=500;
}
//sola dön vites3
if(sensorler==0b00000011 || sensorler==0b00101100)
{
solpwm=300;
sagpwm=990;
}
//saga dön vites3
if(sensorler==0b00101000 || sensorler==0b00000111)
{
solpwm=990;
sagpwm=300;
}
//sola dön vites4
if(sensorler==0b00100000 || sensorler==0b00001111)
{
solpwm=0;
sagpwm=990;
}
//saga dön vites4
if(sensorler==0b00000001 || sensorler==0b00101110)
{
solpwm=990;
sagpwm=0;
}
set_pwm1_duty(solpwm);
set_pwm2_duty(sagpwm);
}
}