Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: since1990 - 29 Ekim 2011, 22:24:29

Başlık: c# kesme yakalamak.
Gönderen: since1990 - 29 Ekim 2011, 22:24:29
Arkadaşlar eğer böyle bir konu vardıysada ben bulamadım 1 saattir arıyorum. Yada Buldum ama anlamadım.
Aynı picte olduğu gibi C# tada kesme fonksiyonu yazabilirmiyiz? Örneğin
pic ten c# a data geldiği zaman onu bir değişkenini içerisine kaydetmesini istiyorum.
yani anlık okuma değil data geldiği zaman kesme gibi onu kaydedecek.
Başlık: Ynt: c# kesme yakalamak.
Gönderen: muhittin_kaplan - 29 Ekim 2011, 22:28:19
zaten öyle çalışır.
rs232 den bilgi geldiğinde ilgili prosedür çalıştırılır.
Başlık: Ynt: c# kesme yakalamak.
Gönderen: muhittin_kaplan - 29 Ekim 2011, 22:30:18
SerialPort1_DataReceived çalışıyor
Başlık: Ynt: c# kesme yakalamak.
Gönderen: jozzef - 29 Ekim 2011, 22:31:22
Eğer program içerisinde (arayüz) interrupt oluşturmak istiyorsanız, Delegate ve Event konularına bakınız işinizi görecektir.
Başlık: Ynt: c# kesme yakalamak.
Gönderen: since1990 - 29 Ekim 2011, 22:33:05
ccs ten bir örnek veriyim


#int_rda
void rs232_kesme()
{gelen=getc();}

ccs te bu işi yapan kodun c# için nasıl yazabilirim?
Başlık: Ynt: c# kesme yakalamak.
Gönderen: muhittin_kaplan - 29 Ekim 2011, 22:36:17
bende ondan bahsediyorum.
eğer formun üzerine bir SerialPort ekleysen (serialport1 adında oluşur) oserial port  nesnesinin SerialPort1_DataReceived olayı zaten tetiklemeli olarak çalışır.
yani sadece data geldiğinde o komut çalışır
Başlık: Ynt: c# kesme yakalamak.
Gönderen: since1990 - 29 Ekim 2011, 22:38:52
Pc ile pic i yeni yeni başladım tanıştırmaya. Pic pic konusunda biraaz yol katettiğimi düşünüyorum.
Şimdi amacaım şu
diyelim pcye 1 gönderecem picin a portunu pcye gönderecek 2 gönderecem b portunu gönderecek.
Şu anda pic e 1 lcd bağlı. ve max232 ile pic - pc bağlı.
            byte data = Convert.ToByte(textBox1.Text);

            byte[] buffer = { data };

       

            SerialPort port1 = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
            port1.Open();
            port1.Write(buffer, 0, 1);
            port1.Close();
           
            MessageBox.Show("Com3 Portundan "+data + " Datası Gönderildi");


böyle bir şekilde pc den pice sayi gönderiyorum 1 yazıyorum text boxa pic 127 yazıyor ekrana 2 yazıyorum 63 yazıyor. Bununda sebebini öğrenebilirsem memnun olurum.
Başlık: Ynt: c# kesme yakalamak.
Gönderen: since1990 - 29 Ekim 2011, 22:40:48
Ama kodlar yukarıdan aşağıya işleniyormu? bunu bir fonksiyon gibi mi yazacağım?
button1 click eventin içerisine mi yazacağım harici fonksiyon gibimi?

void SerialPort1_DataReceived()

gibi mi?
Başlık: Ynt: c# kesme yakalamak.
Gönderen: muhittin_kaplan - 29 Ekim 2011, 22:44:04
şimdi oldu sen nesneyi kodlarla oluşturmussun. yukardaki arkadaşın dediği gibi event ve delegate leri araştırman gerek.
Alıntı Yapböyle bir şekilde pc den pice sayi gönderiyorum 1 yazıyorum text boxa pic 127 yazıyor ekrana 2 yazıyorum 63 yazıyor. Bununda sebebini öğrenebilirsem memnun olurum
sanki ters gibi
yani 1000000 gönderiyorsun
ve 0100000 gönderiyorsun.
Başlık: Ynt: c# kesme yakalamak.
Gönderen: muhittin_kaplan - 29 Ekim 2011, 22:46:26
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx
Başlık: Ynt: c# kesme yakalamak.
Gönderen: since1990 - 29 Ekim 2011, 22:49:34
Sanırım gönderdiğiniz son link işimi görüyor.. :D Teşekkürler..
Başlık: Ynt: c# kesme yakalamak.
Gönderen: muhittin_kaplan - 29 Ekim 2011, 22:50:38
Bill amca :D
Başlık: Ynt: c# kesme yakalamak.
Gönderen: since1990 - 30 Ekim 2011, 16:51:39
        public void seriport_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
             byte[] buffer;
            buffer = new byte[10];  // numbers is a 10-element array
            seriport.Read(buffer,0,1);

           // gelen=buffer[0];
           
        }

arkadaşlar burada ekrana gelen sayıyı yazdıramıyorum.Label1.Text e normal yazı bile yazdıramıyorum? Sebebi ne olabilir?
Başlık: Ynt: c# kesme yakalamak.
Gönderen: Tagli - 30 Ekim 2011, 18:19:53
C# ile uğraşmayalı 3 seneden fazla oldu ama yanlış hatırlamıyorsam GUI thread'i haricindeki thread'lerin GUI elemanlarına erişmeye çalışması sorun oluşturuyordu. Seri port event'i de GUI harici bir thread'e ait olduğu için sorun çıkıyor olabilir. Bu durumlar için BackgroundWorker diye bir class vardı. Zamanında baya uğraştırmıştı beni.

Burada (http://stackoverflow.com/questions/1136399/how-to-update-textbox-on-gui-from-another-thread-in-c-sharp) konu ile ilgili bilgi var gibi. Belki işine yarar.
Başlık: Ynt: c# kesme yakalamak.
Gönderen: RcALTIN - 30 Ekim 2011, 18:37:12
Alıntı yapılan: since1990 - 30 Ekim 2011, 16:51:39
        public void seriport_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
             byte[] buffer;
            buffer = new byte[10];  // numbers is a 10-element array
            seriport.Read(buffer,0,1);

           // gelen=buffer[0];
           
        }

arkadaşlar burada ekrana gelen sayıyı yazdıramıyorum.Label1.Text e normal yazı bile yazdıramıyorum? Sebebi ne olabilir?

sebebi bir thread'a ait kontrole(main) farklı bir thread üzerinden erişmeye çalışman.

kısa yoldan işin görülsün istiyorsan form ctor veya form load bloklarından birine şu satırı ekle.
CheckForIllegalCrossThreadCalls = false;

yok aslında nasıl olması gerektiğini öğrenmek istiyorum diyorsan; araştırman gereken konular: delegate, invoke
Başlık: Ynt: c# kesme yakalamak.
Gönderen: kudretuzuner - 30 Ekim 2011, 19:17:09
Merhaba
C# bilmiyorum ama prensip aynıdır.Ben size bir arkadaşın yine bu forumların birinde ihtiyacı olduğu bir bilgiyi VB.net ve asm ile yaptığım bir çalışmamı vereyim size belki fikir verir.Aşağıdaki tabloyu da  incelerseniz ne yollayıp ne aldığınızı karşılaştırarak bulabilirsiniz.Mesela PİC'in HEX'31' Yani rakkam bir(1)olarak yolladığı datayı PC'de 49 olarak görürsünüz.bkz:ASCII tablo.Özetle hex olarak yollanan bir baytlık data PC'te oktal değeri gelir.
http://www.table-ascii.com/
https://rapidshare.com/files/2658151643/ısıkyasar_PIC_to_PC.rar
Başlık: Ynt: c# kesme yakalamak.
Gönderen: since1990 - 30 Ekim 2011, 19:23:17
CheckForIllegalCrossThreadCalls = false;
işimi şimdilik gördü herkese teşekkürler... ;)