提问:CH375初始化不成功????

电路: STC89C52单片机 -----CH375 INTO(12脚) ----INT#(1脚) TXD(11脚) -----TXD(5脚) RXD(10脚)-------RXD(6脚),使用12M晶体,30P电容 CH375 ,9脚接0.01U电容,1-2脚接0.1U电容 5V供电.

main( ) { UINT8 i; LED_OUT_INIT( ); LED_OUT_ACT( ); /* 开机后LED亮一下以示工作 */ mDelaymS( 100 ); /* 延时100毫秒 */ LED_OUT_INACT( ); mInitSTDIO( ); /* 为了让计算机通过串口监控演示过程 */ printf( "Start\n" ); i = CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */ mStopIfError( i ); /* 其它电路初始化 */

初始化CH375出错. P1,4 一直闪 请问什么问题啊!

你以串口进行通信的话,可以参考CH375LIB.ZIP\MCS51\FILELIB5\EXAM7下的例子程序,你最好先不用库的初始化,先发测试命令测试你的硬件连线是否正常。 还有就是你用我们的子程序库的话,大概需要10K左右的程序空间,你用STC89C52单片机,程序空间应该不够。


测试命令? 能给个例程 吗 新手 求!


测试命令实际上就是通过命令端口写一个0X06的命令下去,接着在通过数据端口写一个数据下去,在通过数据端口将数据读回来。


/* 2004.03.05 **************************************** ** Copyright (C) W.ch 1999-2004 ** ** Web: http://www.winchiphead.com ** **************************************** ** USB 1.1 Host Examples for CH375 ** ** KC7.0@MCS-51 ** **************************************** */ /* CH375作为USB主机接口的程序示例 */

/* MCS-51单片机C语言的示例程序, U盘数据读写 */

#include #include #include

/* 定义CH375命令代码及返回状态 */ #include "CH375INC.H" /* CH375特性 */ #define CH375_BLOCK_SIZE 64 /* CH375 maximum data block size */ #define CH375_BLK_PER_SEC 8 /* CH375 block per sector, SECTOR_SIZE/CH375_BLOCK_SIZE */

/* 以下定义适用于MCS-51单片机,其它单片机参照修改,为了提供C语言的速度需要对本程序进行优化 */ #include unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 */ unsigned char volatile xdata CH375_DAT_PORT _at_ 0xBCF0; /* CH375数据端口的I/O地址 */ unsigned char xdata DATA_BUFFER[512] _at_ 0x0000; /* 外部RAM数据缓冲区的起始地址,长度不少于一次读写的数据长度 */ sbit CH375_INT_WIRE = 0xB0^2; /* P3.2, INT0, 连接CH375的INT#引脚,用于查询中断状态 */

/* 在P1.4连接一个LED用于监控演示程序的进度,低电平LED亮,当U盘插入后亮 */ sbit P1_4 = P1^4; sbit P1_5 = P1^5;

#define LED_OUT_ACT( ) { P1_4 = 0; } /* P1.4 低电平驱动LED显示 */ #define LED_OUT_INACT( ) { P1_4 = 1; } /* P1.4 低电平驱动LED显示 */ #define LED_DAT_CT( ) { P1_5 = 0; } /* P1.4 低电平驱动LED显示 */

/* 延时2微秒,不精确 */ void delay2us( ) { unsigned char i; for ( i = 2; i != 0; i -- ); }

/* 延时1微秒,不精确 */ void delay1us( ) { unsigned char i; for ( i = 1; i != 0; i -- ); }

/* 延时100毫秒,不精确 */ void mDelay100mS( ) { unsigned char i, j, c; for ( i = 400; i != 0; i -- ) for ( j = 400; j != 0; j -- ) c+=3; }

/* 基本操作 */

void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay2us(); CH375_CMD_PORT=cmd; delay2us(); }

void CH375_WR_DAT_PORT( unsigned char dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ CH375_DAT_PORT=dat; delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */ }

unsigned char CH375_RD_DAT_PORT() { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */ return( CH375_DAT_PORT ); }

/* 等待CH375中断并获取状态 */ unsigned char mWaitInterrupt() { /* 主机端等待操作完成, 返回操作状态 */ while( CH375_INT_WIRE ); /* 查询等待CH375操作完成中断(INT#低电平) */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ return( CH375_RD_DAT_PORT( ) ); /* c = CH375_RD_DAT_PORT( ); 返回中断状态 */ /* if ( c == USB_INT_DISCONNECT ) ?; 检测到USB设备断开事件 */ /* else if ( c == USB_INT_CONNECT ) ?; 检测到USB设备连接事件 */ }

/* 检查操作状态,如果错误则显示错误代码并停机,应该替换为实际的处理措施 */

/* 设置CH375为USB主机方式 */ unsigned char mCH375Init( ) { unsigned char i; LED_OUT_ACT( ); /* 开机后LED亮一下以示工作 */ mDelay100mS( ); /* 延时100毫秒 */ // LED_OUT_INACT( );

#ifdef TEST_CH375_PORT unsigned char c; CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试工作状态 */ CH375_WR_DAT_PORT( 0x55 ); /* 测试数据 */ LED_OUT_INACT( ); /* 开机后LED亮一下以示工作 */ mDelay100mS( ); /* 延时100毫秒 */ //LED_OUT_ACT( ); c = CH375_RD_DAT_PORT( ); /* 返回数据应该是测试数据取反 */ if ( c != 0xaa ) { /* CH375出错 */ LED_DAT_CT( ); for ( i = 100; i != 0; i -- ) { /* 强制数据同步 */ CH375_WR_CMD_PORT( CMD_RESET_ALL ); /* CH375执行硬件复位 */ c = CH375_RD_DAT_PORT( ); /* 延时 */ } mDelay100mS( ); /* 延时至少30mS */ } #endif CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); /* 设置USB工作模式 */ CH375_WR_DAT_PORT( 6 ); /* 模式代码,自动检测USB设备连接 */ for ( i = 0xff; i != 0; i -- ) /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /* 操作成功 */ if ( i != 0 ) return( 0 ); /* 操作成功 */ else return( 0xff ); /* CH375出错,例如芯片型号错或者处于串口方式或者不支持 */ }

main( ) { unsigned char c; LED_OUT_ACT( ); /* 开机后LED亮一下以示工作 */ mDelay100mS( ); /* 延时100毫秒 */ LED_OUT_INACT( ); LED_DAT_CT( ); mDelay100mS( ); P1_5=1; // mInitSTDIO( ); // printf( "Start\n" ); c = mCH375Init( ); /* 初始化CH375 */ while ( 1 ) { LED_OUT_ACT( ); /* LED闪烁 */ mDelay100mS( ); LED_OUT_INACT( ); mDelay100mS( ); } // printf( "Insert USB disk\n" ); // LED_OUT_ACT( ); }

看这段程序对吗!> 还是不行啊。 电路如下!


电路图 :UploadImages/20077261023993.rar20077261041094.jpg


急 急 在线等 QQ:54549122 欢迎交流啊



首先375必须用12MHZ的晶振,不能采用11.0592的;再着TXD、RXD与单片机的TXD、RXD交叉相连; 下面是串口通信的三个读写子程序:

/*CH375与单片机以串口相连接三个子程序*/ void CH375_PORT_INIT( ) { SCON = 0xD0; //设置串口为9位数据 //设置波特率和其它串口参数 } void xWriteCH375Cmd( unsigned char mCmd ) { TI = 0; TB8 = 1; SBUF = mCmd; while ( TI == 0 ); }

void xWriteCH375Data( unsigned char mData ) { TI = 0; TB8 = 0; SBUF = mData; while ( TI == 0 ); }

unsigned char xReadCH375Data( void ) { while ( RI == 0 ); RI = 0; return( SBUF ); }


老大 还是不行啊. 直接帮写个例程吧! 单片机 12M INT0 ---INT# TXD--RXD RXD-TXD P1.4 P1.5 P1.6 做指示 急 谢谢了


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