我写数据到文件,出现W?123, 并且我写得数据时没有问题的, 例如,我写123 ,我的使l=5才能写进去,l=3,只能写进去1,23就写不进去了,因为有两个直接被默认占用,我想那两个字节应该就是W和?号了吧。针对这个问题我希望您能给予指教。谢谢!
你把你代码传上来看看吧
#include #include #include #include "HAL.H" #include "DEBUG.H" #include "FILE_SYS.H"
char buf[64]; UINT8 res; UINT8 s; UINT8 s1; UINT8 s2; int i; UINT8 month, date, hour; UINT16 adc; int tmpd;
main( ) { WDTCTL = WDTPW+WDTHOLD; P5DIR =0x30; P5SEL =0x30; BCSCTL1 &=~XT2OFF; //设置主时钟MCLK和子时钟SMCLK do { IFG1&=~OFIFG; for(i=0xff;i>0;i--); } while((IFG1&OFIFG)!=0); BCSCTL2 |=SELS+SELM1; U1CTL |= SWRST; P3SEL |= BIT6; P3SEL |= BIT7; //430串口初始化 P3DIR |= BIT6; U1CTL |= CHAR; U1TCTL |= SSEL1; U1BR1 = 0x01; U1BR0 = 0xA0; //波特率9600 U1MCTL = 0xC0; ME2 |= UTXE1+URXE1; UCTL1 &= ~SWRST; _EINT(); while(1) { s1 = mInitCH376Host(); //测试通讯口 if (s1 ==0x01) break; } while (1) { s2 = mInitCH376Host1();//设置USB工作在06模式下 if (s2 ==0x14) break; }
while ( 1 ) { while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ mDelaymS( 100 ); } mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */
while(1) { if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; /* 初始化磁盘并测试磁盘是否就绪 */ } s = CH376FileOpen( "/MY_ADB.TXT" );/* 打开文件,该文件在根目录下 */ if ( s == USB_INT_SUCCESS ) { /* 文件存在并且已经被打开,移动文件指针到尾部以便添加数据 */ tmpd=0; res = CH376ByteLocate( 0xFFFFFFFF ); /* 移到文件的尾部 */ mStopIfError( s ); } else if ( s == ERR_MISS_FILE ) { /* 没有找到文件,必须新建文件 */ tmpd=1; s = CH376FileCreate( NULL ); /* 新建文件并打开,如果文件已经存在则先删除后再新建,不必再提供文件名,刚才已经提供给CH376FileOpen */ mStopIfError( s ); } else mStopIfError( s ); /* 打开文件时出错 */ if(tmpd==1) { strcpy(buf,"累计热量\x9"); s = CH376ByteWrite( buf, 12, NULL ); strcpy(buf,"累计流量\x9"); s = CH376ByteWrite( buf, 12, NULL ); strcpy(buf,"瞬时流量\x9"); s = CH376ByteWrite( buf, 12, NULL ); strcpy(buf,"累计时间\x9"); s = CH376ByteWrite( buf, 12, NULL ); strcpy(buf,"供水温度\x9"); s = CH376ByteWrite( buf, 12, NULL ); strcpy(buf,"回水温度\x9"); s = CH376ByteWrite( buf, 12, NULL ); strcpy(buf,"时间日期\xd\xa"); s = CH376ByteWrite( buf, 12, NULL ); } INIT_TIMERA0(); for(i=0;i<7;i++) { if(i==6)s = sprintf( buf, "%d\xd", adc ); /* 将二制制数据格式为一行字符串 */ else s = sprintf( buf, "%d\x9", adc ); s = CH376ByteWrite( buf,8, NULL ); mStopIfError( s );} /* 如果实际产品中有实时时钟,可以根据需要将文件的日期和时间修改为实际值,参考EXAM10用CH376DirInfoRead/CH376DirInfoSave实现 */ s = CH376FileClose( TRUE ); /* 关闭文件,自动计算文件长度,以字节为单位写文件,建议让程序库关闭文件以便自动更新文件长度 */ mStopIfError( s );
} } ///////////////////////////////// #pragma vector = UART1RX_VECTOR __interrupt void isp_Uart1_Receive(void) { res = U1RXBUF; } //////////////////////////////// //////////////////////////////// INIT_TIMERA0(void) { TACTL = TASSEL1 +TACLR; //选择SMCLK,清除TAR CCTL0 = CCIE; //CCR0 允许中断 CCR0 = 40000; //100Hz TACTL |= MC0; //増计数模式 } ////////////////////////////// ////////////////////////////// #pragma vector = TIMERA0_VECTOR __interrupt void isp_TIMERA0(void) { TACCTL0&=~CCIFG; adc += 1; } 以上是我的主程序,其他程序与源代码差不多
把和CH376相关的所有代码 打包传上来,或者发到TECH@WCH.CN. \x9 是什么意思? 串口使用的是中断方式操作CH376的吗?
\x9 是向excel写数据换列操作。 串口使用的是中断方式操作CH376。UploadImages/201011221712587.rar
先使用串口查询方式测试吧
您能不能帮我看看,我实在是找不到问题出现在哪了。谢谢!我先用先用串口查询方式测试一下
为什么要用到查询方式测试呢,有什么区别吗?
我就问一个问题,我在计算机上建立的excel表放到U盘中不能写进去数据,但是由376芯片建立的excel却能写进去数据,我不太明白这是怎么回事?请解释!