用的是PIC18F單片機,可建立TXT文件,放在電腦中也可以打開,但是寫不進去數據,CH376_WR_CMD_PORT( CMD_BYTE_WRITE );返回值為0x14,而非0x1E ,定義外部中斷中由全局變量sta獲取狀態(tài)值,如下:
void interrupt CH376HMInterrupt ()
{
? ? if(CCP3IF==1)
? ? {
? ? ? ? CH376_WR_CMD_PORT(CMD_GET_STATUS);
? ? ? ? delay_2us();
? ? ? ? sta=CH376_RD_DAT_PORT( );
? ? ? ? CCP3IF=0;
? ? }
} 不知道這樣寫對不對? ? 還有個問題:xEndCH376Cmd( );這個意思是CS=1嗎?這個,程序中我沒加,我是在結束后就令CS=1;
unsigned char Set_Mode(unsigned char mode)
{
? ? unsigned char temp;
? ? CH376_WR_CMD_PORT(CMD_SET_USB_MODE);
? ? CH376HM_DATA_WR(mode);
? ? temp=CH376_RD_DAT_PORT( );
? ? return temp;
}
voidCH376SetFileName( unsigned char *name ) ?/* 設置將要操作的文件的文件名 */
{
? ? UINT8c;
? ? CH376_WR_CMD_PORT( CMD10_SET_FILE_NAME );
? ? c = *name;
? ? CH376HM_DATA_WR( c );
? ? while ( c ) {
? ? ? ? name ++;
? ? ? ? c = *name;
? ? ? ? if ( c == DEF_SEPAR_CHAR1 || c == DEF_SEPAR_CHAR2 ) c = 0; ?/* 強行將文件名截止 */
? ? ? ? CH376HM_DATA_WR( c );
? ? }
}
void ? ?CH376FileOpen( unsigned char *name ) ?/* 在根目錄或者當前目錄下新建文件,如果文件已經存在那么先刪除 */
{
? ? if ( name ) CH376SetFileName( name ); ?/* 設置將要操作的文件的文件名 */
? ? CH376_WR_CMD_PORT( CMD_FILE_OPEN );
}
void ? ?CH376FileCreate( unsigned char *name ) ?/* 在根目錄或者當前目錄下新建文件,如果文件已經存在那么先刪除 */
{
? ? if ( name ) CH376SetFileName( name ); ?/* 設置將要操作的文件的文件名 */
? ? CH376_WR_CMD_PORT( CMD0H_FILE_CREATE );
}
unsigned char CH376WriteReqBlock( unsigned char *buf ) ?/* 向內部指定緩沖區(qū)寫入請求的數據塊,返回長度 */
{
? ? UINT8s, l;
? ? CH376_WR_CMD_PORT( CMD_WR_REQ_DATA );
? ? s = l = CH376_RD_DAT_PORT( ); ?/* 長度 */
? ? if ( l ) {
? ? ? ? do {
? ? ? ? ? ? CH376HM_DATA_WR( *buf );
? ? ? ? ? ? buf ++;
? ? ? ? } while ( -- l );
? ? }
? ? //xEndCH376Cmd( );
? ? return( s );
}
unsigned charCH376ByteWrite( unsigned char *buf, unsigned short ReqCount, unsigned short *RealCount ) ?/* 以字節(jié)為單位向當前位置寫入數據塊 */
{
? ? unsigned char s=0;
? ? CH376_WR_CMD_PORT( CMD_BYTE_WRITE );
? ? CH376HM_DATA_WR( (unsigned char)ReqCount );
? ? CH376HM_DATA_WR( (unsigned char)(ReqCount>>8) );
? ? //xEndCH376Cmd( );
? ? if ( RealCount ) *RealCount = 0;
? ? while ( 1 ) { ? ?//此處的sta是獲取反應的中斷狀態(tài)
? ? ? ? s=sta; ? ? ? //在中斷中獲取狀態(tài)賦予sta
? ? ? ? if ( s== USB_INT_DISK_WRITE) {
? ? ? ? ? ? ? ? s = CH376WriteReqBlock( buf ); ?/* 向內部指定緩沖區(qū)寫入請求的數據塊,返回長度 */
? ? ? ? ? ? ? ? CH376_WR_CMD_PORT( CMD_BYTE_WR_GO );
? ? ? ? ? ? ? ? //xEndCH376Cmd( );
? ? ? ? ? ? ? ? buf += s;
? ? ? ? ? ? ? ? if ( RealCount ) *RealCount += s;
? ? ? ? }
/*else if ( s == USB_INT_SUCCESS ) return( s );*/ ?/* 結束 */
? ? ? ? else return( s ); ?/* 錯誤 */
? ? }
}
void main() {
? ? unsigned char buff[]={0x12,0x14,0x15},s=0;
? ? init_ccp3();
? ? init_IO();
? ? mDelay100mS( ); ?/* 延時100毫秒,CH376模塊上電后需要100毫秒左右的復位時間 */
? ? mDelay100mS( );
? ? mDelay100mS( );
? ? mDelay100mS( );
? ? CH376_WR_CMD_PORT(CMD_RESET_ALL);
? ? mDelay100mS( );
? ? mDelay100mS( );
? ? mDelay100mS( );
? ? mDelay100mS( );
? ? mDelay100mS( );
? ? CH376HM_INT_EN=1; ? //開中斷
? ? Set_Mode(0x06); ? ?//設置模式
? ? while(sta!=USB_INT_CONNECT);
? ? CH376_WR_CMD_PORT(CMD_DISK_INIT); //初始化
? ? while(sta!=0x14);
? ? delay_2us();
? ? delay_2us();
? ? CH376FileCreate("/MY001.TXT\0");
? ? s=CH376ByteWrite( buff, 3, NULL ) ;
? ? CH376_WR_CMD_PORT(CMD1H_FILE_CLOSE); ? ?//CMD1H_FILE_CLOSE ?0x36
? ? delay_2us();
? ? delay_2us();
? ? while(1)
? ? {
? ? }
}