|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с COM1 на Delphi6. Please!
Объясните пожалуйста поподробнее, как с ним работать. На Паскале был модуль Async.tpu, но под Windows XP он не работает (Делал похожую прогу лет 10 назад -- приём/передача на у-во с 8-битным МП -- там-то всё гораздо проще на ASM'e!)
P/S/ Скачал пример одного "умника", где в порт посылается символ "$". В это время закачивал музыку на телефон. После разных сообщений об ошибках повисло всё, включая телефон. Вытащил-вставил аккумулятор, но он (телефон) перестал вообще производить звуки, менять темы и т.д. Слетела прошивка кажется. Отвёз в сервис-центр... Сам бы не поверил, если б со мной не случилось) Последний раз редактировалось maks26, 19.11.2009 в 11:27. |
#2
|
||||
|
||||
Ну а как ты хотел...экспериментировать с оборудованием не шутки...
Вот кое что нашел... Код:
unit Unit1; interface uses Windows; type TComPort = class private hFile: THandle; public constructor Create; destructor Destroy; override; function InitCom(BaudRate, PortNo: Integer; Parity: Char; CommTimeOuts: TCommTimeouts): Boolean; procedure CloseCom; function ReceiveCom(var Buffer; Size: DWORD): Integer; function SendCom(var Buffer; Size: DWORD): Integer; function ClearInputCom: Boolean; end; implementation uses SysUtils; constructor TComPort.Create; begin inherited; CloseCom; end; destructor TComPort.Destroy; begin CloseCom; inherited; end; function TComPort.InitCom(BaudRate, PortNo: Integer; Parity: Char; CommTimeOuts: TCommTimeouts): Boolean; var FileName: string; DCB: TDCB; PortParam: string; begin result := FALSE; FileName := 'Com' + IntToStr(PortNo); {имя файла} hFile := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hFile = INVALID_HANDLE_VALUE then exit; //установка требуемых параметров GetCommState(hFile, DCB); //чтение текущих параметров порта PortParam := 'baud=' + IntToStr(BaudRate) + ' parity=' + Parity + ' data=8 stop=1 ' + 'octs=off'; if BuildCommDCB(PChar(PortParam), DCB) then begin result := SetCommState(hFile, DCB) and SetCommTimeouts(hFile, CommTimeOuts); end; if not result then CloseCom; end; procedure TComPort.CloseCom; begin if hFile < > INVALID_HANDLE_VALUE then CloseHandle(hFile); hFile := INVALID_HANDLE_VALUE; end; function TComPort.ReceiveCom(var Buffer; Size: DWORD): Integer; var Received: DWORD; begin if hFile = INVALID_HANDLE_VALUE then raise Exception.Create('Не открыта запись в Com порт'); if ReadFile(hFile, Buffer, Size, Received, nil) then begin Result := Received; end else raise Exception.Create('Ошибка приема данных: ' + IntToStr(GetLastError)); end; function TComPort.SendCom(var Buffer; Size: DWORD): Integer; var Sended: DWORD; begin if hFile = INVALID_HANDLE_VALUE then raise Exception.Create('Не открыта запись в Com порт'); if WriteFile(hFile, Buffer, Size, Sended, nil) then begin Result := Sended; end else raise Exception.Create('Ошибка передачи данных: ' + IntToStr(GetLastError)); end; function TComPort.ClearInputCom: Boolean; begin if hFile = INVALID_HANDLE_VALUE then raise Exception.Create('Не открыта запись в Com порт'); Result := PurgeComm(hFile, PURGE_RXCLEAR); end; end. В начале был Бит, потом Байт и только потом появилось Слово... |
#3
|
|||
|
|||
О! То, что надо, спасибо. Единственное, что пока не понял, а как я узнаю когда именно пришёл байт, а когда нет... По не нулевому размеру считанного буффера?
|
#4
|
|||
|
|||
Подскажите
Извините за столь глопый вопрос,но что такое исходники?И что с ними делать???Заранее спасибо.
|
#5
|
||||
|
||||
Чёёёёёё)))
Исходный текст программы... Это тот код который набираешь в среде Delphi или Pascal... А точнее те файлы в которых содержится этот код... А вопрос действительно глупый))) В начале был Бит, потом Байт и только потом появилось Слово... |