Главная страница
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.028 c
1-1082561531
Morfey
2004-04-21 19:32
2004.04.11
Маленький шрифт на канаве


11-1060589171
vitalmoya
2003-08-11 12:06
2004.04.11
StGrd


6-1075285004
ZioN
2004-01-28 13:16
2004.04.11
Как открывать новые окна моим браузером?


14-1079109588
Soft
2004-03-12 19:39
2004.04.11
Компания Colt разработала оружие для самоубийц.


6-1079546565
kondryuk
2004-03-17 21:02
2004.04.11
OnGetThread