Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

bitirme için ccs sorusu

Başlatan modernherakles, 16 Mayıs 2008, 14:06:11

modernherakles

arkadaşlar bu case'başıma neiş açtığını anlayamadım daha önce çalışan iki kod parçasını birleştirdiğimde pic'te tık yok acaba case altına birden fazla deyim yazınca kabul etmiyormu?
sorumu sonda sordum ancak gereksinim olurmu diye verici koduda yazdım ama arıza alıcı kodda bundan eminim cvplarınızı bekliyorum acele yardıma ihtiyaç var:(

kod iki parçadan oluşuyor ve 2 adet pic kullanılıyor.
aşağıda kodun bütünnü veriyorum:
saşağıda verici picin kodu duruyor.Senaryoya göre a0 pinine bağlı sensör lojik1 ise "A" ve lojik sıfırsa "B"gönderiyor.verici programda bir arızaya rastlamadım a ve b stringlerini rahatlıkla aldım..
Verici:
#include "C:\Documents and Settings\Bilgisayarım\Desktop\udea_ANa led-bas-çek\c_udea.h"


void ilk_ayar(void)
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_oscillator(False);

   // TODO: USER CODE!!

}void main()
{
ilk_ayar();
set_tris_a(0b00000001);
sonsuz:
/*if(input(PIN_A0)==1){
putc('A');//göndermek istediğiniz
delay_ms(10);}

else{

putc('B');//göndermek istediğiniz
delay_ms(10);}*/

while(input(PIN_A0)==1)
{   delay_ms(10);
   putc(0b1010101010101010); //uyandırma
   putc('x'); //öncü veri
   putc('A');

}
delay_ms(10);
while(input(PIN_A0)==0)
{  delay_ms(10);
   putc(0b1010101010101010); //uyandırma
   putc('x'); //öncü veri
   putc('B');
}
goto sonsuz;
}

Bu kod sorunsuz çalışıyor.


Arızalı alıcı odu ise burada:
#include "C:\Documents and Settings\Bilgisayarım\Desktop\dc_motor+udea\dc_motor ve udea.h"
#use fast_io(d)

void ilk_ayar()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_oscillator(False);

   // TODO: USER CODE!!

}

void main()

{
ilk_ayar();
set_tris_d(0x00);
while(1){

int veri;
tekrar:
while(getch()=='x'){
veri=getch();
switch (veri)
{
case 'A':output_D(0x01);
delay_ms(3000);
output_D(0x00);
delay_ms(1000);
output_D(0x02);
delay_ms(3000);goto tekrar;




case 'B':
output_D(0x00);goto tekrar;
default:
goto tekrar;
}goto tekrar;
}
}
}

anlaılacağı üzere dc motor sürülecekir ancak Case "A" dan sonraki satırdan
sonra sadece output_D(0xff);girerken çalışan devre orda sağa ve sola dönme hareketi yaptırmak istediğimde çalışmıyor.
sizden dikkatinizi kodun bu  bölgesine vermenizi rica ediyorum.
sebebini siz üstadlara sormak durumunda kaldım beraber çözüm üretebilirmiyiz?
If we hear, we forget; if we see, we remember; if we do, we understand – Confucius

ferdem

Ne demek istediğiniz tam anlaşılmıyor. 2. mesajınızda sorduğunuza göre:
"case" in altında birden çok satır kullanabilirsiniz. Diğer "case" e kadar ne yazarsanız çalışır.
"switch-case" yerine parantezli "if" kullanıp bu tereddütten kurtulabilirsiniz.

"output_D(0xff);girerken" demişsiniz programda output_D(0xff) ifadesi geçmiyor.

Tamam heyecanlıyız, hemen cevap almak istiyoruz ama yazdıktan sonra en az bir kere okuyalım. Sonra insanlar cevap yazamazlar çünkü yazılan anlaşılmıyor.

Hata ile karşılaştığınızda hatayı küçük parçalara bölerek ayıklamaya("debug") çalışınız(mümkünse simülasyon prog. dan yardım alarak), kodunuzu biraz karışık yazmışsınız sonra hata olunca bulunması zor oluyor. Switch-case yapısını kullancaksınız:
switch(veri){
	case	'A':
		printf("A geldi");
		break;

	case	'B':
		printf("B geldi");
		break;
	default:
		printf("Hiçbiri");
		break;


}


formatında kullanınız. İyi çalışmalar dilerim.

aliveli

birde aşağıdaki gibi dene
void main(){
int veri;
ilk_ayar();
set_tris_d(0x00);
while(1){
   while(getch()=='x'){
      veri=getch();
         switch (veri){
            case 'A': {output_D(0x01);
               delay_ms(3000);
               output_D(0x00);
               delay_ms(1000);
               output_D(0x02);
               delay_ms(3000); break; }

            case 'B': output_D(0x00);break;
                        }
                     }
           }
              }

modernherakles

kusura bakmayın internet olmadığından ancak girebildim.
aliveli arkadaşın dediği kodu uyguladım gerçektende benimkiyle birebir aynı mantıkta olmasına rağmen çalışmadı.bu kodu output_D(0xff);ile denesemde çalışmadı.
ferdem beyin ısrarla sorduğu bu Output_D(0xff) meselesini açıklamam gerekiyor sanırım.çünkü bu sorunumun belkemiğini oluşturuyor.yukarıda verici kodundan hiçbir farkı olmayan  şu kod çalışıyor:

void main()
{
ilk_ayar();
set_tris_d(0x00);
while(1){

int veri;
tekrar:
while(getch()=='x'){
veri=getch();
switch (veri)
{
case 'A':output_D(0xff);goto tekrar;
case 'B':output_D(0x00);goto tekrar;
}goto tekrar;
}
}
}[code]
ancak case'A'dan sonra yukarıdaki satırları ilave edince(yani motoru sağa sola çevirme)aynı olay çalışmıyor bunun sebebini ısararla arıyorum.yardımınızı bekliyorum.
If we hear, we forget; if we see, we remember; if we do, we understand – Confucius

modernherakles

ya sorunu kısmen çözebildim ama tam verim almadım kodu aşagıdaki hale getiridiğimde sensör lojik highlayınca D_portudaki led yanıyor sönüyor ve tekrar yanıyor geri dönüp beklemesi gerekirken rest yapamıyor ve yanık kalıyor.ancak çok ilginçtir parmağımı mclr ucundaki 4.7 ohmluk dirence yaklaştırınca devre reseti sağlıyor ve tekrar sensör okumasına müsait hale geliyor ve led sönüyor sebebi nedir sizce?
kod:
void main()
{
ilk_ayar();
set_tris_d(0x00);
while(1){

int veri;
sonsuz:

while(getch()=='x'){
veri=getch();
switch (veri)
{
case 'A':
{output_D(0x01);delay_ms(500);
               output_D(0x00);
               delay_ms(500);
               output_D(0x02);
               delay_ms(500);goto sonsuz;
}
case 'B':output_D(0x00);goto sonsuz;
goto sonsuz;
default:
  output_D(0x00);
    goto sonsuz;
}goto sonsuz;
}
}
}
If we hear, we forget; if we see, we remember; if we do, we understand – Confucius