CCS C ile Seri İletişim Bipolar Step motor sürme

eemoznulut

Üye
Katılım
2 Ağu 2009
Mesajlar
9
Puanları
1
Yaş
35
arkadaşlar yazmaya calıştığım programda rs232 seri bağlantı ile motoru sağ yada sola döndürmeye çalışıyorum. fakat bi türlü istediğimi yapamadım.
kısaca açıklayım: girdiğim tuş r ise sağa l ise sola donsun diğer tşlardan herhangi birine basıldığında ise çalışmasın istiyorum. yazdığım kodda mantık hatası da olabilir yada kullanım hatası.... merak ettiğim nokta kbhit() fonksiyonunu nasıl kullanabilirim? yardımcı olursanız sevinirim.

#include "c:\users\mug\desktop\cnc\step motor.h"

int i;
char j;
int sure=40;

void main()
{

setup_adc_ports(no_analogs);
setup_adc(adc_off);
setup_psp(psp_dısabled);
setup_spi(spı_ss_dısabled);
setup_timer_1(t1_dısabled);
setup_timer_2(t2_dısabled,0,1);

set_tris_b(0x00);
output_b(0x00);

basla:

j=getch();
putc(j);

if(j='r')
{
sag:
while(1)
{

for(i=1;i<=1;i++)
{
output_low(pin_b3);
output_high(pin_b0);
delay_ms(sure);


output_low(pin_b0);
output_high(pin_b1);
delay_ms(sure);


output_low(pin_b1);
output_high(pin_b2);
delay_ms(sure);


output_low(pin_b2);
output_high(pin_b3);
delay_ms(sure);

}
if(kbhit())
{

break;
goto basla;
}
else
goto sag;
}
}
else if(j='l')
{
sol:
while(1)
{

for(i=1;i<=1;i++)
{
output_low(pin_b0);
output_high(pin_b3);
delay_ms(sure);


output_low(pin_b3);
output_high(pin_b2);
delay_ms(sure);


output_low(pin_b2);
output_high(pin_b1);
delay_ms(sure);


output_low(pin_b1);
output_high(pin_b0);
delay_ms(sure);

}
if(kbhit())
{

break;
goto basla;
}
else
goto sol;
}
}
else
break;
}
 
Çok kötü bir kod yazmışsın. Çözmek bile çok zor. C dilinin en önemli özelliği okunabilir olması ama sen bunu katletmişsin. Mümkün mertebe goto break filan kullanmayacaksın. Ayrıca mantık hataları da var. for(a=0;a<1;a++) olmalı, seninki olmamış. Ayrıca while(1) sonsuz döngüsüne sokmuşsun, orda da ne oluyor belli değil, karışmış gitmiş.

Kısaca olayları fonksiyon fonksiyon yazacaksın. Basic gibi dumduz yazmayacaksın.

kbhit() fonksiyonu şöyle çalışır.


while(!kbhit()); // bir tuşa basılmamışsa program basılana kadar bu satırda beklesin
deger=getch(); // basıldıysa değeri al.


eğer program döngü icinde baska seyler yapacaksa

while(1)
{

sunu_yap();
bunu_yap();
if(kbhit()) deger=getch(); // tusa basıldıysa tusu oku

if(deger='r') saga_don();
if(deger='l') sola_don();



} // gibi. C dilinde yazımını geliştirmen lazım, kimse yardımcı olamaz yoksa.
 
öncelikle cevap verdiğin için teşekkür ederim. programlaya daha yeni başlayan birisiyim. işin pratik ve temel kullanım alanlarını açıkçası bilmiyorum. bu kadar kötü yazılmış bir program için bile olsa yardımcı olmana sevindim. merak ettiğim bişi var. rs232 seri iletişimi ile bilgisayara gidriğim veriyi mesela k=getch() ile değişkene atadım. Bu atadığım veri ne tür bi veri. Yapmaya çalıştığım bi programda da bilgisayardan girdiğim sayı değerlerini 7segmentte 0-f aralığında yazrıdmak istiyorum fakat bu işlemi bi türü yaptıramadım.bu kısımda yazmaya çalıştığım program

int k=0;
char sayi[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8E,0xff};
void main()
{
while(1)
{
k=getch();
output_b(sayi[k]);
delay_ms(1);

}
}
farkındayım acayip derece de mantık hatasının olduğunun yada kodları doğru kullanmadığımın... ama dediğim gibi bi şekilde öğrenmeye başlamak istiyorum . yardımcı olursan sevinirim.
 
Seri port düzgün ayarlanmışsa, bu program klavyeden 1 2 3 4 gibi bastıkça pic in B portuna sayi dizisindeki ilgili değeri yazacaktır. B portuna da 7 segment taktın herhalde. Segmentte bu değerleri görürsün.


AMA

#include <stdlib.h>
output_b(sayi[atoi(k)]);

yaparsan çalışır.






getch , sadece 1 karakter alır. 1 2 A B gibi
 

Forum istatistikleri

Konular
128,128
Mesajlar
915,266
Kullanıcılar
449,843
Son üye
hvncrblt

Yeni konular

Geri
Üst