Board logo

标题: 打印口传送(打印口与单片机联机)的求助,谢谢 [打印本页]

作者: linzhixiao     时间: 2004-4-25 00:00    标题: 打印口传送(打印口与单片机联机)的求助,谢谢
打印口与单片机联机程序 以下这段程序在DOS下是完全可以运行并得到正确的结果,但在WIN98中则不稳定(可以传送,只是传送的一半就会中止传送,得不到完全的正确结果)。 当然WIN98中也是支持直接汇编写硬件端口的(当然不能在NT等系统中) 其实这个原因大家可能都知道:是CPU太快了,单片机来不及接受,但是同样的硬件,为何在DOS下非常稳定的得到结果,而在WIN98中不稳定,传送的中途就停止而不能继续传送。有网友说:增加延时的时间(把delay(X)函数的X值最大,这样我试过200多次了,并改了又改都不能通过)。 也听有人说过用中断服务程序,所以请高手指点,或者如何用中断服务程序, 改下这两种直接用汇编的函数,相应于C语言中的INP与OUTP函数,也相当于INPORT, OUTPBORT函数,我也试过直接使用C自带的INP等函数,更稳定的传送通过,所以我放弃使用C原来的端口操作函数。 请高手想个不一样的方法(我没有试过的,比如使用中断函数如何写) //从I/O口中读一个字节: int in_p(unsigned short port) { unsigned short result; _asm { mov dx,port; in ax,dx; mov result,ax; } return result; } //向I/O口中写一个字节: int out_p(unsigned short port,unsigned short databyte) { unsigned short result; for(; { if((in_p(0x379)&0x0040)==0x00) { _asm { mov dx,port; mov ax,databyte; out dx,ax; mov result,ax; } } else //if((in_p(0x379)&0x40)==0x40) { return result; } } }