Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: RS-232 в Visual Studio 2010 Express
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
serj32
Здравствуйте.Вот начал изучать язык программирования C и хотел бы связать компьютер с микроконтроллером AVR-так легче изучать.
Операционка XP 32разряда.Может быть есть у кого для консольного приложения код что бы считывал с ноги RxD и закидывал в какую нибудь переменную 8 бит
ну а зная в какой переменной находятся данные на дисплей я их выведу сам.
Спасибо.
CrimsonPig
Цитата(serj32 @ Jul 15 2015, 14:16) *
Здравствуйте.Вот начал изучать язык программирования C и хотел бы связать компьютер с микроконтроллером AVR-так легче изучать.
Операционка XP 32разряда.Может быть есть у кого для консольного приложения код что бы считывал с ноги RxD и закидывал в какую нибудь переменную 8 бит
ну а зная в какой переменной находятся данные на дисплей я их выведу сам.
Спасибо.


let me google for you: "windows read file serial communication example"
serj32
Цитата(CrimsonPig @ Jul 15 2015, 16:22) *
let me google for you: "windows read file serial communication example"

А вот http://gdansk.bradley.edu/olekmali/courses...AL_WIN32.C.HTML
в VS 2008 скомпилировался без ошибок только на выполнении выдаёт что не может создать COM порт
а на ноуте у меня его и нет ,сейчас на старом попробую, ну остаётся выцепить переменную где лежат входные данне с порта.

SSerge
Запустите гипертерминал, да и общайтесь со своим контроллером через RS232.
Или Вы именно в работе с последовательным портом под Win хотите поупражняться?
Alex11
Нашел из какого-то старого проекта кусок.
Инициализация:
Код
#define BUFSIZE 200
    HANDLE Comm;
    char Data[BUFSIZE];
    Comm = CreateFile(
        "COM1",                        // pointer to name of the file
        GENERIC_READ|GENERIC_WRITE,    // access (read-write) mode
        0,                            // share mode
        0,                            // pointer to security attributes
        OPEN_EXISTING,                // how to create
        FILE_ATTRIBUTE_NORMAL,        // file attributes
        0                             // handle to file with attributes to copy
                      );
    BuildCommDCB(
        "baud=115200 parity=N data=8 stop=1",  // pointer to device-control string
        &CommDCB     // pointer to device-control block
                );

    CommDCB.fOutX = true;
    CommDCB.fOutxDsrFlow = false;
    CommDCB.fDtrControl = DTR_CONTROL_DISABLE;
    CommDCB.fDsrSensitivity = false;
    CommDCB.fRtsControl = RTS_CONTROL_DISABLE;
    CommDCB.StopBits = ONESTOPBIT;
    CommDCB.XonChar = 'Q'-0x40;
    CommDCB.XoffChar = 'S'-0x40;
    CommDCB.EofChar = -1;
    CommTO.ReadIntervalTimeout = 0;
    CommTO.ReadTotalTimeoutMultiplier = 0;
    CommTO.ReadTotalTimeoutConstant = 100;
    CommTO.WriteTotalTimeoutMultiplier = 0;
    CommTO.WriteTotalTimeoutConstant = 0;

    i = SetCommTimeouts(
        Comm,    // handle to communications device
        &CommTO    // address of communications time-out structure
                       );
    i = SetCommState(
        Comm,    // handle to communications device
        &CommDCB    // address of device-control block structure
                    );


затем периодически вызывать это
Код
    DWORD i;
    ReadFile(Comm, Data, BUFSIZE, &i, 0);
    if(i!=0)
    {
        пришло i байтов данных, обрабатываем
    }

serj32
Цитата(Alex11 @ Jul 15 2015, 20:41) *
Нашел из какого-то старого проекта кусок.


затем периодически вызывать это
Код
    DWORD i;
    ReadFile(Comm, Data, BUFSIZE, &i, 0);
    if(i!=0)
    {
        пришло i байтов данных, обрабатываем
    }

А какие там библиотеки подключать?
i-укажет мне количество байт
ну а прочитаю из масива Data
Правильно?
Lmx2315
..если нужен простой COM порт в своей проге на компе - то советую SharpDevelop 5 http://www.icsharpcode.net/OpenSource/SD/
там в среде , готовый модуль - кидаете на свою прогу и используете, ничего программировать не надо.
Alex11
Правильно.
Если обычное MFC-приложение делаете, то все подключается само, добавлять специально ничего не надо. Если консольное - наворно, stdio.h. Может еще чего, но вряд ли.
serj32
Цитата(serj32 @ Jul 15 2015, 19:36) *
А вот http://gdansk.bradley.edu/olekmali/courses...AL_WIN32.C.HTML
в VS 2008 скомпилировался без ошибок только на выполнении выдаёт что не может создать COM порт
а на ноуте у меня его и нет ,сейчас на старом попробую, ну остаётся выцепить переменную где лежат входные данне с порта.

Эта штука заработала -только COM3 заменил на COM1
Анализатором посмотрел -ерунда какая то идёт не международная ни шестнадцатиричная
принятые данные новерно будут в масиве buffer
и почему то передаёт по 4 байта.
Буду пробывать код Alex11
alexeyv
Цитата
Эта штука заработала -только COM3 заменил на COM1
Встроенные компьютерные порты начинают нумероваться с COM1. Раньше на материнках было два - COM1 и COM2, сейчас ставят только один (и то не всегда) и он всегда COM1.
На современных материнках порта COM1 нет на задней панели. если в описании MB порт есть, то он может находится на самой плате в виде 10-ти контактного разъема.
Также можно использовать переходники USB<->COM. Их вполне хватает для таких целей. Но их нумерацию ОС выполняет сама и на разных ПК (стационарный или ноутбук) номер может быть различным (просмотр из диспетчера устройств).
Поэтому советую в программе задать поле выбора номера порта.
Я в своих программах вычитывал все COM-порты в системе из реестра 'HKLM\Hardware\DeviceMap\SerialComm'. потом последовательно пытался открыть и формировал список доступных портов для пользователя и он сам выбирал необходимый.

Цитата
Анализатором посмотрел -ерунда какая то идёт не международная ни шестнадцатиричная
принятые данные новерно будут в масиве buffer
и почему то передаёт по 4 байта.


Скорее всего у вас не совпадают скорости на МК и ПК. Сделайте их одинаковыми.
Также в настройках порта на ПК необходимо отключать управление потоком.
serj32
Цитата(alexeyv @ Jul 17 2015, 08:12) *
Скорее всего у вас не совпадают скорости на МК и ПК. Сделайте их одинаковыми.
Также в настройках порта на ПК необходимо отключать управление потоком.

Я пока контроллер не подключал в COM воткнул адаптер RS232-ТТЛ и закоротил выход со входом.
Начинаю вводить 1число(символ) программа пишет 4 байта отправлено и 4 принято,
смотрю анализатором первый байт правильный а остальные билиберда,и почему отправляеш один байт а прога отправляет 4 байта.
Программа для меня пока очень сложная что бы самому разобраться.
Новерно слишком пока амбициозное моё желание.
Alex11
Вы при отправке не попутали байт с int'ом? Если поставить в размер передаваемого sizeof() и аргументом будет int переменная, то это и получите.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.