采用CH375B STC12C5A60S2 并口方式 單片機晶振11.0592 在運行HOST.C時,執(zhí)行到CH375FileOpen( )時不動了,后來發(fā)現(xiàn)初始化CH375的返回值不為0,這是為什么呢?請高手指點。
用HOST.C例程,經(jīng)常在插入U盤后指示燈閃,按開關(guān)鍵多次才能不閃,偶爾有一次出現(xiàn)了創(chuàng)建文件,但是創(chuàng)建出的是:LCSOFT T.XT 很奇怪,對例程程序沒做任何修改。
首先確保你硬件沒有問題,上電復位延時50ms之后測一下25腳和26腳電壓?然后做一下測試命令,CH375LibInit( ),檢測磁盤連接,磁盤初始化一步一步測試通過之后然后再創(chuàng)建文件。
謝謝,硬件連接沒有問題,25和26腳電壓分別是3.27V和0V。不知道為什么現(xiàn)在又出現(xiàn)這樣的問題了?可以讀TXT文件的內(nèi)容,也可以創(chuàng)建文件,但是不能在創(chuàng)建文件里寫入要求寫的東西,這又是怎么回事呢?
僅僅是換了個U盤,初始化通過,說明不同的U盤會影響初始化結(jié)果嗎?
上電復位后,正常的話25腳是低電平、26腳是高電平。 寫的操作和創(chuàng)建文件、讀文件類似。但是需要關(guān)閉文件的時候更新文件長度。 庫初始化的時候和U盤沒有關(guān)系,CH375DiskReady是針對磁盤初始化,如果不能通過,請查看一下返回值。
哦,太謝謝了。 我現(xiàn)在往新建的TXT文件中寫入“ABC”三個字符,結(jié)果只有一個A能顯示在文件中,其余的BC不能顯示,HOST.C中 mCmdParam.Close.mUpdateLen = 1;說是可以自動更新文件長度的呀。測試MAX_BYTE_IO和C,分別是MAX_BYTE_IO=1d07 c=16647 c=21255 c=17415 c=7。這又是為什么呢?如果要加上 CH375LibConfig |= 0x10;說是可以每次寫完數(shù)據(jù)后會自動修改/更新文件長度。那這句要放在那個位置呢?需要放嗎?謝謝
使用mCmdParam.Close.mUpdateLen = 1就可以更新文件長度,也可以在每次寫完數(shù)據(jù)后使用全局變量CH375LibConfig|= 0x10 。MAX_BYTE_IO是單次讀寫文件時的最大長度,c是每次請求讀出的長度,寫三個的話c=3。
我用的例程是HOST.C這里的,我把截取的這段程序發(fā)給你,麻煩你再幫忙看看為什么只顯示第一個a? #ifdef EN_DISK_WRITE /* 子程序庫支持寫操作 */ /* 產(chǎn)生新文件(覆蓋原文件數(shù)據(jù)),關(guān)于向原有文件中添加數(shù)據(jù)的例子請參考EXAM7和EXAM8 */ LED_WR_NOW( ); /* 寫操作 */ printf( "Create\n" ); mCopyCodeStringToIRAM( mCmdParam.Create.mPathName, "/LCSOFT.TXT" ); /* 新文件名,在根目錄下,中文文件名 */ i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); printf( "Write\n" ); pCodeStr = "asdefrtg"; while( 1 ) { /* 分多次寫入文件數(shù)據(jù) */ for ( i=0; i c = *pCodeStr; mCmdParam.ByteWrite.mByteBuffer[i] = c; if ( c == 0 ) break; /* 源字符串結(jié)束 */ pCodeStr++; } if ( i == 0 ) break; /* 源字符串結(jié)束,完成寫文件 */ mCmdParam.ByteWrite.mByteCount = i; /* 寫入數(shù)據(jù)的字符數(shù),單次讀寫的長度不能超過MAX_BYTE_IO,第二次調(diào)用時接著剛才的向后寫 */ i = CH375ByteWrite( ); /* 向文件寫入數(shù)據(jù) */ mStopIfError( i ); } printf( "Close\n" ); mCmdParam.Close.mUpdateLen = 1; /* 自動計算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動更新文件長度 */ i = CH375FileClose( ); mStopIfError( i ); LED_NOT_WR( ); #endif
怎么修改上面這段程序才能讓它在新建的TXT文件中顯示我想要的所有字符串呢?
第8樓上的程序基本和我們例子程序一樣,經(jīng)過測試是可以創(chuàng)建LCSOFT.TXT文件,并寫入asdefrtg。你檢查一下你的pCodeStr定義?或者換一個U盤試一下。
好的,非常感謝ZBin. 順便再問一下:我想實現(xiàn)每次都在原來新建好的文件中,寫入新采集到的數(shù)據(jù),而不是像例程這樣每次再寫入新的時,都把原來的給覆蓋掉了,我需要怎么做呢?
可以在打開文件之后使用移動文件指針的函數(shù) mCmdParam.ByteLocate.mByteOffset = 0xffffffff; 移到文件的尾部(或者是指定位置) CH375ByteLocate( ); 最好再做寫操作。
謝謝ZBin不厭其煩的幫忙,找到了CH375HF.PDF文件,寫的都是我想知道的--