Задать вопрос

Какие данные приходят на устройство через COM-порт, если отправить «1»?

Вопрос следующий. Имеем простейшее устройство включенное в USB-порт (конвертер USB в RS-232)

84102914ed41445f85249bcf0e0f9f03.jpg.

Задача:
Отправить на него единицу, что бы мигнула лампочка.

Код программы следующий:
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.IO.Ports;

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

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.WriteLine("1");
        }
        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.WriteLine("0");
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            string[] myPort;
            myPort = System.IO.Ports.SerialPort.GetPortNames();
            comboBox1.Items.AddRange(myPort);
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (serialPort1.IsOpen == true)
            serialPort1.Close();
        }
        private void button3_Click(object sender, EventArgs e)
        {
            serialPort1.BaudRate = 9600;
            serialPort1.PortName = comboBox1.Text.ToString();
            if (serialPort1.IsOpen == false)
                serialPort1.Open();
        }
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            serialPort1.PortName = comboBox1.Text.ToString();
        }

    }
}


Решил посмотреть осцилографом, что конкретно мы получаем на выходе:

6b3539d3bc2042aab6a606e3ba9de0fc.jpg

И вот сам вопрос:
В какой кодировке (в какой битности) мы получаем сигнал через COM-порт по RS-232. Потому что по осцилограме не ясно. Я сначала подумал, что это 31 в HEX, но, вроде не похоже.
  • Вопрос задан
  • 1009 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Перед нами такая конструкция
0 . 1000 . 1100 . 1 . 0 . 0101 . 0000 . 1
Каждый байт начинается стартовым битом 0 и кончается стоповым битом 1. Передаётся, начиная с младшего бита.
Итого два байта, 31+0A, или "1" + LineFeed.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rou1997
@Rou1997
serialPort1.WriteLine("1");

Это, по-вашему, единица? Это строка с символом '1', а так как WriteLine, то помимо этого символа еще второй символ - '\n' (перенос строки), чтобы назвать это "единицей" надо иметь очень поверхностные знания в программировании и электронике, такие люди потом пишут приложения WPF с системными требованиями как у "топовых" игр, пишут калькулятор который "кушает" 100 МБ ОЗУ и соответственно запускается на ноутбуке за 5 секунд и иногда еще и столько же места занимает на диске, дальше говорить о кодировании сигнала не вижу смысла, отправлять нужно байты, вручную составленные из бит, тогда и поговорим, вообще кодировки разные бывают, не всегда "бит 0 = импульса нет, бит 1 = импульс есть", часто один бит передают двумя импульсами для того чтобы не путать 0 с отсутствием каких-либо данных вообще, по факту на этом уровне получается троичная система, а не двоичная.
Ответ написан
Комментировать
@aol-nnov
лампочка-то где?? на пинах ком-порта? напрямую??

даже если опустить вопрос про напряжение.
9600 бод. ты не заметишь, как она моргает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы