Visual C# Text'ten RS232'ye veri gönderme

Başlatan FEHMİ_ASM, 19 Ekim 2011, 18:32:45

FEHMİ_ASM

#15
Alıntı yapılan: cicjoe - 27 Ekim 2011, 06:48:29
&& logical, & bitwise
&& Logıcal operandını kullanabilmem için if yapısını kullanmak gerekli gibi gözüküyor. Nedenini anlayamadım.
   
    mir_82, dediklerinizi tam olarak harfiy'yen anladım. Zaten PIC, kendisine gelen veriler için neredeyse apaçi dansı yapacak kadar rahat bir durumda.  Ancak o şekilde yapmak için, yine de veriyi bölmek gerekecek. Öyle ki, iki byte'lık bir veri gidecek sonuçta. Ancak kesinlikle 3 byte olmayacak(zaten olamaz). Onun için veri aralığı  00 00---FF FF  arasında kalacak.

       Daha açık ifade edeyim, en fazla dec.65535 olan textBox1.TextLength'nin  iki byte'lık değerini, DT_Send adlı dizinin 0 ve 1 nolu index'sine yüklemek istiyorum.
Hz.Hamza'nın Belinde İki Kılıç Duruyor ! Attığı Her Adım Bir Kalbi Durduruyor ! Ey Hamza ! Gördüğün Hiçbir Şeyden Korkmazsın , Bu Doğru Ama Heybetini Gizli Tut , Yürüyüşün Ölümü Korkutuyor !  İşte Hz.Ömer ve Hz.Ali , Biri Hattaboğlu , Biri Haydâr-ı Kerrar ! Ve Kolkola Ölümün Ağzına Giriyorlar !  Azrai

mir_as82

Abi o zaman şunu uygulayabilirsin.

sayımız  65535 olsun bunu ilk önce hexadesimal e çevir. 0 x FFFF oldu mu. Sonra bunun alt byte ını maskele
yani 0 x FFFF i 0 X FF00 ile mantıksal and yap. Şimdi elinde sadece 0 X FF00 kaldı. Sonra bunu iki defa sağa kaydır. Elinde 0 x 00FF kaldı. Sonra bu veriyi pic e gönderebilirsin. Üst byte ı elde ettin. İstersen bu şekilde gönder istersen decimal e çevir gönder. Ama bence int8 e çevir. Bundan sonra bu veriyi PIC e gönderebilirsin.

İkinci alt byte daha kolay: 0 XFFFF i  0x00FF ile mantıksal and yap. elinde alt byte kalacak: yani 0 x 00FF. Bunu ister decimale çevir ister int8.

FEHMİ_ASM

       Hocam yapmak istediğim tam olarak belirttiğiniz şey. Ancak bir türlü texBox1.textlength'deki veriyi Hex'e çevirip içeriğini diziye atabileceğim kodu yazamadım.  Hazır bir kod istemiyorum, sadece örnek bir kod olması yeterli.
Örneğin aşağıdaki kod.
            DS1 = Convert.ToInt16(textBox1.TextLength);
            PCDataW[0] = DS1 & 0x00FF;


Ne yaptıysam derleyici hata verdi.  Ayrıca ilgine teşekkür ederim.
Hz.Hamza'nın Belinde İki Kılıç Duruyor ! Attığı Her Adım Bir Kalbi Durduruyor ! Ey Hamza ! Gördüğün Hiçbir Şeyden Korkmazsın , Bu Doğru Ama Heybetini Gizli Tut , Yürüyüşün Ölümü Korkutuyor !  İşte Hz.Ömer ve Hz.Ali , Biri Hattaboğlu , Biri Haydâr-ı Kerrar ! Ve Kolkola Ölümün Ağzına Giriyorlar !  Azrai

mir_as82

hocam Convert.ToInt16(textBox1.Text);

Kullanır mısın. Şu anda firmadayım ama sen kodu yanlış yazmışsın. Textbox un içindeki veriyi almak için Convert.ToInt16(textBox1.Text); yazman gerek.

bunu bir denesene

cicjoe

&& mantiksal oldugu icin true veya false dondurur, & bit tabanli oldugu icin bit kumesi dondurur operandlarin tipine gore. en guzel aciklama dedigin gibi kod ile olacak sanirim.

static void Main(string[] args)
{
   uint dataX = 0xAAAABBBB;
   ushort dataL = (ushort)(dataX & 0xFFFF);
   ushort dataH = (ushort)((dataX & 0xFFFF0000) >> 16);
   
   Console.WriteLine("X = {0:X}\nH = {1:X}\tL= {2:X}",
      dataX, dataH, dataL);
   Console.ReadKey();
}

FEHMİ_ASM

#20
  Cicjoe hocam, verdiğiniz örnek alt parçayı komple koda yapıştırdım, ama çalışmadı. Ben de değişkenleri global bölgede tanımladım. dataX'teki veriyi ayrıştırarak dataL'ye ve dataH'ye sorunsuzca (hex format'ta) yükledim. Ama hex veri dizi[0]'a yüklenmedi. Kod'umun tamamı aşağıda, //Slash işaretleri arasında belirttim

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }



        short dataX ;   //= 0x0FFFBBBB;
        ushort dataL;
        ushort dataH ;

        int DS1 = 12;
        int DS2 = 14;

        byte[] W1 = new byte[] { 0x00 };
        byte[] W2 = new byte[] { 0x00 };

   


        byte[] PCDataW = new byte[] { 0x00 };
        byte[] Read_24C1_AA = new byte[] { 0xAA }; //Default
        byte[] Read_24C2_AA = new byte[] { 0x00 }; //Default
        byte[] Read_DS1307_AA = new byte[] { 0x00 }; //Default
        byte[] Read_DS1621_AA = new byte[] { 0x00 }; //Default
        byte[] Read_DS1307_STL = new byte[] { 0x00 }; //Default

        byte[] AnmX_24C2 = new byte[] { 0x00 }; //Default




        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Items.Add("Stil0");
            comboBox1.Items.Add("Stil1");
            comboBox1.Items.Add("Stil2");
            comboBox1.Items.Add("Stil3");
            comboBox1.Items.Add("Stil4");

            comboBox2.Items.Add("Animasyon Yok");
            comboBox2.Items.Add("Animasyon1");
        }




        private void button1_Click(object sender, EventArgs e)
        {
            int EEPROM1x = 0;
            int EEPROM2x = 0;
            serialPort1.Open();
            MessageBox.Show("Port açıldı");

////-----------------------------------


            PCDataW[0] = 0xA1;

            serialPort1.Write(PCDataW, 0, 1);  //PIC Bu veriyi alınca EEPROM1'i silmeli
            MessageBox.Show("EEPROM1 yazılacak");

            while (EEPROM1x < textBox1.TextLength)
            {
             textBox1.Select(EEPROM1x, 1);
             serialPort1.WriteLine((textBox1.SelectedText));
             EEPROM1x = EEPROM1x + 1;
            }
            MessageBox.Show("EEPROM1 yazıldı");

////-----------------------------------

            PCDataW[0] = 0xA2;  //EEPROM2 yazılacak
            serialPort1.Write(PCDataW, 0, 1);
            MessageBox.Show("EEPROM2 yazılacak");

            while (EEPROM2x < textBox2.TextLength)
            {
             textBox2.Select(EEPROM2x, 1);
             serialPort1.WriteLine((textBox2.SelectedText));
             EEPROM2x = EEPROM2x + 1;
            }
            MessageBox.Show("EEPROM2 yazıldı");


////----------------------------------
//---------------Konfigürasyon ve Animasyon Bilgileri-------//



            PCDataW[0] = 0xA3;  //24C1 Okunup okunmayacağı bilgisi
            serialPort1.Write(PCDataW, 0, 1);
            serialPort1.Write(Read_24C1_AA, 0, 1);


            PCDataW[0] = 0xA4;  //24C2 Okunup okunmayacağı bilgisi
            serialPort1.Write(PCDataW, 0, 1);
            serialPort1.Write(Read_24C2_AA, 0, 1);


            PCDataW[0] = 0xA5;  //DS1621 Okunup okunmayacağı bilgisi
            serialPort1.Write(PCDataW, 0, 1);
            serialPort1.Write(Read_DS1621_AA, 0, 1);


            PCDataW[0] = 0xA6;  //DS1307 Okunup okunmayacağı bilgisi
            serialPort1.Write(PCDataW, 0, 1);
            serialPort1.Write(Read_DS1307_AA, 0, 1);

            MessageBox.Show("Konfigürasyon Bilgileri Yazıldı");

//-----------------


            PCDataW[0] = 0xA7; //DS1307 Okuma Stili
            serialPort1.Write(PCDataW, 0, 1);
            serialPort1.Write(Read_DS1307_STL, 0, 1);
            MessageBox.Show("Tarih ve Zaman Stili Seçildi");

//-----------------


            PCDataW[0] = 0xA8; //24C2 Okuma Stili (Animasyon türü)
            serialPort1.Write(PCDataW, 0, 1);
            serialPort1.Write(AnmX_24C2, 0, 1); 
            MessageBox.Show("Animasyon Türü Seçildi");


//-----------------

   //////////////////////////////////////////////////////////////////////       
   //////////////////////////////////////////////////////////////////////

              dataX =  Convert.ToInt16(textBox1.TextLength);
             dataL = (ushort)(dataX & 0x0000FF);
             dataH = (ushort)((dataX & 0x00FF00) >> 16);

            //DataL'yi PCDataW[0]'a Atılmıyor?<<<<<<<<<<<<<<<<<<<<<<<<<<

             serialPort1.Write(PCDataW, 0, 1);



            serialPort1.Close();
        }
       
    ///////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////


        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if
              (checkBox1.Checked)
            {

                Read_24C1_AA[0] = 0xAA;
            }
            else
                Read_24C1_AA[0] = 0x00;
        }





        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
         if
           (checkBox1.Checked)
           {
             Read_DS1307_AA[0] = 0xAA;
           }
         else
            Read_DS1307_AA[0] = 0x00;
        }




        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (comboBox1.SelectedIndex)
            {
                case (0):
                   Read_DS1307_STL[0] = 0x00;
                   break;      
                case 1 : 
                   Read_DS1621_AA[0] = 0x01;
                   break;
                case 2 :
                   Read_DS1307_AA[0] = 0x02;
                   break;
                case 3 : 
                   Read_DS1307_AA[0] = 0x03;
                   break;
                case 4 :
                   Read_DS1307_AA[0] = 0x04;
                   break;
                default :
                   Read_DS1307_AA[0] = 0x00;
                   break;
            }
        }




       


    }
}
Hz.Hamza'nın Belinde İki Kılıç Duruyor ! Attığı Her Adım Bir Kalbi Durduruyor ! Ey Hamza ! Gördüğün Hiçbir Şeyden Korkmazsın , Bu Doğru Ama Heybetini Gizli Tut , Yürüyüşün Ölümü Korkutuyor !  İşte Hz.Ömer ve Hz.Ali , Biri Hattaboğlu , Biri Haydâr-ı Kerrar ! Ve Kolkola Ölümün Ağzına Giriyorlar !  Azrai

cicjoe

#21
senin byte ise veri tipin, soyle dener misin

ushort dataX = 0xAABB;
byte dataL = (byte)(dataX & 0xFF);
byte dataH = (byte)((dataX & 0xFF00) >> 8 );

FEHMİ_ASM

   Evet, dataL ve dataH değişkenlerini byte türünde tanımlayınca diziye direkt atabildim. Cicjeo  ve mir_as82 hocam ilgilendiğiniz için sağolun.
 
   Bu arada tüm arkadaşların Kurban bayramı mübarek olsun.
Hz.Hamza'nın Belinde İki Kılıç Duruyor ! Attığı Her Adım Bir Kalbi Durduruyor ! Ey Hamza ! Gördüğün Hiçbir Şeyden Korkmazsın , Bu Doğru Ama Heybetini Gizli Tut , Yürüyüşün Ölümü Korkutuyor !  İşte Hz.Ömer ve Hz.Ali , Biri Hattaboğlu , Biri Haydâr-ı Kerrar ! Ve Kolkola Ölümün Ağzına Giriyorlar !  Azrai

FEHMİ_ASM

  Yukarıdaki kod, teorikte çalışan bir algoritma içeriyor. Arabirimde birkaç texbox, buton, listbox ve bir de Com nesnesi mevcut. Belirtildiği üzere, texbox ve listbox verilerini - Com'a iletiyor. Sorum şu;

        32 Bit xp/sp3'te oluşturduğum bu (Visual C#) exe dosyasını, farklı bir işletim sisteminde (xp-64bit, win7, pardus gibi) direkt çalıştırabilir miyim? Bu farklı ortamlarda -  özellikle Com'a erişimde C# kodları için bir uyumsuzluk olabilir mi?
Hz.Hamza'nın Belinde İki Kılıç Duruyor ! Attığı Her Adım Bir Kalbi Durduruyor ! Ey Hamza ! Gördüğün Hiçbir Şeyden Korkmazsın , Bu Doğru Ama Heybetini Gizli Tut , Yürüyüşün Ölümü Korkutuyor !  İşte Hz.Ömer ve Hz.Ali , Biri Hattaboğlu , Biri Haydâr-ı Kerrar ! Ve Kolkola Ölümün Ağzına Giriyorlar !  Azrai