Privalov |
Отправлено: 08.07.2003, 22:59 |
|
Не зарегистрирован
|
Вопрос!!!!!!
Как считать информацию с com1 порта.
Заранее благодарен. |
|
seg_r |
Отправлено: 09.07.2003, 08:02 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 74
|
В архиве форума есть
http://www.cbuilder.ru/progi/forum_poisk.p....php?spoisk=com |
|
Vlad |
Отправлено: 09.07.2003, 10:27 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
В Help-е есть , но нужно смотреть
HANDLE hCom;
OVERLAPPED o;
BOOL fSuccess;
DWORD dwEvtMask;
hCom = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0, /* exclusive access */
NULL, /* no security attrs */
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);
if (hCom == INVALID_HANDLE_VALUE) {
/* Deal with the error. */
}
/* Set the event mask. */
fSuccess = SetCommMask(hCom, EV_CTS | EV_DSR);
if (!fSuccess) {
/* deal with error */
}
/* Create an event object for use in WaitCommEvent. */
o.hEvent = CreateEvent(NULL, /* no security attributes */
FALSE, /* auto reset event */
FALSE, /* not signaled */
NULL /* no name */
);
assert(o.hEvent);
if (WaitCommEvent(hCom, &dwEvtMask, &o)) {
if (dwEvtMask & EV_DSR) {
/*
* . . .
*/
}
if (dwEvtMask & EV_CTS) {
/*
* . . .
*/
}
}
The following example opens a handle to COM1 and fills in a DCB structure with the current configuration. The DCB structure is then modified and used to reconfigure the device.
DCB dcb;
HANDLE hCom;
DWORD dwError;
BOOL fSuccess;
hCom = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0, /* comm devices must be opened w/exclusive-access */
NULL, /* no security attrs */
OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */
0, /* not overlapped I/O */
NULL /* hTemplate must be NULL for comm devices */
);
if (hCom == INVALID_HANDLE_VALUE) {
dwError = GetLastError();
/* handle error */
}
/*
* Omit the call to SetupComm to use the default queue sizes.
* Get the current configuration.
*/
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess) {
/* Handle the error. *
}
/* Fill in the DCB: baud=9600, 8 data bits, no parity, 1 stop bit. */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess) {
/* Handle the error. *
}
|
|
KrisK |
Отправлено: 09.07.2003, 13:44 |
|
Не зарегистрирован
|
А еще есть компонеты, например CPort или OCX MSComm, но
CPort более продвинут. Пользовал версию 2.61 с CB++5 — , без проблем.
CPort смотри на www2.arnes.si/~sopecrni |
|
Pricalov |
Отправлено: 09.07.2003, 23:13 |
|
Не зарегистрирован
|
Вопрос!
Народ, что-то не получается, попробовал использовать стандартные функции Си для работы с портами bioscom() но комок или виснет, или выдает на экран при выводе результатов FFF4.
Как это исправить???????????????????????????
Причем после таких попыток другая(не моя) прога тоже отказывается снимать результаты с Com1 порта.
Заранее благодарен за помощь. |
|
Vlad |
Отправлено: 10.07.2003, 09:05 |
|
Машинист паровоза
Группа: Участник
Сообщений: 231
|
Вопрос : ты на каком С пишешь- под ДОС или Windows? |
|
Privalov |
Отправлено: 10.07.2003, 11:52 |
|
Не зарегистрирован
|
Под DOS |
|
sprinter |
Отправлено: 10.07.2003, 14:15 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Последнее заявление — супер!
Первое что приходит на ум выглядит так
#include "stdio.h"
#include "dos.h"
int main(void)
{
int result;
int port = 0;
result = inport(port);
printf("Word read from port %d = 0x%X\n", port, result);
return 0;
}
Но нужно уточнить про ДОС — все пишется под ДОС и работать будет только в ДОС? Именно это и будет определять рабочие функции — Win'9x/Me с портами работает иначе нежели ДОС и NT.
Если и писать и работать в ДОС (т.е. доступ к железу практически прямой), то есть рабочие куски...
|
|