<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312">
<title>New Page 1</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="Microsoft Theme" content="global 101, default">
<meta name="Microsoft Border" content="tl, default">
</head>
<body>
<p><small><font face="宋体">这里的人这么热情,真的感谢大家的帮忙!!!!<br>
TO Another_eYes:<br>
<br>
&gt;详细点. 如果不长, 请把代码贴上来<br>
以下贴出核心部分<br>
<br>
说了不怕大家见笑,本人对汇编一窍不通,在某处抄不一段程序如下:<br>
procedure WritePort(PortAdress:word;Value:byte);
pascal;<br>
begin
<br>
asm<br>
mov al,Value<br>
mov dx,PortAdress<br>
out dx,al<br>
end;
<br>
end;
<br>
<br>
function ReadPort(PortAdress:word) : byte;
pascal;<br>
begin
<br>
asm<br>
mov dx,PortAdress<br>
in al,dx<br>
mov @result,al<br>
end;
<br>
end;
<br>
<br>
我的程序如下:<br>
<br>
...<br>
向端口写数据<br>
读端口数据Value1<br>
for i:=1 to ...do
begin
------------+<br>
&nbsp;&nbsp;
读数据,并和Value1比较
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
&nbsp;&nbsp;
if 再读数据&lt;&gt;Value1 then
exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
&nbsp;&nbsp;
For j:=1 to ...do
begin
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+--用于消除读信号的抖动<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
延时
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|
<br>
&nbsp;&nbsp;
end;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
|<br>
end;
--------------------------------+<br>
...<br>
<br>
<br>
在第一次读的数据和以后的数据总是变动,有时相同,但多数都为高电平,</font></small></p>
<p><small><font face="宋体">即为255,但在单步时或不加循环时,读取数据正常<br>
<br>
To Jams:<br>
&gt;因而建议你在延迟前,将这些寄存器变量保存起来(保存的方法很多),延</font></small></p>
<p><small><font face="宋体">迟过后再恢复并调用即可!<br>
多谢大侠指点,但本人实在根底浅薄,希望您能写一种取实用,简单的方法,最好写一下<br>
<br>
To kokusan:<br>
&gt;用Win32 API Sleep
试试!<br>
<br>
您的方法我用过,效果是不错,但程序中一用SLEEP
后,系统响应消息,例如拖动窗</font></small></p>
<p><small><font face="宋体">口,将变的非常迟钝,而且我需要大量读取数据,用SLEEP会很不好控制。<br>
<br>
TO Another_eYes,nuke:<br>
&gt;你是先读到然后再延时再处理?<br>
&gt;为什么不保存到变量里呢?<br>
<br>
我需要读多次后进行比较,来消除抖动,必须值稳定时才能保存<br>
<br>
To kokusan:<br>
&gt;卡数据准备好标志(和设备准备好标志)判断有误,所以读写数据出错。<br>
<br>
什么是&quot;数据准备好标志(和设备准备好标志)&quot;,我的ISA卡是自己开发的,向某一地址</font></small></p>
<p><small><font face="宋体">写信号后,该卡由于连接了物理设备,再读取其相应端口数据值,没有&quot;准备好标志&quot;<br>
<br>
多谢大家的热情回答,请勿必继续讨论,明天上午的会继续回答,我很着急,谢谢谢谢谢谢谢谢!!!!!!!!!!</font></small>
</body>
</html>