设备端:单片机使用AT89S52,CH375选择设备模式,内置固件。使用断点2上传和下传数据。
1、通过本地按键,按一次往断点2写入64个0xAA。
2、下传数据,单个数据直接使用I/O驱动LED显示,多长度舍弃。
PC端调试:WinXP系统,调试开发环境LabCVI9.0和DEBUG372
1、使用DEBUG372,所有操作都正常。
2、LabCVI9.0能正常打开设备,获取PID VID。
3、LabCVI9.0可以正确下传数据。单个数据可以在LED上正确显示。
4、LabCVI9.0上传数据,使用带缓冲模式或不使用带缓冲模式,不能正确接收数据。接收到的数据长度为0。并且显示接收成功。
附部分LabCVI9.0代码:未贴出的代码包含了设备打开、获取PID VID、设备关闭。
//下传数据
int CVICALLBACK DOWNDATA (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{//发送数据
unsigned long datalen;
unsigned char downdata;
datalen = 1;
if(event == EVENT_COMMIT)
{
GetCtrlVal(panel,PANEL_DOWNDATANUM,&downdata);
if(CH375WriteData(0,&downdata,&datalen))
SetCtrlVal(panel,PANEL_DISP,"发送成功\n");
else
SetCtrlVal(panel,PANEL_DISP,"发送失败\n");
}
return 0;
}
//设置缓冲模式和超时
int CVICALLBACK BUFUPLOAD (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
if(event == EVENT_COMMIT)
{
CH375SetBufUpload( 0, 1 );
CH375SetTimeout(0,5000,5000);
}
return 0;
}
//上传数据
int CVICALLBACK UPDATA (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char databuf[64]={0};
char disbuf[64]={'0'};
int datalen = 0;
char i;
char bufnum=0;
if(event == EVENT_COMMIT)
{
if(CH375QueryBufUpload(0))
{
if(CH375ReadData(0,&databuf,&datalen))
SetCtrlVal(panel,PANEL_DISP,"接收成功\n");
else
SetCtrlVal(panel,PANEL_DISP,"接收失败\n");
}
else
SetCtrlVal(panel,PANEL_DISP,"接收缓冲区无数据\n");
}
return 0;
}