
Листинг программы по передаче данных:
unit RS232;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, DBCtrls, ActnList, Spin, Buttons, ToolWin,
ImgList, TeEngine, Series, TeeProcs, Chart, TeeFunci, Grids, Calendar,
mAPI,MPlayer;
type
TForm1 = class(TForm)
Label3: TLabel;
Start_TxD: TButton;
procedure FormCreate(Sender: TObject);
procedure TxD_Serial_DATA;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Start_TxDClick(Sender: TObject);
private
{ Private declarations }
hCOM:tHandle;
Stat:tCOMStat;
Bytes:dWord;
DataArrayByte:array[1..32] of byte;
DataArrayChar:array[1..32] of AnsiChar;
j_mass:Word;
public
{ Public declarations }
end;
const
Const_x=2;
var
Form1: TForm1;
implementation
{$R *.DFM}
//##############################################
Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('Позаботьтесь о сохранении файла данных');
CloseHandle(hCOM);
end;
//##############################################
//##############################################
procedure TForm1.FormCreate(Sender: TObject);
var
DCB:tDCB;
fSuccess:boolean;
begin
Stat.cbInQue:=0;
// открываем COM-port
hCOM:=CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,
nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if hCOM=INVALID_HANDLE_VALUE then begin
ShowMessage('Не могу открыть порт');
Application.Terminate;
end;
// параметры COM-Port_a
SetupComm(hCOM,8192,8192);
EscapeCommFunction (hCOM, SETDTR);
EscapeCommFunction (hCOM, SETRTS);
try
fSuccess:=GetCommState(hCOM,DCB);
with DCB do begin
// BaudRate:=115200; //инициализация
BaudRate:=9600; //инициализация
ByteSize:=8; //последовательного
Parity:=NoParity; //порта
StopBits:=OneStopBit; //
end;
fSuccess:=SetCommState(hCOM,DCB);
except
ShowMessage('Не удалось настроить порт');
end;
end;
//##############################################
procedure TForm1.Start_TxDClick(Sender: TObject);
begin
TxD_Serial_DATA;
end;
//##############################################
Procedure TForm1.TxD_Serial_DATA;// транслируем в COM-port
var
n_byte:Byte; //число транслируемых байт
begin
// Формируем в массиве DataArrayChar сообщение: /Side_2/
//Char-символами, соответственно кодовой таблице Windows (CP-1251)
DataArrayByte[1]:=$30;
DataArrayByte[2]:=$31;
DataArrayByte[3]:= $32;
DataArrayByte[4]:= $33;
DataArrayByte[5]:=$60;
DataArrayByte[6]:=$78;
j_mass:=1;
for n_byte:= 1 to 6 do begin
WriteFile(hCOM,DataArrayByte[j_mass],1,Bytes,nil);
j_mass:=j_mass+1;
end;
//В конце сообщения добавляем символ dec_13/CR(возврат каретки
//или конец строки)...
DataArrayByte[1]:=$0D;
WriteFile(hCOM,DataArrayByte[1],1,Bytes,nil);
end;
//##############################################
END.
Вывод: В ходе выполнения работы были изучены принципы организации асинхронного обмена в последовательных каналах передачи данных. Приобретены практические навыки программирования асинхронных приемопередатчиков (UART).