firebolt
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2004-07-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1714回复:9

WIN2000下串行通讯的问题

楼主#
更多 发布于:2002-11-04 11:43
我现在要做一个串行通讯程序,要求如下:

单片机使用串行通讯方式3,收发一个字节由11位组成:
 1位起始位;8位数据位;1位可编程位;(数据位的第9位);1位停止位。发送时,可编程位(TB8)可设为0或1;接收时,可编程位送入SCON中的R8。在呼叫分机站发送站号时,就令TB8=1,发送站号之外的命令或数据时,则令TB8=0。

问题:
1、因为VC++提供的API写串行通讯程序时,不支持9位数据位,所以以前在WIN9x下是通过汇编写了个DLL做驱动。方法很简单,关键的代码只有6行
void outportb(unsigned char pData, WORD address)
{
    __asm
   {
    mov al,pData
    mov dx,address
    out dx,al
    }
}

unsigned char inportb(WORD address)
{
  char pData;
   __asm
  {
    mov dx,address
    in  al,dx
    mov pData,al
  }
  return pData;
}
对串口的操作就是用这两个基本的函数完成的。

现在的问题是我要在WIN2000下用VC++开发新的程序,但上面的方法用不了。可能是WIN2000对系统设备的内存地址进行了保护,我想通过虚拟设备来解决这个问题,我对VXD和WDM都不了解,想听听大家的意见看看能不能用它来解决我的问题。希望大家能帮我。谢谢

最新喜欢:

fnightfnight
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-04 11:52
nt下写个driver,可以访问io端口

vc中应该有对串口操作的class,可以直接使用操作串口,不需写驱动
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
firebolt
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2004-07-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-04 11:55
VC++串行通讯怎么设置可编程位啊,我看了DCB结构,在设置校验位有个MASK,它是什么意思?,怎么使用啊
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-04 12:17
这个你看msdn吧

我具体没有用过
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-04 12:50
实在不懂,一个单片机的程序干吗非要用VC写呀?还要编个驱动程序?GOD。
我爱中医:http://www.ngotcm.com/forum/index.php
firebolt
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2004-07-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-04 13:15
用什么写啊,你很牛是吗?,你给出个注意啊。
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-04 17:09
就是用DCB结构中的parity变量,用MARK或SPACE,MARK即指校验位固定为“1”,SPACE则固定为“0”,希望我没有记反,你可以实测一下。
少了e,就少了全部
firebolt
驱动牛犊
驱动牛犊
  • 注册日期2002-11-04
  • 最后登录2004-07-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-04 17:13
谢谢minsoft

我回去试一下,如果成功另开个贴子,必有重谢
OneWind
驱动小牛
驱动小牛
  • 注册日期2002-05-15
  • 最后登录2009-04-10
  • 粉丝0
  • 关注0
  • 积分82分
  • 威望11点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-05 08:57
就是用DCB结构中的parity变量,用MARK或SPACE,MARK即指校验位固定为“1”,SPACE则固定为“0”,希望我没有记反,你可以实测一下。

   其实要实现多机通信还可以使用ASCII码或者BCD码方式。就不用
第九位数据了。
   不过minsoft兄说的应该可行,API中有两个专用函数。

  
嘿,大家好!
pumbpeng
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2010-04-02
  • 粉丝0
  • 关注0
  • 积分185分
  • 威望32点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-01-15 21:40
你可以用这个类
附件名称/大小 下载次数 最后更新
2003-01-15_SerialLib.rar (26KB)  2
游客

返回顶部