Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизКак переделать мне зто для работы в window 2000 Найти похожие ветки
← →
ma © (2004-02-09 14:45) [0]Эта штука работает под 98 виндой. Под 2000 на cli выдает ошибку "privileged instruction" . Кому не лень - помогите.
function inportb(port : Word) : Byte; assembler; //чтение байта из порта port
asm
mov dx, port
in al, dx
end;
procedure portoutb(val : Byte; port : Word); assembler; //запись байта val в порт port
asm
out dx, al;
end;
procedure outportb(port : Word; val : Byte);
begin
portoutb(val, port);
end;
//------------------------------------------------------------------------------
var AdrCom : Word;
var T1, T2 : Integer;
var AdcMin : Real = 0; AdcMax : Real = 5;
var AdrBase: array[1..4] of Word = ($3F8, $2F8, $3E8, $2E8);
procedure Beep();
begin
outportb($61, (inportb($61) or $03));
outportb($43, $B6);
outportb($42, Lo(2000));
outportb($42, Hi(2000));
Sleep(100);
outportb($61, (inportb($61) and $FC));
end;
procedure DelayFast(t : Integer); //Быстрая задержка (t, us)
var t1, t2 : Int64;
begin
QueryPerformanceCounter(t1); t2 := t1+t+1;
while t1<t2 do QueryPerformanceCounter(t1);
end;
function TestAdc12S() : Byte;
//Проверка соединения DTR-RI. Возвращает: 0 - Ok
begin
outportb(AdrCom+4, 2); DelayFast(T1); //установить DTR в -
if((inportb(AdrCom+6) and $40) <> 0) then Result := 1 //считать DTR по RI
else begin
outportb(AdrCom+4, 3); DelayFast(T1); //установить DTR в +
if((inportb(AdrCom+6) and $40) = 0) then Result := 1 else Result := 0;
end
end;
function Adc12SValue() : Real;
var i, cod : Word;
begin
cod := 0;
asm cli; end;
outportb(AdrCom+3, $40); DelayFast(T1); //Старт АЦП (TXD в +)
outportb(AdrCom+3, 0); DelayFast(T2);
asm sti; end;
for i := 15 downto 0 do
begin
outportb(AdrCom+4, 1); DelayFast(T1); //установить SCLK в 1 (RTS в -)
if(inportb(AdrCom+6) and $10 = 0) //считать бит по CTS
then cod := cod or (1 shl i);
outportb(AdrCom+4, 3); DelayFast(T1); //установить SCLK в 0
end;
if(cod and $F000 <> 0) then Result := 0 else
Result := (cod/4095.0)*(AdcMax - AdcMin) + AdcMin;
end;
← →
VMcL © (2004-02-09 15:00) [1]Через
CreateFile()
судя по всему.
← →
VMcL © (2004-02-09 15:45) [2]А вообще, тебе куда-нибудь типа сюда:
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621259&n=15
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.039 c