CH372为何测试无法通过啊。。。

我画了一块板子,上面使用到了CH372和C8051F310。经过测试,F310的输入、输出都是没有问题的(高电平为3.27V,低电平为0V),但是使用CH372的datasheet上面的指令进行调试的时候,发现测试无法通过,主要表现在两个问题上: 1、返回的版本号为01H 2、输入06H指令进行按位取反时,并未取反。我现在不知道到底是哪里的问题。。。大侠帮帮我啊。。。

我的程序如下:其中,P1.0~P1.7连接CH372的D0~D7,P2连接的是A0、RD、WR三根线,P2=0cH用来写命令,P2=04H用来写数据,P2=02H用来读数据。 P2=0x0c; P1=0x01; P2=0x02; test=P1;//版本号

P2=0x0c; P1=0x15; P2=0x04; P1=0x02;//内部固件模式

P2=0x0c; P1=0x06; P2=0x04; P1=0xa5; P2=0x02; test=P1;//测试工作状态,不取反。。。 [Emot]1[/Emot]拜托啦~~

时序不是这么写的? 另外C8051单片机的IO口的输入输出方向需要写寄存器控制的 void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay2us(); CH375_D0_D7 = cmd; CH375_A0 = 1; 选择CH375的命令口 CH375_D0_D7_DIR = output; 对于标准双向I/O,请在此设置为输出方向 CH375_RD = 1; 如果I/O默认电平是高电平,那么这是可选操作 CH375_CS = 0; CH375_WR = 0; CH375_CS = 0; 对于高速单片机,该指令用于延时,以便向CH375_WR产生宽度至少为80nS的低电平脉冲 CH375_WR = 1; CH375_CS = 1; CH375_A0 = 0; CH375_D0_D7_DIR = input; 对于标准双向I/O,请在此设置为输入方向 CH375_D0_D7 = 0xFF; 对于准双向I/O,请在此设置输出全高电平 delay2us(); }

void CH375_WR_DAT_PORT( unsigned char dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ CH375_D0_D7 = dat; CH375_D0_D7_DIR = output; 对于标准双向I/O,请在此设置为输出方向 CH375_CS = 0; CH375_WR = 0; CH375_CS = 0; 对于高速单片机,该指令用于延时,以便向CH375_WR产生宽度至少为80nS的低电平脉冲 CH375_WR = 1; CH375_CS = 1; CH375_D0_D7_DIR = input; 对于标准双向I/O,请在此设置为输入方向 CH375_D0_D7 = 0xFF; 对于准双向I/O,请在此设置输出全高电平 delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */ }

unsigned char CH375_RD_DAT_PORT( void ) { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ CH375_D0_D7_DIR = input; 对于标准双向I/O,请在此设置为输入方向 CH375_D0_D7 = 0xFF; 对于准双向I/O,请在此设置输出全高电平,便于输入 CH375_CS = 0; CH375_RD = 0; CH375_CS = 0; 对于高速单片机,该指令用于延时,以便向CH375_RD产生宽度至少为80nS的低电平脉冲 unsigned char dat = CH375_D0_D7; CH375_RD = 1; CH375_CS = 1; CH375_D0_D7 = 0xFF; 对于准双向I/O,请在此设置输出全高电平 return( dat ); }


大侠,请问是说RD、WR、A0需要分别依次写入吗?延时非常关键对吧?


当然需要依次写入,我们芯片采样是需要CS,A0,RD等等信号线来采样数据的。延时的话只需要按照我们芯片说明书上面的延时就可以。


那我的CS直接接地可以吗?谢谢各位大侠啊~~


如果数据线和控制线没有共用,或者单片机外部只有一个外设 那么CS可以直接 接地


继续请教。。。 我这样修改过了,但是似乎还不行,芯片说明书上似乎没有明确说有关延时的问题啊。。。 sbit CH375_A0=P2^3; sbit CH375_RD=P2^2; sbit CH375_WR=P2^1; sbit CH375_CS=P2^0;//这个引脚是任意指定的,因为电路中直接将CS接地了 CH375_WR_CMD_PORT(0x01); number=CH375_RD_DAT_PORT(); CH375_WR_CMD_PORT(0x06); CH375_WR_DAT_PORT(0x57); result=CH375_RD_DAT_PORT(); void CH375_WR_CMD_PORT( unsigned char cmd ) { delay(); P1 = cmd; CH375_A0 = 1; CH375_RD = 1; CH375_CS = 0; CH375_WR = 0; CH375_CS = 0; CH375_WR = 1; CH375_CS = 1; CH375_A0 = 0; delay(); } void CH375_WR_DAT_PORT( unsigned char dat ) { P1 = dat; CH375_CS = 0; CH375_WR = 0; CH375_CS = 0; CH375_WR = 1; CH375_CS = 1; delay(); } unsigned char CH375_RD_DAT_PORT( void ) { unsigned char dat; CH375_CS = 0; CH375_RD = 0; CH375_CS = 0; dat = P1; CH375_RD = 1; CH375_CS = 1; return( dat ); } void delay(void) { unsigned int delaytimer=0; while(delaytimer<=0x1ff) {delaytimer++;} }

谢谢各位大侠。。。


unsigned char CH375_RD_DAT_PORT( void ) { unsigned char dat; delay( ); CH375_CS = 0; CH375_RD = 0; CH375_CS = 0; dat = P1; CH375_RD = 1; CH375_CS = 1; return( dat ); }


一般对于高速单片机命令和数据之间加2us的延时,数据和数据之间加1us的延时,程序上电之后先延时50ms,等待CH372复位完成。 单片机的IO口方向 不需要设置吗?


谢谢楼上两位大侠啊,单片机的IO我感觉是没有设置,因为我在另一个口上直接读取按键和驱动LED的时候是没有做设置的。。。我再加一些延时看看。。谢谢大侠们


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