Haberler:

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

Ana Menü

c# üzerinden veri gönderme

Başlatan chezque, 15 Mayıs 2012, 22:34:30

chezque

arkadaşlar ben ilk defa c# üzerinden veri gönderme olayını yapmaya çalışıyorum da. şimdi csharpta

public void Send_Bilgi(string msg)
        {
            if (!Sp.IsOpen) Sp.Open();
            string msg1 = msg;
            Sp.Write(msg1);
            Sp.Close();

        }


şeklinde bir kod ile "Send_Bilgi"yi yolluyorum. send_bilgi dediği 1 numaralı butona bastığımda kod altında "Send_Bilgi("1");" şeklinde işliyor. ama bunun pic için olan kısmında ne yazacağımı anlamadım. 16f628a kullanıyorum. yardım ederseniz gerçekten sevinirim.

kudretuzuner

Merhaba
Bilgiyi alacak olan taraftaki elemanın yazılımı uygun mu?Konuyu biraz daha açarsanız yardımcı olacak arkadaş çıkar.
Amatör

chezque

yazılımı uygun mu derken? anlamadım vallahi. pic içi programı diyorsan orada takılıyorum zaten. şu şekilde tanımladığım da olumlu sonuç alamadım.

#include <16F628a.h>
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

int Send_Bilgi;
void main()
{
while(1)
if (Send_Bilgi==1)
{
    output_high(pin_b2);
}
else if (Send_Bilgi==2)
{
    output_high(pin_b3);
}
else if (Send_Bilgi==3)
{
    output_high(pin_b4);
}


CoşkuN

Gönderirken String olarak gönderdiğinden sayısının ASCII tablosundaki karşılık değeri gidiyor. PIC'deki programda   gelen_veri== 1 yerine gelen_veri =="1" şeklinde kontrol yapman lazım. String'lerin sonunda da satır sonu karakteri gönderiliyor olabilir tabi. O zaman en garantisi C# tarafından int tipinde yollaman verileri...

kudretuzuner

Merhaba
PIC'e atacağınız programı vereyim.PC'den yollayacağınız 1 baytlık bilginin alt dört biti görülür.
LIST P=16F628
INCLUDE "P16F628.INC"
__CONFIG H'0021'
ORG H'0000'
SAYAC EQU H'20'
SAYAC1 EQU H'21'
SAYAC2 EQU H'22'
MOVLW H'07'
MOVWF CMCON
CLRF PORTA
CLRF PORTB
BANKSEL TRISA
MOVLW B'11110000'
MOVWF TRISA
MOVWF B'11101011'
MOVWF TRISB
TERMNAL
BSF STATUS,5;ÖNEMLİ KODDDD
MOVLW D'25';    9600 BAUD RATE İÇİN GİRİLEN DEĞER
MOVWF SPBRG
MOVLW B'000100100';   SYNC=0 (4.BİT),BRGH=1 (2.BİT)
MOVWF TXSTA
BANKSEL PORTB
MOVLW B'10010000';SPEN=1 (7.BİT),CREN=1 (4.BİT)
MOVWF RCSTA
LED_GONDER
CALL VERI_AL
MOVWF PORTA;burada PORTA daki  dört adet ledler alt dört biti gösterir.
GOTO LED_GONDER
VERI_AL
BTFSS PIR1,RCIF;  RCIF BAYRAĞI  (1) Mİ?
GOTO VERI_AL
BCF PIR1,RCIF;---ÇOK ÖNEMLİ  KODDDD
MOVF RCREG,W
RETURN
;*********
END
;*********
Amatör

yldzelektronik

Hocam arkadaş veriyi alacak herhangi bir fonksiyon çağırmamış ki.Program içinde değişkene bir değer atanmamış nasıl olurda sorgulanabilir ki?Dostum gelen veriyi kontrol etmen için gets(),getc(),getch(),getchar() gibi fonksiyonlar mevcut.Bu arada eğer mümkünse mcunun donanımsal seri portunu kullan ve rx kesmesi kullan.Çok verimli oluyor.İki taraf aynı olsun.Yada eğer kodunun tamamı bu değilse paylaş ona göre yorumlayalım.İyi çalışmalar
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

chezque

hocam yazdığım kod aynen şu şekilde;

#include <16F628a.h>

#FUSES NOWDT            //No Watch Dog Timer
#FUSES INTRC_IO          //Internal RC Osc, no CLKOUT
#FUSES NOPUT            //No Power Up Timer
#FUSES PROTECT           //Code protected from reads
#FUSES NOBROWNOUT         //No brownout reset
#FUSES NOMCLR           //Master Clear pin used for I/O
#FUSES NOLVP            //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD            //No EE protection

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

int Send_Bilgi;
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
     
   while(1)
   {
      Send_Bilgi=getc();
      if(Send_Bilgi="1");
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
      if(Send_Bilgi="2");
      {
         output_low(pin_b3);
         output_high(pin_b4);
         output_low(pin_b5);
         output_high(pin_b6);
         delay_ms(500);
      }
      if(Send_Bilgi="3");
      {
         output_high(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
      if(Send_Bilgi="4");
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_high(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
      if(Send_Bilgi="5");
      {
         output_low(pin_b3);
         output_low(pin_b4);
         output_low(pin_b5);
         output_low(pin_b6);
         delay_ms(500);
      }
   }

}

alemali

doğru bağlantıları yapmışsan çalışması lazım..
öneriler..
max232 kullanabilirsin...
c# baud falan ayarları kontrol edebilirsin.
seri port konnektöründeki 2. ve 3. bacak bağlantılarını değiştirebilirsin   .  belki çaprazlamamişsindir..
bilgisayardan gelen kabloya 220r lik bir dirençle led bağla uzun bir string yolla bak lad  yanıyormu..
ccs c  de if(kbhit()) kullanıp veri gelip gelmediğini falan kontrol et.
bi çıkış yolu bulursun muhakkak.
kolay gelsin.. ;)