你好, 我采用ch375与单片机相连,没有办法按照如下 unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 */ unsigned char volatile xdata CH375_DAT_PORT _at_ 0xBCF0; /* CH375数据端口的I/O地址 */ 来与ch375通讯,那我该如何与它通讯,让一些I/O来模拟时序吗?能否给一些相关的例子?多谢!我已经购买了你们的开发板了。
你可以自己来定义地址啊,影响地址的就是A0,CS# 还有就是可以用模拟口,但是要注意时序
void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; // P1=0XFE; P0 = 0xFF; /* 并口输入 */ }
void xWriteCH375Cmd( unsigned char mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ P0 = mCmd; /* 向CH375的并口输出数据 */ mDelay1_2uS( ); 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( ); /* 至少延时2uS */ }
void xWriteCH375Data( unsigned char 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 */ }
unsigned char xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { unsigned char mData; mDelay1_2uS( ); /* 至少延时1.2uS */ P0 = 0xFF; /* 输入 */ mDelay1_2uS( ); 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 ); } /* 延时50毫秒,不精确 */
多谢! P0 = 0xFF; /* 并口输入 */ 是针对ch375还是mcu?
我觉得初始化时,P0设定为输入的话,发送命令和数据时是否应该先将P0设定为输出?由于这个程序不全,可能我理解有误!还请指教。
因为51单片机的I/O口是准双向输出口,不需要额外的确定是输出还是输入,不象别的单片机有一个专门的设定输入输出的寄存器,你在使用的时候只要将数据输入到P0口就是输入,只要将P0口的数据输出的话就是输出。
我现在使用的不是51就是你所说的那种呢?
那你就要设置方向啊