Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:АВМиС - Лабы / 6 ком порт / com
.cpp#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
HANDLE InitComPort()
{
HANDLE hComm;
DCB dcb; // структура device control block (DCB)
hComm = CreateFile(TEXT("COM1"),GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,NULL);
if(hComm == INVALID_HANDLE_VALUE)
{
puts("Ошибка открытия порта!!!");
_getch();
abort();
}
// Получили существующую структуру DCB
if (!GetCommState(hComm, &dcb))
{
puts("Ошибка! Невозможно открыть DCB структуру!!!");
_getch();
abort();
}
// Установили в ней свои параметры
dcb.BaudRate = CBR_57600; //Скорость передачи данных.
dcb.ByteSize = 8; //Определяет число информационных бит в передаваемых и принимаемых байтах.
dcb.Parity = NOPARITY; //Бит четности отсутствует
dcb.StopBits = ONESTOPBIT; //Один стоповый бит
dcb.fRtsControl = RTS_CONTROL_TOGGLE;//Задает, что сигнал RTS установлен, когда есть данные для передачи.
//Когда все символы из передающего буфера переданы, сигнал сбрасывается.
// Установили новую структуру
if (!SetCommState(hComm, &dcb))
{
puts("Ошибка создания DCB структуры!!! ");
_getch();
abort();
}
else return hComm;
}
void WriteCom(HANDLE hComm,char ch)
{
DWORD writeNumByte = 0;
if(!WriteFile(hComm, &ch, 1, &writeNumByte, NULL))
{
if(GetLastError() != ERROR_IO_PENDING)
{
puts("Ошибка файла записи!!!");
_getch();
abort();
}
}
}
int ReadCom(HANDLE hComm, char &ch)
{
DWORD dwRead;
ReadFile(hComm, &ch, 1,&dwRead,0);
return dwRead;
}
int main()
{
HANDLE hComm;
hComm = InitComPort();
COORD coordRead, coordWrite; // Структура COORD : SHORT X; SHORT Y;
HANDLE hStdOut;
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE); // Дескриптор устройства стандартного вывода.
COMSTAT ComStat; // В структуре храняться данные для коммуникации
DWORD ErrorMask = 0;
char chWrite;
char ch;
setlocale(LC_ALL,"Russian");
PurgeComm(hComm, PURGE_TXCLEAR); // Чистим исхдящий буффер
PurgeComm(hComm, PURGE_RXCLEAR); // Чистим входной буффер
coordWrite.X=0; coordWrite.Y=0;
printf("Лабораторная работа №6. COM-порт(последовательный порт)");
coordWrite.X=0; coordWrite.Y=2;
coordRead.X=0; coordRead.Y=12;
SetConsoleCursorPosition(hStdOut,coordWrite);
puts("Вводим текст: ");
SetConsoleCursorPosition(hStdOut,coordRead);
puts("Получаем текст: ");
coordWrite.Y = 4;
coordRead.Y = 14;
SetConsoleCursorPosition(hStdOut,coordWrite);
while(1)
{
//Данная функция вызывается когда появляется ошибка соединения,
//и очищает флаг ошибки для разрещения записи или чтения
ClearCommError(hComm, &ErrorMask, &ComStat);
if(ComStat.cbInQue > 0)
{
if(ReadCom(hComm,ch))
{
coordRead.X++;
SetConsoleCursorPosition(hStdOut,coordRead);
printf("%c",ch);
}
if(coordRead.X==79)
{
coordRead.X=40;
coordRead.Y++;
}
}
else
{
if(kbhit())
{
if(coordWrite.X==80)
{
coordWrite.X=0;
coordWrite.Y++;
}
chWrite = _getch();
SetConsoleCursorPosition(hStdOut,coordWrite);
printf("%c",chWrite);
coordWrite.X++;
WriteCom(hComm,chWrite);
}
}
}
return 0;
}
Соседние файлы в папке 6 ком порт