![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 12:07 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 打印口传送(打印口与单片机联机)的求助,谢谢 |
| 可打印版本 899 / 0 |
| 第1楼 linzhixiao | 发表于 2004-04-25 00:00 |
| 初级用户 发帖 15 积分 160 | |
|
打印口传送(打印口与单片机联机)的求助,谢谢 打印口与单片机联机程序
以下这段程序在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; } } } |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |