|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.05.2010, 17:35 | #11 |
Форумчанин
Регистрация: 28.01.2010
Сообщений: 224
|
А посмотрите еше вот что он работает и не выдает ошибок... Мне кажится что удалось собрать сведения о работе порта.
#include <windows.h> char Data; //================================== //глобальные переменные //------------------------------------------ //объявим структуру для конфигурации СОМ порта DCB dcb; /* ZeroMemory (&dcb, sizeof (DCB));// не знает что ето такое //дескриптор порта */ HANDLE hCom_1 = NULL; //------------------------------------------ //объявим структуру для асинхронной работы порта OVERLAPPED over; //------------------------------------------ //для выделения сигнала DWORD dwSignal; //пишим функцию инициализации порта СОМ1 bool Innit_COM1 () { //открываем порт СОМ 1 hCom_1 = CreateFile ("COM1", GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if (hCom_1 == INVALID_HANDLE_VALUE)//если порт не удалось открыть { CloseHandle (hCom_1); return false;//выходим из функции с ошибкой } //настраиваем параметры порта dcb.BaudRate = CBR_19200;//скорость передачи dcb.ByteSize = 8;//размер передачи dcb.StopBits = ONESTOPBIT;//один стоповый бит dcb.Parity = NULL; //проверяем на правильность настройки if ( !SetCommState ( hCom_1, &dcb)) //тоже не работает.... { CloseHandle (hCom_1); return false;//выходим из функции с ошибкой } //если все выполнилось то возвращаем положительный результат return true; } /*Теперь когда порт открыт и настроен, нужно настроить обработку сигналов DSR и CTS. */ //пишим функцию настройки событий bool SetEventCOM () { //настраиваем мониторинг порта if (!SetCommMask (hCom_1, EV_DSR|EV_CTS)) //если не удалось настроить порт { CloseHandle (hCom_1); return false;//выходим из функции с ошибкой } //создаем объект событие over.hEvent = CreateEvent ( NULL, FALSE, FALSE, NULL); if (over.hEvent) { //при неудачи выходим из функции с ошибкой CloseHandle (hCom_1); return false;//выходим из функции с ошибкой } //если все выполнилось то возвращаем положительный результат return true; } //функция чтения одного байта данных BYTE ReadByteCOM () { BYTE read = 0; DWORD dwByteRead = 0; do {//читаем байт из порта if (!ReadFile (hCom_1, &read, sizeof (BYTE), &dwByteRead, NULL)) {return 0;} } while (!dwByteRead); return read;//возвращаем данные } //=================================== ========== //функция чтения массива данных //=================================== ========== //функция чтения одного байта данных bool WriteByteCOM (char bufer) { DWORD dwByteWrite = 0; if (!WriteFile(hCom_1, &bufer, sizeof(char), &dwByteWrite, NULL)) {return 0;} return true;//возвращаем сведение о выполнении } //функция для записи одного байта char ReadByte_COM () { char bufer = 0x00; DWORD dwByteWrite = 0; do {//читаем байт из порта if (!ReadFile (hCom_1, &bufer, sizeof (char), &dwByteWrite, NULL)) {return 0;} } while (!dwSignal); return bufer; } //общая функция для работы с портом void GeneralCOMRead () { //проверяем сигнал в линии if (dwSignal & EV_DSR)//данные готовы для чтения { //читаем байт из порта Data = ReadByte_COM (); //сохраняем байт куда-либо } } void GeneralCOMWrite () { //проверяем сигнал в линии if (dwSignal & EV_CTS)//данные готовы для записи { //пердаем байт из вне и записываем его в порт WriteByteCOM (Data); } } void CloseCOM () { if (over.hEvent) { CloseHandle (over.hEvent);//закрываем объект событие } if (hCom_1) { CloseHandle (hCom_1); hCom_1 = NULL; } }
всему свое время как зиме и весне
и каждому солнцу свой неба кусок |
06.05.2010, 19:37 | #12 |
Форумчанин
Регистрация: 28.01.2010
Сообщений: 224
|
Граждане форумчане подскажите как можно описать подобным образом ЛПТ порт... У меня есть некоторый код но он с кучей ошибок...
всему свое время как зиме и весне
и каждому солнцу свой неба кусок |
06.05.2010, 22:24 | #13 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
через стандартный драйвер parclass.sys:
Код:
...также читайте статьи DeKot-а (поиск по форуму "LPT") и в следующем номере нашего журнала будет расширенная статья по практике работы с LPT/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
07.05.2010, 21:03 | #14 |
Форумчанин
Регистрация: 28.01.2010
Сообщений: 224
|
да спасибо огромное но я уже пользовался и этой ссылко и подобным кодом может я делал чтото не так (короче у меня ошибка при работе исполнительного файла = чтение с зашищеного адреса).
а код мне тоже известен я скачал по одной из ссылок с этого сайта литературу по WinApi прочитал но пока не разобрался во всех тонкостях. мне интересно считать с порта по его готовности на сколько я понимаю (//проверяем сигнал в линии if (dwSignal & EV_CTS)//данные готовы для записи...) Но это для КОМ порта я писал выше а как это сделать для ЛПТ пока не знаю Посмотрите код он у меня вызывает кучу ашибок при компиляции HANDLE h = CreateFile("\\\\.\\LPT1", GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); DCB dcb; -> GetCommState(m_hFile, &dcb); COMMTIMEOUTS CommTimeOuts; CommTimeOuts.ReadIntervalTimeout = MAXDWORD; CommTimeOuts.ReadTotalTimeoutMultip lier = 0; CommTimeOuts.ReadTotalTimeoutConsta nt = 0; CommTimeOuts.WriteTotalTimeoutMulti plier = 0; CommTimeOuts.WriteTotalTimeoutConst ant = 1000; SetCommTimeouts(m_hFile, &CommTimeOuts); dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; dcb.BaudRate = baud; -> SetCommState(m_hFile, &dcb); //->так я отметил часть проги вызывающей около 50 ошибок разного плана char bufer = 0xfd; DWORD lpdwBytesWrittens = 0; WriteFile(h, &bufer, sizeof(char), &lpdwBytesWrittens, NULL);
всему свое время как зиме и весне
и каждому солнцу свой неба кусок Последний раз редактировалось Assemblerru; 07.05.2010 в 21:10. |
30.05.2010, 00:34 | #15 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
структура dcb неприменима к lpt/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
10.06.2010, 18:44 | #16 |
Форумчанин
Регистрация: 28.01.2010
Сообщений: 224
|
А как тогда описать ЛПТ порт по другому
всему свое время как зиме и весне
и каждому солнцу свой неба кусок |
10.06.2010, 20:00 | #17 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...скажите, а я уже посылал вас на статьи DeKot-а ?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с com портом | Валера777 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 05.12.2009 00:06 |
Работа с com портом | albles | Общие вопросы C/C++ | 2 | 16.11.2009 15:15 |
Работа c COM-портом | doniyor | Общие вопросы Delphi | 12 | 27.07.2009 11:16 |
Работа с COM-портом | jovanny | Помощь студентам | 2 | 03.05.2009 18:06 |
работа с COM портом | ShAzat | Общие вопросы Delphi | 8 | 28.05.2008 20:08 |