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.
zaten öyle çalışır.
rs232 den bilgi geldiğinde ilgili prosedür çalıştırılır.
SerialPort1_DataReceived çalışıyor
Eğer program içerisinde (arayüz) interrupt oluşturmak istiyorsanız, Delegate ve Event konularına bakınız işinizi görecektir.
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?
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
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.
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?
ş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.
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx
Sanırım gönderdiğiniz son link işimi görüyor.. :D Teşekkürler..
Bill amca :D
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?
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.
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
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
CheckForIllegalCrossThreadCalls = false;
işimi şimdilik gördü herkese teşekkürler... ;)