if(temp=='a') // gelen veri a ise
{
//Su islemleri yap
output_bit(PIN_A3,1);
output_bit(PIN_A2,0);
temp=0X00;
}
yukarıda verilen örnekte gelen veri a olarak geliyor bu gelen veriyi a b c şeklinde nasıl tanımlarız bride alt alt alta tüm pinler için if deyimleri yaptığımda ilk 2 led yandı fakat diğerleri yanmadı 30 defa gönderdikten sonra bir led yandı
enable_interrupts(GLOBAL);
while(true)
{ enable_interrupts(int_rda);
if((getc()=='1') & (getc()=='1'))
{temp=0X00;
output_bit(PIN_B0,1);
}
if((getc()=='2') & (getc()=='1'))
{temp=0X00;
output_bit(PIN_B1,1);
}
şeklinde örnek yaptım fakat 1 1 gönderiyorum led yanıyor 2 1 gönderiyorum B1 yanmıyor 2 1 verisini peş peşe 10 defa gönderince yanıyor işin içinden çıkamadaım ISIS de deniyorum
bu tür konular benimde sorunum olmuştu. Bunu da basitçe şöyle çözmüşktüm.
Çünkü eğer gelen verilerin sıralamasında bir hata olursa işlemci gelen komutu hata olarak görür. Bazen bizden veya programdan kaynaklanabilen hatalar olabiliyor
(assembler kullandığımdan mantik farklı olabilir) gerektiğinde bunu bit işlemleri ile birlikte kullanıyorum.
1. veri için veriyi bir tampon belleğe atıyorum. (daha doğrusu istediğim veri gelmişse değişkene benim belirlediğim bir değer atıyorum)böylece 2. veri geldiği zaman sadece o tamponla birlikte karşılaştırıyorum. Böylece gelene ikinci veri sistem için geçerli değilse tambon belleği siliyorum.
burada dikkate ettiğim nokta ilk gelen verinin mümkün olduğu kadar 2. veri grubunun dışında kalmasıdır. (tabii bu bir ölçüm sonucu iletmekte bazı sorunlara yol açabiliyor).
hocam bişi anlamadım bir örnekle açıklarmısnız tek istediğim şu ben pc den gönderdiğim bilgiye dataya göre led yakmak tek gönderimli datalarda sorun yok mesela 1 datasını gönderdiğim zaman veya A led yanıyor fakat a ve b bilgisine denk gelen ledi yakamıyorum illaki 30 defa göndermek gerek basit bir uygulama yokmu saygılarımla
basitçe kod aşağıda.
if((getc()=='2') & (getc()=='1'))
{temp=0X00;
output_bit(PIN_B1,1);
}
neden 21 datasını 30 defa göndermek zorundayım led yanması için
değişken ak olsun.
ak=0 olsun
gelen 1. veriyi karşılaştır uygun ise ak=1 olsun
sonraki gelen veri ile birlikte ak karşılaştır.
bu durumda ak=1 olduğundan önce grup oluşturup ak=1 için karşılaştır sonraki karşılaştırmaların sadece 2. veri için olur.
pek programlama kurallarına uymadan
if ak='1'
{
if veri='1'
{
...
}
if veri='2'
{
...
}
...
ak='0'
veri=' '
}
if veri='t'
{
ak='1'
}
burudaki t verisinin 2. gelen veri aralığının dışında seçtiğinizi varsaymak yerinde olur.
her seferinde işlemciye her iki veriyi aynı anda test ettirmek aslında baya yüksek iş yükü getirebilir.
hocam güzel fakat yine bişi anlamadım maruz görün beni bunu ccs ye uyarlanmış hali nasıl olucak kafam durdu
tam uyarlanmış hali nasıl olucak
hocam neden cevap gelmiyor analdım bu kadar adam bilmiyor nasılsa ne yaprsan yap mı oldu şimdi yukarda açıklaması olan koda neden bir örnek verilmiyor........
main başlığı altında
int ak, veri
ak=='0'
while başlığı altında
veri=getc() //kesme başlığı altında gerçekleştirilebilir
if (ak=='1')
{
if (veri=='1')
{
komutların
}
else if (veri=='2')
{
komutların
}
else if (veri=='3')
{
komutların
}
ak=='0'
}
if (veri=='t')
{
ak=='1'
}
en azından bir fikir verebilir..
hocam bişi sormak istiyorum ben rs232 den 2 haneli bilgi gönderiyorum örnek : ab pic bunu algılamasını istiyorum fakat mevcut kodlarda nedense olmuyor olsada sorun oluyor burdada tek haneli veriler geliyor sanırım denicem şimdi
int ak=0;
int veri;
void main()
{
while(true)
//output_bit(PIN_B0,1);
veri=getc() //kesme başlığı altında gerçekleştirilebilir
if (ak=='1')
{
if (veri=='1')
{
}
else if (veri=='2')
{
}
else if (veri=='3')
{
}
ak=='0'
}
if (veri=='t')
{
ak=='1'
}
}
olmuyor mevcut kodların aynısı benim istediğim analataamdım ehrhalde gelen verileri alt alta if değimlerini alt alta sıraldığım zaman bri komutun işlemesiiçin göderdiğim datayı en az 30 defa göndermek zorunda kalıyorum
arkadaşlar ccs de yazılmış bir örnek varmı .... lütfen ... fikir vercek tüm kodalrı denedim olmuyor sizin fikir diye vermiş olduğunu kodlar denenmeden etmeden koyuluyor koymayın çalışır denenmiş örneklere ihtiyacım var ben oturup burda deniyorum ama verilen kodalr denenmeden etmeden konuyor olmuyor...
istediğim şu örnek: ab komutunu algıladığı zaman led1 / b c komutunu aldığı zaman led2 yansın
gelen veri 2 adet özellikle belirtiyorum lütfen fikir verici kod koyulmaşın çalışır uygulama gönderilen ver data 2 veya fazla ola bilir .. tek haneli datalarda sıkıntı yok sıkıntı 1 den fazla datası olanalrda örnek uygulama koyun lütfenn fikir kodlar koymayın
c = getc(); // Wait for a key to be pressed.
if(c=='1')
{
output_high(PIN_B1);// b1 açık
}
else if(c == '2')
{
output_high(PIN_B2); // b2 açık b1 kapat
}
else if(c == '3')
------------------------------------------------------------ bu kodda sıkıntır yok
if((getc()=='4') & (getc()=='0')) bu kodda sıkıntı var 40 gönderdiğim zaman led yanıyor fakat bu sorgulama alt alta koyduğum zaman çokolduğu zaman ledler yanmıyor bir ledi yakana kadar 30 defa 40 komutunu gönderiyorum hangi data geliyosa oled yansın umarım anlata bildim
aslında işin başında sormam gerekirdi, seri porttan gelen veriyi nasıl alıyorsun, kesme ile mi?
Kesme (interrupt) kullanmıyorsan sen kontrol edene yani gelen veriyi işleyene kadar gönderdiğin verileren sonraki ilk gelen verinin üzerine yazar.
Özellikle uzun if kontrol rutinleri bu işlemin aksamasına neden olabilir. bu nedenle her ikisi aynı olan 1,1 ve 2,2 gibi veri grupları kolayca işlenebilir. ama 1,2 gibi veri grubu ise ancak şansa kalmıştır.
hocam kaynak kodu gönderiyim size isterseniz ama benim istediğim sonuç enden istediğim ledi yakamıyorum onu anlamadım tek adet li datalarde sorun yokm ama çift gönderdiğim datalarda sorun var farklı bir yol yöntem