贴上读写函数 /* 单片机的引脚 CH374芯片的引脚 PINE.4 INT# PORTE.2 A0 PORTE.3 CS# PORTE.5 WR# PORTE.6 RD# PORTF(8位端口) D7-D0 */
void CH374_PORT_INIT( ) /* 由于使用通用I/O模拟并口读写时序,所以进行初始化 */ { DDRF = 0x00; /* 设置8位并口为输入 */ PORTE = 0x68; /* 设置CS,WR,RD默认为高电平 */ DDRE = 0xEF; /* 设置CS,WR,RD,A0为输出,设置INT#为输入 */ } void Write374Index( UINT8 mCmd ) /* 向索引端口写入索引地址 */ { PORTE |= 0x04; /* 输出A0=1 */ PORTF = mCmd; /* 向CH374的并口输出数据 */ DDRF = 0xFF; /* 并口D0-D7输出 */ PORTE &= 0xD4; /* 输出有效写控制信号, 写CH374芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ DDRF = 0xFF; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于100nS */ PORTE |= 0xFF; /* 输出无效的控制信号, 完成操作CH374芯片, A0=1; CS=1; WR=1; RD=1; */ DDRF = 0x00; /* 禁止数据输出 */ PORTE &= 0xF3; /* 输出A0=0; 可选操作 */ } void Write374Data( UINT8 mData ) /* 向数据端口写入数据,索引地址自动加1 */ { PORTF = mData; /* 向CH374的并口输出数据 */ DDRF = 0xFF; /* 并口D0-D7输出 */ PORTE &= 0x40; /* 输出有效写控制信号, 写CH374芯片的数据端口, A0=0; CS=0; WR=0; RD=1; */ DDRF = 0xFF; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于100nS */ PORTE |= 0xFF; /* 输出无效的控制信号, 完成操作CH374芯片, A0=0; CS=1; WR=1; RD=1; */ DDRF = 0x00; /* 禁止数据输出 */ } UINT8 Read374Data( void ) /* 从数据端口读出数据,索引地址自动加1 */ { UINT8 mData;
DDRF = 0x00; /* 数据输入 */ PORTE &= 0x20; /* 输出有效读控制信号, 读CH374芯片的数据端口, A0=0; CS=0; WR=1; RD=0; */ DDRF = 0x00; /* 该操作无意义,仅作延时,CH374要求读写脉冲宽度大于100nS */ mData = PINF; /* 从CH374的并口PA输入数据 */ PORTE |= 0x6B; /* 输出无效的控制信号, 完成操作CH374芯片, A0=0; CS=1; WR=1; RD=1; */ return( mData ); } 读写寄存器,写索引和读数据都测试过,正常,但是写数据函数不对,写数据到40H~45H再读出来一只都是0xFD,求救.