51单片机与ch374通过并行口通讯的问题

我用51单片机与ch374通过并口通讯时,借用其它口线模拟读写时序,可读写的数据很不稳定,时对时错,代码如下: /* 向索引端口写入索引地址 ,a为8位地址 */ void Write374Index(UINT8 addr) { WR = 1; RD = 1; CH374A0 = CH374Addr; P0 = addr; for(addr=0;addr<3;addr++); WR = 0; for(addr=0;addr<3;addr++); WR = 1; _nop_(); } /* 向数据端口写入数据,索引地址自动加1 */ void Write374Data(UINT8 d) { WR = 1; RD = 1; CH374A0 = CH374Data; P0 = d; for(d=0;d<3;d++); WR = 0; for(d=0;d<3;d++); WR = 1; _nop_(); }

/* 从数据端口读出数据,索引地址自动加1 */ UINT8 Read374Data(void) /* 从CH374读数据 */ { UINT8 Value ; WR = 1; RD = 1; CH374A0 = CH374Data; P0 = 0xFF; RD = 0; for(Value = 0;Value<3;Value++); Value = P0; RD = 1; return Value; } 其中数据建立时间都用了for(Value = 0;Value<3;Value++);这么长还是有问题,请高手指点;

三个读写子函数: void Write374Index( UINT8 mIndex ) /* 向CH374写索引地址 */ { CH374_DATA_DAT_OUT( mIndex ); /* 向CH374的并口输出数据 */ CH374_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH374_A0 = 1; CH374_CS = 0; CH374_WR = 0; /* 输出有效写控制信号, 写CH374芯片的索引端口 */ // CH374_CS = 0; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于70nS */ CH374_WR = 1; /* 输出无效的控制信号, 完成操作CH374芯片 */ CH374_CS = 1; CH374_A0 = 0; CH374_DATA_DIR_IN( ); /* 禁止数据输出 */ }

void Write374Data( UINT8 mData ) /* 向CH374写数据,索引地址自动加1 */ { CH374_DATA_DAT_OUT( mData ); /* 向CH374的并口输出数据 */ CH374_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH374_A0 = 0; CH374_CS = 0; CH374_WR = 0; /* 输出有效写控制信号, 写CH374芯片的数据端口 */ // CH374_CS = 0; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于70nS */ CH374_WR = 1; /* 输出无效的控制信号, 完成操作CH374芯片 */ CH374_CS = 1; CH374_DATA_DIR_IN( ); /* 禁止数据输出 */ }

UINT8 Read374Data( void ) /* 从CH374读数据,索引地址自动加1 */ { UINT8 mData; CH374_DATA_DIR_IN( ); /* 设置并口方向为输入 */ CH374_A0 = 0; CH374_CS = 0; CH374_RD = 0; /* 输出有效写控制信号, 读CH374芯片的数据端口 */ CH374_CS = 0; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于70nS,强烈建议此处执行一条空指令延时以确保并口有足够时间输入数据 */ mData = CH374_DATA_DAT_IN( ); /* 从CH374的并口输入数据 */ CH374_RD = 1; /* 输出无效的控制信号, 完成操作CH374芯片 */ CH374_CS = 1; return( mData ); } 你最好用示波器看一下,读或写一个字节,各控制线是否稳定,是否存在脉冲干扰,导致读写不稳定。


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