大家帮我看看这个串口程序有没有问题,thank you!
我在做串口通讯,自发自收一组数据,程序编译通过了,并已将机箱后面25针的串口2和3角用导线短接,但是接收不到数据。是程序有问题还是其它一些硬件原因?发送程序如下:
static float b; /*要发送的实型数组*/
int CVICALLBACK Send (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{ char c;
char com={"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=2;/*给数组变量赋值*/
for(j=0;j<=47;j++)
sprintf(c,"%6.2f",b);/*将实型数据转化为字符型数据*/
for(j=0;j<=47;j++)
{ for(k=0;k<=8;k++)
buf=c,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;
int CVICALLBACK Start (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char com={"COM1" };
char cuf;
char buf;
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=cuf,n++;
e=atof(d);}
不知哪位高手可以指点一下,我为什么收不到数据.
[此贴子已经被作者于2006-5-20 20:42:43编辑过]
解决后可以留下解决的办法,以后的朋友可以共享,不用重复去研究了,呵呵! 兄弟你看一下CVI自带的一个串口操作的例子,按照里面的步骤修改,我做过一次,是可以实现的,它接收好像要一个installcomevent,到时候有数据来的时候它会产生接收事件,这样就能接收到的!还有配置我一下记不太清楚是在哪里配置了!看一下例子就会很清晰的! 经过调试,这个问题已经解决了,谢谢各位的指导。 <P>机箱后面25针的串口2和3角??据我所知PC都是9口的,当然有25口的串口,只是请你确认</P>
<P>你发送数据后已经关闭了串口,然后又打开串口?即使是不调用closecom,用OpenComConfig也是先关后开,也就是重新初始化的com口</P>
页:
[1]