*Program CCS C derleyicisinde yazılmıştır. On-Off Kontrol programı
#
include
<16F877A.h>
#device adc=10
#FUSES HS
//High speed Osc (> 4mhz)
#
use
delay(clock=20000000)
#
use
fast_io (a)
#
use
fast_io (c)
void main()
{
set_tris_a(0xFF);
set_tris_c(0xF0);
while
(true)
{
if
(input(pin_a0)==1)
{
output_c(0x0a);
// Sağ geri sol ileri
}
if
(input(pin_a1)==1)
{
output_c(0x02);
// Sağ duruyor sol ileri
}
if
(input(pin_a2)==1)
{
output_c(0x06);
// Sağ ileri sol ileri
}
if
(input(pin_a3)==1)
{
output_c(0x04);
// Sağ ileri sol duruyor
}
if
(input(pin_a5)==1)
{
output_c(0x05);
// Sağ ileri sol geri
}
}
}
PWM programı
#
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=0,solpwm=0,sagpwm=0;
void main()
{
setup_timer_2(T2_DIV_BY_1,249,1);
//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 *
"b00101111"
;
// 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==
"b00000100"
|| sensorler==
"b00101011"
)
{
solpwm=990;
sagpwm=990;
}
//sola dön vites1
if
(sensorler==
"b00000110"
|| sensorler==
"b00101001"
)
{
solpwm=700;
sagpwm=990;
}
//saga dön vites1
if
(sensorler==
"b00001100"
|| sensorler==
"b00100011"
)
{
solpwm=990;
sagpwm=700;
}
//sola dön vites2
if
(sensorler==
"b00000010"
|| sensorler==
"b00101101"
)
{
solpwm=500;
sagpwm=990;
}
//saga dön vites2
if
(sensorler==
"b00001000"
|| sensorler==
"b00100111"
)
{
solpwm=990;
sagpwm=500;
}
//sola dön vites3
if
(sensorler==
"b00000011"
|| sensorler==
"b00101100"
)
{
solpwm=300;
sagpwm=990;
}
//saga dön vites3
if
(sensorler==
"b00101000"
|| sensorler==
"b00000111"
)
{
solpwm=990;
sagpwm=300;
}
//sola dön vites4
if
(sensorler==
"b00100000"
|| sensorler==
"b00001111"
)
{
solpwm=0;
sagpwm=990;
}
//saga dön vites4
if
(sensorler==
"b00000001"
|| sensorler==
"b00101110"
)
{
solpwm=990;
sagpwm=0;
}
set_pwm1_duty(solpwm);
set_pwm2_duty(sagpwm);
}
}
Projenin proteus dosyalarını buradan indirebilirsiniz.iNdirme Sitesi: http://www.emrahbudak.com/indir/cizgi_izleyen_robot.rar
0 Yorumlar