如何对并口进行按位操作呢?(50分)

  • 主题发起人 t163t163
  • 开始时间
T

t163t163

Unregistered / Unconfirmed
GUEST, unregistred user!
我用了汇编:
procedure portout(ioaddr:word;data:byte);
asm
mov dx,ioaddr
mov al,data
out dx,al
end;
end;

我输出:portout(387,2);
结果会将第1位置0,第2位置1,
而我的意思是要让第1位保持原来的电平,并且将第2位置1,我该怎么办呢?

谢谢!
 
设定一个全局变量如PortStatus;
用作保存并口状态,当你要写某位(如i)为1时,
用WRITE_EXTBIT(i,1);//
为0则用:WRITE_EXTBIT(i,0);//
C语言源代码在下面,相信你能够改写为DELPHI 的。

unsigned char mask[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;
unsigned char PortStatus ;
//将第NUM位(0-7)写位值value;
void WRITE_EXTBIT(unsigned char num,unsigned char value)
{
unsigned char i;
i=mask[num];
if(value == 0)
PortStatus &= ~i ;
else
PortStatus |= i ;
outport(0x387,PortStatus ); //这里是你需要的并口端口号。
}
 
竹竿:
谢谢了这分数归你了,但还想向你请教个问题:
平口是否可以用中断来控制呢?
 
哎,实在不好意思,对于并口的编程,我并不是很清楚,大概了解了一下,
并口是有中断的,但可能都是外部设备对中断位进行操作而产生的,仅仅对数据端口
进行操作,可能不会引起中断,你试着通过线程方式来读取并口数据,也许可以满足你的
需要。
你可以搜索“IEEE1284协议”,以获得更详细的资料。
以下site可以去看看。
http://www.fapo.com/ieee1284.htm
http://www.made-it.com/CKP/ieee1284.html
http://www.mouse.demon.nl/ckp/parallel/ieee1284.htm
http://www.fapo.com/eppmode.htm

另外,水利出版社好象出版了一本名字好象是“《并行端口编程大全》”的书,可以找来看一下。
附:
IEEE1284协议是双向并口的完整描述,包含EPP、ECP、字节、半字节和兼容五种传输方式。
其中EPP、ECP是独立的双向并口字节、半字节方式仅为反向数据传输(外投到PC机)方式,
和兼容方式一起构成双向并口,兼容方式即为普通的打印机并口(仅能下传数据到外设)。



 
接受答案了.
 
顶部