rs232 rs485 data alma veya işleme sorunu.

Başlatan OtacoN, 28 Ocak 2013, 22:35:37

OtacoN

Arkadaşlar iki tane pic arasinda haberleşme yapmak istiyorum,rs232  kodları ile rs485 protokolü ve donanımı ile(max487),
18f2550 (usb için kullanıyorum,18f4550'de aynı sorunu çıkardı.)'den 16f877a 'ye string gönderiyorum ve data bekleme moduna geçiyorum,877 bunu alıyor ve güzelce yorumluyor ,kendisi de benim belirlediğim datayı 18f2550'ye gönderiyor,virtual terminal ile yaptığım gözlemlere göre 18f2550'ye gelen data,pic'in bacağına (rx) kadar geliyor fakat pic while(kbhit()); komutunda bekliyor hala. Aklım almadı,herşeyi defalarca kontrol ettim,ya bilgi eksiğim var yada bir hata var göremiyorum.

18f2550(master)

#include<18f2550.h>

#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT,PUT,HS //PUT, HS, NOWDT, NOLVP, NOBROWNOUT
#use delay(clock=8000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C2,stop=1,parity=N)



char data[]="003xAxNxS",gelen;


 

void main()
{  
   
   
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
   
   set_tris_a(0x00);
   set_tris_b(0x00);
   


   
   output_a(0x00);
   output_b(0x00);
   
   
   output_high(pin_b6);
   
gonder:

   puts(data);    // "003xAxNxS" stringi gönder.
   
   
while(kbhit());  // veri bekle

   {
      gelen=getc();
      
      if(gelen==50)
      output_b(0xFF);
      output_b(0b01010101);  // else
 
   }

}
   


16f877a

#include<16f877a.h>

#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT
#use delay(clock=8000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,enable=pin_d0,stop=1,parity=N)

char data[9];
int adres;
void main()
{  
   set_tris_b(0x00);
   set_tris_a(0x00);
   output_a(0x00);
   output_b(0x00);

bekle:
   
      while(kbhit());
      
         
        gets(data); 
  
         adres=((((int)data[0]-48)*100)+(((int)data[1]-48)*10)+(((int)data[2]-48)));  
  
        if(adres==3)
        
        switch(data[4])
         {
            case 'A':
                     output_high(pin_b0);
                     break;
            case 'B':
                     output_high(pin_b1);
                     break;
            case '0':
                     output_low(pin_b0);
                     output_low(pin_b1);
                     break;
            default:
                     output_b(0x00);
                     break;
         }
        
         delay_ms(200);
         
         if(adres==3)
        
         
         switch(data[6])
         {
            
            case 'M':
                     output_high(pin_b2);
                     break;
            case 'N':
                     output_high(pin_b3);
                     break;
            case '0':
                     output_low(pin_b2);
                     output_low(pin_b3);
                     break;         
            default:
                     output_b(0x00);
                     break;
                     
         
        }
         
         delay_ms(200);
         
         if(adres==3)
        
         switch (data[8])
         {
         
            case 'S':
                     output_high(pin_b4);
                     break;
            case 'P':
                     output_high(pin_b5);
                     break;
            case '0':
                     output_low(pin_b4);
                     output_low(pin_b5);
                     break;
            default: 
                     output_b(0x00);
                     break;



         
         }
         
         delay_ms(2000);
         
         putchar(50);
         
         
         goto bekle;
                 
}
     


Kodlar belki araştıran arkadaşlara da yardımcı olur.

Anlattığım gibi data 877'ye gidiyor ,aynı şekilde 2550'nin bacağına kadar ulaşıyor.
Yardımcı olursanız sevinirim.

ISIS Dosyalarını da bi yerlere yükleyip paylaşacağım birazdan.

Teşekkür ederim.
"Ne kadar zengin ve müreffeh olursa olsun, istiklâlden mahrum bir millet, medenî insanlık karşısında uşak olmak mevkiinden yüksek bir muameleye lâyık sayılamaz."Gazi Mustafa Kemal Atatürk

yldzelektronik

gets fonksiyonundan uzak durun derim.Ayrıca veri alma işini seri veri alma kesmesi ile yapın.string veri almak için for göndüsünde yada benzeri yapıda getch kullanın.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

OtacoN

#2
16f877'nin datayı aynı kodlarla alması fakat 18f2550'nin almaması neden ama?

Dediğiniz şekilde deneyeceğim teşekkürler.

http://www.mediafire.com/?y0endmlz1xex54v

Isis dosyası.Kodlar ve Hex.
"Ne kadar zengin ve müreffeh olursa olsun, istiklâlden mahrum bir millet, medenî insanlık karşısında uşak olmak mevkiinden yüksek bir muameleye lâyık sayılamaz."Gazi Mustafa Kemal Atatürk

OtacoN

Sanırım konu biraz yabancı arkadaşlar :) Eyvallah. ???
"Ne kadar zengin ve müreffeh olursa olsun, istiklâlden mahrum bir millet, medenî insanlık karşısında uşak olmak mevkiinden yüksek bir muameleye lâyık sayılamaz."Gazi Mustafa Kemal Atatürk

chamakh48

OtacoN , hocam isis ve kod paylaşımı yaptığınız link bozuk yenileyebilirmisiniz acaba