JeezyWonder Ответов: 1

(C#) как отправить данные в двоичном и шестнадцатеричном виде одновременно нажатием кнопки?


Привет,
Я сейчас работаю с EEPROM, посылаю ему данные через последовательный порт, а EEPROM ждет от данных 24 бита, первые 8 бит - EEPROM понимают как адрес, куда писать отправляющие данные, вторые 16 бит - это то, что писать.
Так что я запутался, как это сделать в коде C#.

Обновление:
Хорошо, я использую AVR BASCOM для компиляции на mk, но проблема не в bascom,
для exmaple команда inputbit получит значение от UART и присвоит его переменной
the Inputbin will wait for 3 bytes 
1 byte = address (dim as byte) 
2 bytes = data (dim as word) = 2 bytes 
'2 байта, потому что слово = 16 бит
Например я хочу написать "4001" на 25 ячеек памяти в EEPROM.
Data_tx = 4001 
Addr = 25 

это цифры на binery являются
SB OP address     data        not used 
 1  01 011001 0000111110100001 0000000 
         25           4001     dont care 


SB, OP = start bit and op code it equals 101 due to EEPROM datasheet, после них идет мой адрес, который состоит из 6 бит, затем 2 байта данных, которые мы хотим записать.(потому что у меня есть провод 64x16)
Если я отправляю например 1,
serialPort1.Write("\u0005");
и запишите адрес в моем компиляторе AVR (im using AVR BASCOM btw), для exmaple в пятой ячейке памяти он запишет 0000 0000 0000 0001 в 5-ю ячейку памяти. Но мне не нужно писать адрес или данные самостоятельно в коде компилятора. Мне нужно отправить его с помощью утилиты Windows forms.
Поэтому мне нужно отправить адрес, который равен 6 битам, и адрес, который равен 16 битам, это то, как я его понимаю

Что я уже пробовал:

private void button1_Click(object sender, EventArgs e)   // Here i send a data to MK
    {
        serialPort1.Write("\u0001");             // 5 bytes
        serialPort1.Write(Convert.ToString(0x05));     // 0005 hex
     }

Ralf Meier

Это то же самое, что и в другом вашем вопросе.
Я бы посоветовал вам улучшить свой вопрос с помощью расширенной информации. Что вы должны написать в SerialPort ? Объясните это на примере ... Я думаю, вы не поняли, что на самом деле нужно написать в порт, чтобы получить ответ ...

JeezyWonder

обновлено, сэр

Ralf Meier

Если я правильно понял, вам нужно отправить 5 байт в ваш Serialport.
Byyte-контент должен быть построен так же, как ваш пример (выше).
Так... Сначала я бы создал ByteArray с требуемым размером.
Теперь запишите в Index=0 значение SB, в Index=1 значение OP, в Index=2 значение вашего адреса, в Index=3 старший байт ваших данных (data / 256), в Index=4 младший байт ваших данных (data или 255) и, наконец, в последний индекс значение 0.
Сейчас пишу этот объект ByteArray в последовательный порт ...

1 Ответов

Рейтинг:
1

Richard MacCutchan

serialPort1.Write("\u0001");             // 5 bytes

Нет, это 2 байта x00 и x01.
В своих комментариях вы говорите, что хотите отправить "4001" на 25 ячеек памяти в EEPROM. Использование шестнадцатеричной нотации сделало бы это более ясным:
byte[] bData = new byte[]{ 0x40, 0x01 };
byte[] bAddress = new byte[] { 0x25 };
serialPort1.Write(bAddress, 0, 1);
serialPort1.Write(bData, 0, 2);