[求助]请在坐的朋友指点下我这个程序

我的系统想做一个AD转换,把数据传到上位机去,不知道怎么回事,上面不能得到数据,驱动已经装上了,设备也打开了,可是就是得不到数据,希望能给我指点一二。 下面是固件程序的核心代码。 void CH375_Init( ) { unsigned char i; CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试CH375是否正常工作 */ CH375_WR_DAT_PORT( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( CH375_RD_DAT_PORT( ) != i ) { /* CH375不正常 */ for ( i=1000; i!=0; i-- ) { CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重复发命令,执行硬件复位 */ CH375_RD_DAT_PORT( ); } CH375_WR_CMD_PORT( 0 ); Delay50ms( ); } /* 设置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT( 2 ); /* 设置为使用内置固件的USB设备方式 */ for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; } }

//--------------------------------------- //AD转换程序的相应函数 void GET_AD_RESULT(void) { UINT8 *p; UINT8 n; UINT8 temp; n=0; if(F0==0)p=(UINT8 *)&PACK.up.mBuffer0; else p=(UINT8 *)&PACK.up.mBuffer1; while(1) { while(ADC_CONTR&0x10)break; ADC_CONTR|=0X08; if(n<=MAX_DATA_SIZE) { temp= ADC_DATA>>6;

*(p+n)=ADC_DATA<<2|ADC_LOW2; n++; *(p+n)=temp; n++; } else { F0=~F0; break; } } } //--------------------------------------- void set_p1_adc_channel(void) { P1=0xff; ADC_CONTR=ADC_CONTR|0X80; P1M0=0X01; P1M1=0X01; delay2us(); } //--------------------------------------- void Senddata(void) { UINT8 cnt; UINT8* buf; CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向USB端点2的发送缓冲区写入数据块 */ cnt=MAX_DATA_SIZE; CH375_WR_DAT_PORT( cnt ); /* 首先写入后续数据长度 */ if(F0==1) buf=(UINT8*)&PACK.up.mBuffer0; /* 指向状态包缓冲区 */ else buf=(UINT8*)&PACK.up.mBuffer1; do { CH375_WR_DAT_PORT( *buf ); /* 写入数据到CH372 */ buf ++; } while ( -- cnt ); } //--------------------------------------- main(void) { UINT8 int_state; CH375_Init( ); set_p1_adc_channel(); ADC_CONTR|=0XE0; F0=0; ADC_DATA=0; ADC_LOW2=0; ADC_CONTR|=0X08; GET_AD_RESULT(); while( 1) { delay2us(); Senddata(); ADC_CONTR|=0x0E8; GET_AD_RESULT(); while(INT1); INT1=1; CH375_WR_CMD_PORT(CMD_GET_STATUS); int_state=CH375_RD_DAT_PORT(); switch(int_state) {case USB_INT_EP2_IN: { CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); break; } default: { CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); break; } } } } 上位机的简单接收程序,根据TEST修改的。 void main ( ) { int key; unsigned char mBuffer[100]={0},m; unsigned char mReadBuf[100]; unsigned long i, mLength=61, mTestCount, mErrCnt, mStep, mTotal;

printf( "\nCH372/CH375 Bulk Data Test Program V1.1 , Copyright (C) W.ch 2004.12\n" ); printf( "test data correctness \n" );

// 需要使用DLL则需要先加载,没有此句则会自动加载 printf( "*** Load DLL: CH375DLL.DLL \n" ); if ( LoadLibrary( "CH375DLL.DLL" ) == NULL ) return; // 加载DLL失败,可能未安装到系统中

printf( "*** CH375OpenDevice: 0# \n" ); if ( CH375OpenDevice( 0 ) == INVALID_HANDLE_VALUE ) return; /* 使用之前必须打开设备 */

CH375SetTimeout( 0, 5000, 5000 ); // 设置USB数据读写的超时,超过5000mS未完成读写将强制返回,避免一直等待下去

printf( "*** Step-1: test data correctness: 10000000 times, random length and data\n" ); for ( mTestCount=0; mTestCount<10000000; ++mTestCount ) // 循环测试 { if ( kbhit() ) { key = getch( ); if ( key == 0x1b || key == 0x20 ) { // ESC键或者空格键终止循环 printf( "*** CH375CloseDevice by break: 0 \n" ); CH375CloseDevice( 0 ); exit(2); break; } }

if ( CH375ReadData( 0, mReadBuf, &mLength ) ) // 接收成功 { if(mLength==0) printf("数据读失败\n"); else { for ( i=0; i printf( " %02XH", mReadBuf[i] ); } } } else printf("不能读数据\n"); } if ( mErrCnt==0 ) printf( "*** passed \n" ); // 关闭CH375设备,如果不继续使用则必须关闭设备,就象读写完硬盘中的数据文件后要关闭一样 printf( "*** Total error = %ld \n", mErrCnt ); printf( "*** CH375CloseDevice: 0 \n" ); CH375CloseDevice( 0 ); printf( "\nExit.\n" ); getch(); }

大哥,你的上位机是用什么显示的啊?我做的是虚拟示波器,用的是LABVIEW 显示啊。可我现在还部知道这样去显示啊,能否把你的电路图及显示给我。小弟将不胜感谢 我的邮箱:个人信息保护,已隐藏


我用VC,不过还有问题。


只有登录才能回复,可以选择微信账号登录