Сограждане, применяющие микроконтроллеры, часто испытывают потребность использования функций обмена по интерфейсу RS-232. Для этого надо уметь программировать и писать обслуживающие программы уже не только для микроконтроллеров, а и для персональных компьютеров.
Мне приходилось программировать в Turbo Pascal, затем в Delphi и, наконец, в Borland C++ Builder 6.0. Все они были по-своему интересны и полезны. Однако сейчас становятся популярны новые среды программирования, и надо не отставать от других пользователей в их освоении. Как мне кажется, наиболее перспективной является среда Microsoft Visual Studio 2010 (сокращенно MSVS2010) и программирование на языке C# (си шарп). Некоторые скажут зачем, но как поговариваю: летчик должен уметь летать на всем что летает, и немного на том, что не летает, если он конечно профессионал.
Книг по среде Microsoft Visual Studio 2010 и языку C# достаточно, учебные и пробные версии ПО можно найти в интернете, так что можно смело начинать.
В приложении - готовый, написанный мною открытый проект, который можно использовать в своих работах как образец-заготовку. Проект небольшой, так что его легко будет освоить, затем дополнить и расширить его функциями, в общем, использовать по своему усмотрению.
Содержание статьи / Table Of Contents
В окне два поля для отображения кода выдачи и принятого кода и три кнопки управления. Сразу отмечу, что коды обмена отображаются байтами в 16-ричной системе счисления, а сами байты отделены пробелами. Например, для выдачи кода нужно в режиме обычного редактирования подготовить код, а затем кликнуть по кнопке «Выдать». В данном случае в качестве шаблона предлагается выдать код их шести байт: 0f 12 34 56 78 90. Если по ошибке будет введен символ, не принадлежащий 16-ричной системе, то при нажатии на кнопку, выдачи не произойдет, но появится следующее сообщение об ошибке.
Все принятые коды выводятся в аналогичном формате в окне «Принятый код», при этом размер принятого кода может быть достаточно большим, и в этом случае дополнительно появляется полоса прокрутки.
То есть используя данную программу можно обмениваться через СОМ1 со скоростью 9600 бит/с, что вполне достаточно для многих приложений при работе с микроконтроллерами.
↑ А что же внутри программы, каков исходный код?
Основная часть написанной мною программы для проекта PR14_RS-232.sln содержится в файле Form1.cs.Рассмотрим некоторые особенности и функции кода в этом файле Form1.cs.
В самом начале файла, основные подключения через директивы using, без которых ничего работать не будет. Последние из них, что с комментариями, необходимы для работы с СОМ портом и таймером. По поводу таймера, СОМ порт может обходиться и без него, таймер добавлен для последующего улучшения пользовательского интерфейса.
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; // для работы с СОМ портом
using System.IO.Ports;
using System.Timers; // Для работы с таймером
Создание СОМ порта обеспечивают следующие строки в class Form1. Здесь же видно, что обмениваться данными будем через СОМ1, но легко можно задать и другие.
public partial class Form1 : Form
{
private SerialPort port = new SerialPort("COM1");// Создание СОМ-порта
Кстати, если скорость и другие параметры не устраивают, то их меняем подобно следующему:
private SerialPort port = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
В основной функции public Form1() четыре строки. Первая формирует основную форму с кнопками и окошками, это стандартная строка, которая всегда создается автоматически. Следующие две строки создают обработчик прерываний для обменов по СОМ порту и отрывают сам СОМ порт. Четвертая строка выводит шаблон из шести байт в окно выдачи, к которому можно сделать привязку и, конечно, изменить.
public Form1()
{
InitializeComponent();
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
port.Open(); // Open the port
richTextBox2.Text = "0f 12 34 56 78 90";
}
В обработчике приема void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) имеется две строки, одна в самом начале, а другая в конце. Эти строки необходимы для синхронизаций, их обязательно надо применять. Управление передается обработчику, как только во входном буфере СОМ порта появляются принятые данные. Для считывания данных применяется следующие три строки. Здесь принятые коды считываются в байтовый буфер buffer.
int bytes = port.BytesToRead;
byte[] buffer = new byte[bytes];
port.Read(buffer, 0, bytes);
Очередные следующие за ними три строки выводят данные в окно «Принятый код». Таким образом, в этом обработчике осуществляется прием по RS-232 и побайтный вывод принятого кода, а между байтами вставляются пробелы, что улучшает их обзор.
В обработчике выдачи private void button1_Click(object sender, EventArgs e), который запускается по кнопке «Выдать», осуществляются следующие действия. Проверяется, все ли символы в окне «Код выдачи» принадлежат 16-ричной системе счисления. Для этого используются первые двадцать строк кода, а при ошибке выводится сообщение через MessageBox.Show. Затем осуществляется собственно сама выдача, для этого применены следующие строки:
byte[] bytes = new byte[Str.Length / 2];
for (int i = 0; i < Str.Length / 2; i++)
{
char ch1 = Str[i * 2];
char ch0 = Str[i * 2 + 1];
bytes[i] = (byte)(STB(ch1) << 4 | STB(ch0));
}
port.Write(bytes, 0, bytes.Length);
Где в последней строке, bytes – это сам подготовленный массив байт для выдачи, а bytes.Length – число выдаваемых в СОМ порт байт. Данный обработчик использует еще функцию private byte STB(char ch), служащую для преобразования знаковых символов в числа.
При нажатии кнопок «Очистить» работают обработчики private void button3_Click(object sender, EventArgs e) и private void button2_Click(object sender, EventArgs e), основная задача которых очистка окон приема и выдачи.
Вот такая небольшая программка.
↑ Файлы
В архиве проект на языке C# в среде Microsoft Visual Studio 2010 и готовый файл PR14_RS-232.exe🎁PR14_RS-232.zip 52.1 Kb ⇣ 222
↑ Немного о себе
Я занимаюсь схемо-техникой с применением микроконтроллеров. Их было у меня достаточно много: это Intel 8080, 8051, 196, Atmel AT90, AVR, ATtiny и megaAVR, Silabs, а также NiosII. Их я программировал на ассемблере и С, и связывал с персональным компьютером по интерфейсу RS-232 на подобных программах, ну и с более сложным функционалом.Желаю удачи!
Сергей
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.