//---------------------------------------------------------------------------
#include <vcl.h>
#include <fstream>
#include <stdio.h>
#include <time.h>
//#include <dos.h>
#include "winio.h"
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
unsigned short int outport (unsigned short int d);
unsigned short int strobe(unsigned short int d);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
bool bResult;
bResult = InitializeWinIo();
}
//---------------------------------------------------------------------------
unsigned short int outport (unsigned short int d)
{
asm
{
push es
mov ax,d // передаем d -> AX
or ax,2048
xor ax,2816 // инвертирование инвертированных битов
mov dx,0x378
out dx,al
/*inc dx
inc dx
mov al,ah
out dx,al
*/
mov dx,0x378
inc dx
in al,dx
mov ah,0
xor ax,128 // инвертирование инвертированных битов
pop es
}
return (_AX);
}
unsigned short int strobe(unsigned short int d)
{
asm
{
push es
mov ax,d // передаем d -> AX
or ax,2048
xor ax,2816 // инвертирование инвертированных битов
mov dx,0x378
//out dx,al
inc dx
inc dx
//mov al,ah
out dx,al
/*
mov dx,0x378
inc dx
in al,dx
mov ah,0
xor ax,128 // инвертирование инвертированных битов
*/
pop es
}
return (_AX);
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ShutdownWinIo();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
outport (StrToInt(Edit1->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
Edit1->Text=TrackBar1->Position;
outport (TrackBar1->Position+256);
outport (TrackBar1->Position+0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//outport(50);
strobe(1);
Sleep(20);
//outport(255);
strobe(0);
}
//---------------------------------------------------------------------------
Непонятки с COM-портом
1. Данные отсылаются через каждые 10мс, но иногда (1 или 2 раза в секунду) частота немного сбивается - и обычно пропадает одна из посылок. Ставил процессу приоритет реального времени - не помогло.
2. В каждом байте каждой посылки теряется один бит (старший). Пробовал разные настройки порта (четность, стоп-биты, кол-во полезных бит и т.д.) - не помогает...
Кто может знает или сталкивался с этим - помогите плиз.
А, вот еще что... Пытался работать с LPT - там вообще не получилось. Кто знает, как работать с ним из WinXP? (Заходил на pcports.ru - а там все, что есть, к билдеру не подходит и не работает)
Компонент для ком порта на моем сайте