Haberler:

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

Ana Menü

c# kesme yakalamak.

Başlatan since1990, 29 Ekim 2011, 22:24:29

since1990

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.
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

muhittin_kaplan

zaten öyle çalışır.
rs232 den bilgi geldiğinde ilgili prosedür çalıştırılır.

muhittin_kaplan

SerialPort1_DataReceived çalışıyor

jozzef

Eğer program içerisinde (arayüz) interrupt oluşturmak istiyorsanız, Delegate ve Event konularına bakınız işinizi görecektir.

since1990

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?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

muhittin_kaplan

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

since1990

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.
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

since1990

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?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

muhittin_kaplan

ş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.


since1990

Sanırım gönderdiğiniz son link işimi görüyor.. :D Teşekkürler..
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

muhittin_kaplan


since1990

        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?
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

Tagli

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 konu ile ilgili bilgi var gibi. Belki işine yarar.
Gökçe Tağlıoğlu

RcALTIN

#14
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
KİMSEYİ ENGELLEDİĞİM YOK, ÖZEL İLETİ DEVRE DIŞI !