#define MAX_BYTE_IO 36 /* 以字節(jié)為單位單次讀寫文件時(shí)的最大長度,默認(rèn)值是29,值大則占用內(nèi)存多,值小則超過該長度必須分多次讀寫 */
#define LIB_CFG_FILE_IO 1 /* 文件讀寫的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"內(nèi)部復(fù)制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */ #define CH375_INT_NO 0 /* CH375中斷號, CH375的中斷線INT#引腳連接單片機(jī)的INT0引腳 */ #define CH375_INT_FLAG IE0 /* IE0,CH375中斷標(biāo)志 */ #define CH375_INT_EN EX0 /* EX0,CH375中斷允許 */ #define pdata DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長度為SECTOR_SIZE */
#define CH375_INT_WIRE INT0 /* P3.2, INT0, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài) */
#define NO_DEFAULT_CH375_F_ENUM 1 /* 未調(diào)用CH375FileEnumer程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH375_F_QUERY 1 /* 未調(diào)用CH375FileQuery程序故禁止以節(jié)約代碼 */
#include "CH375HFC.H"
//如果單片機(jī)與CH375是串口連接,那么參考下面的子程序 void CH375_PORT_INIT( ) { SCON = 0xD0;// 設(shè)置串口為9位數(shù)據(jù) PCON = 0x80; TMOD = 0x20; TH1 = 0xfA; /* 11.0592MHz晶振, 9600bps */ TR1 = 1; TI = 1; //設(shè)置波特率和其它串口參數(shù) }
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */ { TI = 0; TB8 = 1; SBUF = mCmd; while ( TI == 0 ); }
void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */ { TI = 0; TB8 = 0; SBUF = mData; while ( TI == 0 ); }
UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */ { while ( RI == 0 ); RI = 0; return( SBUF ); }
void mDelaymS( UINT8 delay ) { unsigned char i, j, c; for ( i = delay; i != 0; i -- ) { for ( j = 200; j != 0; j -- ) c += 3; /* 在24MHz時(shí)鐘下延時(shí)500uS */ for ( j = 400; j != 0; j -- ) c += 3; /* 在24MHz時(shí)鐘下延時(shí)500uS */ } }
UINT8 mCopyCodeStringToXRAM( UINT8 xdata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }
void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ while ( 1 ) { mDelaymS( 100 ); mDelaymS( 100 ); } }
save375( ) { UINT8 i, month, hour; UINT16 date, adc, len; i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i ); CH375DiskReady( ); if ( CH375DiskStatus != DISK_DISCONNECT ) /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ mDelaymS( 100 ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ } mCmdParam.Create.mPathName[0]='/'; mCmdParam.Create.mPathName[1]='D'; //文件名前面字符 mCmdParam.Create.mPathName[2]='A'; //文件名前面字符 mCmdParam.Create.mPathName[3]='T'; //文件名前面字符 mCmdParam.Create.mPathName[4]='A'; //文件名前面字符 mCmdParam.Create.mPathName[5]='.'; mCmdParam.Create.mPathName[6]='T'; mCmdParam.Create.mPathName[7]='X'; mCmdParam.Create.mPathName[8]='T'; mCmdParam.Create.mPathName[9]='\0'; i = CH375FileOpen( ); /* 打開文件 */ if ( i == ERR_SUCCESS ) { /* 文件存在并且已經(jīng)被打開,移動文件指針到尾部以便添加數(shù)據(jù) */ mCmdParam.ByteLocate.mByteOffset = 0xffffffff; /* 移到文件的尾部 */ i = CH375ByteLocate( ); mStopIfError( i ); } else if ( i == ERR_MISS_FILE ) { /* 沒有找到文件,必須新建文件 */ i = CH375FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ mStopIfError( i ); } else mStopIfError( i ); /* 打開文件時(shí)出錯 */
//i = mCopyCodeStringToXRAM( mCmdParam.ByteWrite.mByteBuffer, "今天的ADC數(shù)據(jù)到此結(jié)束\xd\xa" ); //mCmdParam.ByteWrite.mByteCount = i; /* 指定本次寫入的字節(jié)數(shù),單次讀寫的長度不能超過MAX_BYTE_IO */ //i = CH375ByteWrite( ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長度不能超過MAX_BYTE_IO */ //mStopIfError( i );
mCmdParam.ByteRead.mByteCount = 10; i = CH375ByteRead( ); /* 以字節(jié)為單位向文件寫入數(shù)據(jù),單次讀寫的長度不能超過MAX_BYTE_IO */ mStopIfError( i ); P1=mCmdParam.ByteWrite.mByteBuffer;//讀第一個(gè)字節(jié)到P1口顯示
mCmdParam.Close.mUpdateLen = 1; /* 自動計(jì)算文件長度,以字節(jié)為單位寫文件,建議讓程序庫關(guān)閉文件以便自動更新文件長度 */ i = CH375FileClose( ); /* 關(guān)閉文件 */ mStopIfError( i ); mDelaymS( 200 ); return;
}
用上面的程序讀U盤中的文件data.txt,其中只有一行,今天的ADC數(shù)據(jù)到此結(jié)束\xd\xa 讀第一個(gè)字節(jié)是46,而不是今的區(qū)位碼BD F1.不知道為什么?