Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Как переделать мне зто для работы в 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.043 c
3-1079523855
stas
2004-03-17 14:44
2004.04.11
Нумерация записей


1-1082487555
spogi
2004-04-20 22:59
2004.04.11
Shell_TrayWND in WinXP


1-1082964495
Серж
2004-04-26 11:28
2004.04.11
CASE для Дельфи


3-1079414994
truntaev
2004-03-16 08:29
2004.04.11
Как закрыть паролем базу в Interbase?


1-1079707691
sherminator
2004-03-19 17:48
2004.04.11
часть переменной...