Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборка Часть1 / avmis_labs / неразобрано / 503 / Лаб_СОМ / Пацовский / ComPort
.cpp#include <windows.h>
#include <conio.h>
#include <stdio.h>
HANDLE SetupComPort(); //Инициализация Ком
void WriteToCom(HANDLE hComm,char ch); //Запись в порт
int ReadFromCom(HANDLE hComm, char &ch); //Чтение из порта
int main()
{
HANDLE hComm;
hComm = SetupComPort(); //инициализируем ком
HANDLE hStdOut;
COORD coordRead, coordWrite, coordWall;
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
//в структуре храняться данные для коммуникации
COMSTAT ComStat;
DWORD ErrorMask = 0;
char chWrite;
char ch;
PurgeComm(hComm, PURGE_TXCLEAR);//чистим исхдящий буффер
PurgeComm(hComm, PURGE_RXCLEAR);//чистим входной буффер
coordWrite.X=0;
coordWrite.Y=0;
coordWall.Y=0;
coordRead.X=40;
coordRead.Y=0;
SetConsoleCursorPosition(hStdOut,coordWrite);
printf("Write : ");
coordWrite.Y=2;
SetConsoleCursorPosition(hStdOut,coordRead);
printf("Read : ");
coordRead.Y=2;
coordWrite.Y=1;
SetConsoleCursorPosition(hStdOut,coordWrite);
printf("--------------------------------------------------------------------------------");
coordWrite.Y=2;
SetConsoleCursorPosition(hStdOut,coordWrite);
while(1)
{
//Данная функция вызывается кгда появляется ошибка сединения,
//и очищает флаг ошибки для разрещения записи или чтения
ClearCommError(hComm, &ErrorMask, &ComStat);
//Specifies the number of bytes received by the serial provider
//but not yet read by a ReadFile operation.
if(ComStat.cbInQue > 0)
{
if(ReadFromCom(hComm,ch))
{
coordRead.X++;
SetConsoleCursorPosition(hStdOut,coordRead);
printf("%c",ch);
}
if(coordRead.X==79){
coordRead.X=40;
coordRead.Y++;
coordWall.Y=coordRead.Y;
}
}
else if(kbhit())
{
if(coordWrite.X==39)
{
printf("|");
coordWrite.X=0;
coordWrite.Y++;
coordWall.Y=coordWrite.Y;
}
chWrite = _getch();
SetConsoleCursorPosition(hStdOut,coordWrite);
printf("%c",chWrite);
coordWrite.X++;
WriteToCom(hComm,chWrite);
}
}
return 1;
}
HANDLE SetupComPort()
{
HANDLE hComm;
DCB dcb;
hComm = CreateFile("COM1",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
if(hComm == INVALID_HANDLE_VALUE)
abort();
if (!GetCommState(hComm, &dcb))
{
puts("Error! Couldn't create the DCB.");
abort();
}
dcb.BaudRate = CBR_57600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_TOGGLE;
if (!SetCommState(hComm, &dcb))
{
puts("Error with creating DCB. ");
abort();
}
else
return hComm;
}
void WriteToCom(HANDLE hComm,char ch)
{
DWORD writeNumByte = 0;
if(!WriteFile(hComm, &ch, 1, &writeNumByte, NULL))
if(GetLastError() != ERROR_IO_PENDING)
puts("Write File failed");
return;
}
int ReadFromCom(HANDLE hComm, char &ch)
{
DWORD dwRead;
ReadFile(hComm, &ch, 1,&dwRead,0);
return dwRead;
}