gunsrose
驱动牛犊
驱动牛犊
  • 注册日期2003-12-08
  • 最后登录2004-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1294回复:8

大虾请救命

楼主#
更多 发布于:2004-01-09 11:46
我是初学者,最近写了一个简单的串口读写。
使用自定义码,
   在DispatchDeviceControl()函数中
  ....................
  //前边得到uControlCode。
  
   switch(uControlCode)
   {
     case SERIALPORT_READ: //读串口0x3F8 读出的第一个字节为长度
{
  UCHAR nReadLength = READ_PORT_UCHAR((PUCHAR)0X3F8);
  for(UCHAR nFor = 0; nFor < nReadLength; nFor++)
   {
pszBuffer[nFor] = READ_PORT_UCHAR((PUCHAR)0xF38);
   }
irp->IoStatus.Information = nReadLength;

}
break;
      case SERIALPORT_WRITE: //写串口0x3F8 写的第一个字节位长度
{
    UCHAR nWriteLength = (UCHAR)pIoStackLocation->Parameters.DeviceIoControl.InputBufferLength;
WRITE_PORT_UCHAR((PUCHAR)0X3F8, nWriteLength);
for(UCHAR nFor = 0; nFor < nWriteLength; nFor++)
   {
WRITE_PORT_UCHAR((PUCHAR)0X3F8, pszBuffer[nFor]);
    }
        irp->IoStatus.Information = nWriteLength;
}
break;
default:
break;
}
.................
//后边是完成,返回。
可是测试程序 写还没做时,读程序确能读出一群乱码。ASCII 全是255。


大虾请救命,菜鸟谢谢大家。

wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-09 12:06
你的串口上有没有接信号源之类的?没有数据读出来255应该正常吧,另外你看看需不需要设置一下控制寄存器,我记得原来在WIN的虚拟86模式下用串口做板子调试的时候要先ACTIVE一下,可能还要做一个动作
根据地的兄弟们,团结就是力量
gunsrose
驱动牛犊
驱动牛犊
  • 注册日期2003-12-08
  • 最后登录2004-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-09 13:48
十分感谢楼上这位大虾。
我们先向串口写入一个串,然后再另一测试进程中读,还是乱码。
怎么办? 刚接触,也不知怎么调试,请大虾们在详细讲讲,
小弟不胜感激!

gunsrose
驱动牛犊
驱动牛犊
  • 注册日期2003-12-08
  • 最后登录2004-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-09 16:14
我问的太面了,没人理我????
请高手不吝赐教,小弟谢了。
qinxg
驱动小牛
驱动小牛
  • 注册日期2002-11-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望27点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-09 16:18
写前要判断写寄存器空, 读前要判断读寄存器里有没有数据!!!!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-09 21:20
硬件BUFFER肯定有,但是WIN自己怎么么管理232缓冲区不太清楚了,刚才这位兄弟说的你试试,要不然你就写个循环忙读,看看有没有变化,要不要设一下控制寄存器啊,兄弟,你再研究研究。
根据地的兄弟们,团结就是力量
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
6楼#
发布于:2004-01-10 03:18
数据读出来是FF设不正常,因为TxD跟RxD是两独立通道,互相没关系的.它不会自动把TxD的data送到RxD去让你去读 !!!!
但可在串口另一端接一台机echo你所发的data(如终端机),这应可把数据读出来,或把TxD和RxD(pin2 and 3)连接在一起试试(象loopback adaptor之类) !!
gunsrose
驱动牛犊
驱动牛犊
  • 注册日期2003-12-08
  • 最后登录2004-02-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-10 10:18
感谢楼上各位大虾。

//引用
//---------------------------------------------------------
硬件BUFFER肯定有,但是WIN自己怎么么管理232缓冲区不太清楚了,刚才这位兄弟说的你试试,要不然你就写个循环忙读,看看有没有变化,要不要设一下控制寄存器啊,兄弟,你再研究研究。
//---------------------------------------------------------
测试程序利用忙等待还是不行。
小弟是新手,对硬件很多还是不了解,大家能不能写段代码?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-01-12 17:23
对了,我记得传口可以设城LOOPBACK模式的,你先确保有数据写到接受BUFFER中,实在不行就接信号源(注意232电平定义),先有了数据再判断试不是程序的问题!
根据地的兄弟们,团结就是力量
游客

返回顶部