cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2451|回复: 4

大家帮我看看这个串口程序有没有问题,thank you!

[复制链接]
发表于 2006-5-21 04:38:41 | 显示全部楼层 |阅读模式
我在做串口通讯,自发自收一组数据,程序编译通过了,并已将机箱后面25针的串口2和3角用导线短接,但是接收不到数据。是程序有问题还是其它一些硬件原因?
发送程序如下:
static float b[48];     /*要发送的实型数组*/
int CVICALLBACK Send (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
{   char c[48][9];
    char com[10]={"COM1"};
    char *buf;  
int size,j,k,n=0;
int status;
switch (event)
  {
  case EVENT_COMMIT:
  buf=malloc(1000) ;
  for(j=0;j<=47;j++)
     b[j]=2;  /*给数组变量赋值*/
  for(j=0;j<=47;j++)
     sprintf(c[j],"%6.2f",b[j]);  /*将实型数据转化为字符型数据*/
     for(j=0;j<=47;j++)     
     { for(k=0;k<=8;k++)
       buf[n]=c[j][k],n++;}   /*将二维字符数组转化为一维  */
    size=strlen(buf);
    status=OpenComConfig( 1,com,9600,0,8,1,1000,1000);/*发送*/
           if(status!=0)
          {MessagePopup("Error","config failed!");
           return 0;}
  SetCTSMode(1,LWRS_HWHANDSHAKE_OFF);
  FlushOutQ(1);  
                FlushInQ(1);  
         status=ComWrt(1,buf,size);  
  if( status!=size)
                MessagePopup("Error","send data failed!");
  while(1)
  {   size=GetOutQLen(1);
      if(size==0)
         break;}
  CloseCom(1);
  QuitUserInterface(0);  
            break;
  }
return 0;
}
接收程序如下:
static float e[48];
int CVICALLBACK Start (int panel, int control, int event,
  void *callbackData, int eventData1, int eventData2)
{   
    char com[10]={"COM1" };
    char cuf[1000];
    char buf[10];
    int j,k,n=0;
    int size;
    int status;
        
            switch (event)
  {
  case EVENT_COMMIT:
  
  status=OpenComConfig(1,com,9600,0,8,1,1000,1000);
         if(status!=0)
                {MessagePopup("Error","config failed!");
                 return 0;}                                         /*打开串口*/
  SetCTSMode(1,LWRS_HWHANDSHAKE_OFF);
  size=GetInQLen(1);
  status=ComRd(1,cuf,size);     /*读取串口字符数据*/
                if( status!=size)
                MessagePopup("Error","send data failed!");
  CloseCom(1);     

  for(j=0;j<=47;j++)       /*将字符串数据转化为实型数据*/
  {for(k=0;k<=8;k++)
   d[k]=cuf[n],n++;
                 e[j]=atof(d);}     
不知哪位高手可以指点一下,我为什么收不到数据.
[此贴子已经被作者于2006-5-20 20:42:43编辑过]

发表于 2006-5-25 07:19:54 | 显示全部楼层
解决后可以留下解决的办法,以后的朋友可以共享,不用重复去研究了,呵呵!
发表于 2006-5-22 17:00:49 | 显示全部楼层
兄弟你看一下CVI自带的一个串口操作的例子,按照里面的步骤修改,我做过一次,是可以实现的,它接收好像要一个installcomevent,到时候有数据来的时候它会产生接收事件,这样就能接收到的!还有配置我一下记不太清楚是在哪里配置了!看一下例子就会很清晰的!
 楼主| 发表于 2006-5-25 00:40:05 | 显示全部楼层
经过调试,这个问题已经解决了,谢谢各位的指导。
发表于 2006-5-24 00:52:33 | 显示全部楼层
<>机箱后面25针的串口2和3角??据我所知PC都是9口的,当然有25口的串口,只是请你确认</P>
<>你发送数据后已经关闭了串口,然后又打开串口?即使是不调用closecom,用OpenComConfig也是先关后开,也就是重新初始化的com口</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2024-5-18 22:42 , Processed in 0.649270 second(s), 8 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表