我寫數(shù)據(jù)到文件,出現(xiàn)W?123, 并且我寫得數(shù)據(jù)時沒有問題的, 例如,我寫123 ,我的使l=5才能寫進去,l=3,只能寫進去1,23就寫不進去了,因為有兩個直接被默認占用,我想那兩個字節(jié)應(yīng)該就是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; //設(shè)置主時鐘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();//設(shè)置USB工作在06模式下 if (s2 ==0x14) break; }
while ( 1 ) { while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { /* 檢查U盤是否連接,等待U盤插入,對于SD卡,可以由單片機直接查詢SD卡座的插拔狀態(tài)引腳 */ mDelaymS( 100 ); } mDelaymS( 200 ); /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */
while(1) { if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; /* 初始化磁盤并測試磁盤是否就緒 */ } s = CH376FileOpen( "/MY_ADB.TXT" );/* 打開文件,該文件在根目錄下 */ if ( s == USB_INT_SUCCESS ) { /* 文件存在并且已經(jīng)被打開,移動文件指針到尾部以便添加數(shù)據(jù) */ tmpd=0; res = CH376ByteLocate( 0xFFFFFFFF ); /* 移到文件的尾部 */ mStopIfError( s ); } else if ( s == ERR_MISS_FILE ) { /* 沒有找到文件,必須新建文件 */ tmpd=1; s = CH376FileCreate( NULL ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建,不必再提供文件名,剛才已經(jīng)提供給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 ); /* 將二制制數(shù)據(jù)格式為一行字符串 */ else s = sprintf( buf, "%d\x9", adc ); s = CH376ByteWrite( buf,8, NULL ); mStopIfError( s );} /* 如果實際產(chǎn)品中有實時時鐘,可以根據(jù)需要將文件的日期和時間修改為實際值,參考EXAM10用CH376DirInfoRead/CH376DirInfoSave實現(xiàn) */ s = CH376FileClose( TRUE ); /* 關(guān)閉文件,自動計算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動更新文件長度 */ 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; //増計數(shù)模式 } ////////////////////////////// ////////////////////////////// #pragma vector = TIMERA0_VECTOR __interrupt void isp_TIMERA0(void) { TACCTL0&=~CCIFG; adc += 1; } 以上是我的主程序,其他程序與源代碼差不多
把和CH376相關(guān)的所有代碼 打包傳上來,或者發(fā)到TECH@WCH.CN. \x9 是什么意思? 串口使用的是中斷方式操作CH376的嗎?
\x9 是向excel寫數(shù)據(jù)換列操作。 串口使用的是中斷方式操作CH376。UploadImages/201011221712587.rar
先使用串口查詢方式測試吧
您能不能幫我看看,我實在是找不到問題出現(xiàn)在哪了。謝謝!我先用先用串口查詢方式測試一下
為什么要用到查詢方式測試呢,有什么區(qū)別嗎?
我就問一個問題,我在計算機上建立的excel表放到U盤中不能寫進去數(shù)據(jù),但是由376芯片建立的excel卻能寫進去數(shù)據(jù),我不太明白這是怎么回事?請解釋!