CH376S写不进数据,麻烦帮忙分析下!

用的是PIC18F单片机,可建立TXT文件,放在电脑中也可以打开,但是写不进去数据,CH376_WR_CMD_PORT( CMD_BYTE_WRITE );返回值为0x14,而非0x1E ,定义外部中断中由全局变量sta获取状态值,如下:

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 )  /* 向内部指定缓冲区写入请求的数据块,返回长度 */

{

    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 )  /* 以字节为单位向当前位置写入数据块 */

{

    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是获取反应的中断状态

        s=sta;       //在中断中获取状态赋予sta

        if ( s== USB_INT_DISK_WRITE) {

                s = CH376WriteReqBlock( buf );  /* 向内部指定缓冲区写入请求的数据块,返回长度 */

                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)

    {


    }

}




在线等,麻烦哪位朋友能够帮忙解答下,谢谢!


你好,请问你是什么接口通讯的?


你好!并口的!


你好!我又一步一步在线调

unsigned charCH376ByteWrite( unsigned char *buf, unsigned short ReqCount, unsigned short *RealCount ) 

 


这个函数在第二次进while(1)时中断返回值为0X1E,第一次进while(1)返回值都是0x14的。


感觉你第一次读到的0x14应该是前面的中断返回,你需要检查一下在进行ByteWrite这个操作前,有没有取消前面的中断状态,保证取消了再进行ByteWrite这个操作,发送CMD_BYTE_WRITE命令得到的第一个中断返回应该是0x1E。


你好!全部移植了沁恒的程序,现在可以写了,写的也没问题,但是读的话,读汉字是乱码。这是是什么情况?程序如下:

 CH376FileOpen( "/ME01.TXT\0" );

    CH376ByteRead( buff1,  strlen((const char *)buff), NULL);

    s = CH376FileClose( TRUE );

麻烦帮忙看下!谢谢!



你好:

如果读取字符有没有乱码?你可以使用UltraEdit软件转换文本文件到16进制查看,看看读取内容和实际有什么差别,读取的字节个数是否正确?


你好!我最近也在用这款芯片,也是用的并口模式,但在测试程序时,写入数据0x65,返回值总是为0,可以发你的程序给我参考下吗?   我的QQ邮箱是个人信息保护,已隐藏


只有登录才能回复,可以选择微信账号登录