[求助]关于读取CH375数据最高位一直为1的错误

遇到一个非常奇怪的问题。向CH375发送CMD_CHECK_EXIST命令时,返回的值的最高位一直为1,其他位均正常取反。如写0x11,返回0xEE(正常);写0xEE,返回0x91(最高位不应该为1的)。凡是用到读取命令时,最高位一直为1,硬件连接应该都没问题,不然写CMD_CHECK_EXIST命令也不会返回有规律的值了。 下面的程序应该也没什么问题,现在能想到的就是:是不是CH375的芯片的问题,芯片固件程序中的并口发送的函数是不是出错了。。。 希望各位大侠看看,还会有哪些地方能出问题

unsigned char CH375_RD_DAT_PORT(void) { unsigned char mData; Delay1us(10); P1=0xFF; CH375_A0=0; CH375_CS=0; CH375_WR=1; CH375_RD=0; Delay1us(10); mData=P1; CH375_CS=1; CH375_WR=1; CH375_RD=1; CH375_A0=1; return(mData); }

检查你的最高位那个引脚有没有问题,可能被哪边强制拉高了 时序请参考如下时序: void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ P0 = mCmd; /* 向CH375的并口输出数据 */ CH375_A0 = 1; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的命令端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; CH375_A0 = 0; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { P0 = mData; /* 向CH375的并口输出数据 */ CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; P0 = 0xFF; /* 禁止数据输出 */ mDelay1_2uS( ); /* 至少延时1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; mDelay1_2uS( ); /* 至少延时1.2uS */ P0 = 0xFF; /* 输入 */ CH375_A0 = 0; CH375_CS = 0; CH375_RD = 0; /* 输出有效写控制信号, 读CH375芯片的数据端口 */ CH375_CS = 0; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ mData = P0; /* 从CH375的并口输入数据 */ CH375_RD = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; return( mData ); }


假如最高位的引脚被强制拉高了的话,写数据时的最高位应该为1呀,可现在是写数据完全正常,像设置芯片的工作模式就能成功,选择固件模式插在电脑上可以读取到,但是读数据的最高位一直为1,郁闷啊,我觉得应该不是硬件问题吧。。。可软件也想不通为什么读出的数据最高位都不变。。。


把并口的线从P1改到P0,结果读写数据都正常了,⊙﹏⊙b汗 这是什么情况,再仔细看看电路,看看为什么


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