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);
}
}
}

