阅读:1714回复:9
WIN2000下串行通讯的问题
我现在要做一个串行通讯程序,要求如下:
单片机使用串行通讯方式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都不了解,想听听大家的意见看看能不能用它来解决我的问题。希望大家能帮我。谢谢 |
|
最新喜欢:fnight |
沙发#
发布于:2002-11-04 11:52
nt下写个driver,可以访问io端口
vc中应该有对串口操作的class,可以直接使用操作串口,不需写驱动 |
|
|
板凳#
发布于:2002-11-04 11:55
VC++串行通讯怎么设置可编程位啊,我看了DCB结构,在设置校验位有个MASK,它是什么意思?,怎么使用啊
|
|
地板#
发布于:2002-11-04 12:17
这个你看msdn吧
我具体没有用过 |
|
|
地下室#
发布于:2002-11-04 12:50
实在不懂,一个单片机的程序干吗非要用VC写呀?还要编个驱动程序?GOD。
|
|
|
5楼#
发布于:2002-11-04 13:15
用什么写啊,你很牛是吗?,你给出个注意啊。
|
|
6楼#
发布于:2002-11-04 17:09
就是用DCB结构中的parity变量,用MARK或SPACE,MARK即指校验位固定为“1”,SPACE则固定为“0”,希望我没有记反,你可以实测一下。
|
|
|
7楼#
发布于:2002-11-04 17:13
谢谢minsoft
我回去试一下,如果成功另开个贴子,必有重谢 |
|
8楼#
发布于:2002-11-05 08:57
就是用DCB结构中的parity变量,用MARK或SPACE,MARK即指校验位固定为“1”,SPACE则固定为“0”,希望我没有记反,你可以实测一下。 其实要实现多机通信还可以使用ASCII码或者BCD码方式。就不用 第九位数据了。 不过minsoft兄说的应该可行,API中有两个专用函数。 |
|
|
9楼#
发布于:2003-01-15 21:40
你可以用这个类
|
|
|