中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 打印口传送(打印口与单片机联机)的求助,谢谢
作者:
标题: 打印口传送(打印口与单片机联机)的求助,谢谢 上一主题 | 下一主题
linzhixiao
初级用户




积分 160
发帖 15
注册 2004-1-6
状态 离线
『楼 主』:  打印口传送(打印口与单片机联机)的求助,谢谢

打印口与单片机联机程序
以下这段程序在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;
                }
        }
}


2004-4-25 00:00
查看资料  发送邮件  发短消息 网志  OICQ (5727658)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: