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; using System.Threading; namespace _24LC64 { /// <summary> /// Pin 3 (TX) -- -- CS /// pin 4 (DTR) -- SCL -- SCK /// Pin 6 (DSR) -- SDA IN -- /// Pin 7 (RTS) -- SDA OUT -- MOSI (DO) /// Pin 8 (CTS) -- -- MISO (DI) /// </summary> public partial class Form1 : Form { public const bool H = true, L = false; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { serialPort1.BaudRate = 9600; serialPort1.PortName = textBox1.Text; serialPort1.Open(); //serialPort1.DtrEnable = true; //serialPort1.RtsEnable = true; //perintah Write StartBit(); kirim(0xA0); bit(1); //ACK //Alamat memory (0x001) //0x00 kirim(0x00); bit(1); //ACK //0x01 kirim(0x01); bit(1); //ACK //Data (0x33) //kirim(0x33); byte[] data = StringToByteArray(textBox2.Text); kirim(data[0]); bit(1); //ACK StopBit(); serialPort1.Close(); } void kirim(int byteData) { for (int i = 7; i >= 0; i--) { int bitData = (byteData >> i & 0x01); bit(bitData); } } void StartBit() { SDA(H); SCL(H); Thread.Sleep(1); SDA(L); SCL(H); Thread.Sleep(1); } void StopBit() { SDA(L); SCL(H); Thread.Sleep(1); SDA(H); SCL(H); Thread.Sleep(1); } void bit(int val) { SCL(L); if (val == 0) SDA(L); else SDA(H); SCL(H); Thread.Sleep(1); SCL(L); SDA(H); Thread.Sleep(1); } void SCL(bool status) { serialPort1.DtrEnable = status; } void SDA(bool status) { serialPort1.RtsEnable = status; } int bacaBit() { int bitData = 0; SCL(L); SCL(H); bool bit = serialPort1.DsrHolding; if (bit == true) bitData = 1; Thread.Sleep(1); SCL(L); SDA(H); Thread.Sleep(1); return bitData; } public static byte[] StringToByteArray(string hex) { return Enumerable.Range(0, hex.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) .ToArray(); } private void button2_Click(object sender, EventArgs e) { serialPort1.BaudRate = 9600; serialPort1.PortName = textBox1.Text; serialPort1.Open(); //perintah Write StartBit(); kirim(0xA0); bit(1); //ACK //Alamat memory (0x001) //0x00 kirim(0x00); bit(1); //ACK //0x01 kirim(0x01); bit(1); //ACK //perintah Read kirim(0xA1); bit(1); //ACK int data = 0; for (int i = 7; i >= 0; i--) { data = data << 1; data = data | bacaBit(); } bit(1); //ACK StopBit(); serialPort1.Close(); byte[] hasil = new byte[1]; hasil[0] = (byte)data; textBox2.Text = BitConverter.ToString(hasil); } } }