下面是我的初始化程序,就一个简单的硬件测试指令,不管输入什么测试数据,返回值一直是0xFF,硬件部分的话,晶振工作也正常,不知道还会是哪里的原因啊 ??? 跟CH375命令端口的I/O地址 相关吗,我在CH375HFT.C这个例程中也是只看到定义,而没看到它的应用,这个地方我一直不是很明白,请各位大虾指教啊 感激不尽
/*****************************************************************************/ #include #include #include #include "CH375HFF.H"
#define CH375_CMD_PORT_ADDR 0xBDF1 /* CH375命令端口的I/O地址 */ #define CH375_DAT_PORT_ADDR 0xBCF0 /* CH375数据端口的I/O地址 */
/* 由于MSP430不开放系统总线,所以用I/O引脚模拟产生CH375的并口读写时序 */ /* 本例中的硬件连接方式如下(实际应用电路可以参照修改下述3个并口读写子程序) */ /* MSP430单片机的引脚 CH375芯片的引脚 P1.4 INT# P1.7 A0 P1.6 WR# P1.5 RD# P1.3 CS P4(8位端口) D7-D0 */
void mDelaymS( UINT16 ms ) { UINT16 i; while ( ms -- ) for ( i = 2000; i != 0; i -- ); }
void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { P1DIR = 0xE8; /* 设置INT#为输入,设置CS,WR,RD,A0为输出 */ P1OUT =0x68; /* 设置A0为低电平,CS,WR,RD默认为高电平 */ P4DIR = 0; /* 设置8位并口输入 */ }
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { _NOP( ); _NOP( ); _NOP( ); /* 至少延时2uS,实际由于模拟I/O较慢而只需少量延时 */ P4OUT = mCmd; /* 向CH375的并口输出数据 */ P1OUT |= BIT7; /* 指向CH375芯片的命令端口, A0(P1.7)=1; */ P1OUT &=~BIT3; /*CS=0*/ P4DIR = 0xFF; /* 写操作所以数据输出 */ P1OUT &= ~BIT6; P1OUT |=BIT5; /* 输出有效写控制信号, 写CH375芯片的命令端口, A0(P1.7)=1; WR=(P1.6)=0; RD(P1.5)=1; */ _NOP( ); /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度为100nS */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT |=BIT5;P1OUT |=BIT3; /* 输出无效的控制信号, 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ //P1OUT &= 0x6F; /* 输出A0(P1.3)=0; 可选操作 */ P4DIR = 0; /* 禁止数据输出 */ _NOP( ); _NOP( ); _NOP( ); _NOP( ); _NOP( ); /* 至少延时2uS,实际由于模拟I/O较慢而只需少量延时 */ }
void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { P4OUT = mData; /* 向CH375的并口输出数据 */ P4DIR = 0xFF; /* 写操作所以数据输出 */ P1OUT &=~BIT7; P1OUT &=~BIT6; P1OUT |=BIT5;P1OUT &=~BIT3; /* 输出有效写控制信号, 写CH375芯片的数据端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _NOP( ); /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度为100nS */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT |=BIT5;P1OUT |=BIT3; /* 输出无效的控制信号, 完成操作CH375芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ P4DIR = 0; /* 禁止数据输出 */ _NOP( ); /* 至少延时1uS,实际由于模拟I/O较慢而不一定有必要 */ }
UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; _NOP( ); /* 至少延时1uS,实际由于模拟I/O较慢而不一定有必要 */ P4DIR = 0; /* 读操作所以数据输入 */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT &=~BIT5;P1OUT &=~BIT3; /* 输出有效读控制信号, 读CH375芯片的数据端口, A0(P1.7)=0; CS(P1.3)=0; WR=(P1.6)=1; RD(P1.5)=0; */ _NOP( ); /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度为100nS */ mData = P4IN; /* 从CH375的并口输入数据 */ P1OUT &=~BIT7; P1OUT |=BIT6; P1OUT |=BIT5;P1OUT |=BIT3; /* 输出无效的控制信号, 完成操作CH375芯片, A0(P1.7)=0; CS(P1.3)=1; WR=(P1.6)=1; RD(P1.5)=1; */ return( mData ); }
void CH375_INIT() { xWriteCH375Cmd(CMD_CHECK_EXIST);/* 测试CH375是否正常工作 */ xWriteCH375Data(0x11); xReadCH375Data(); }
void main( ) {
mDelaymS(2); CH375_PORT_INIT(); CH375_INIT(); while (1); /* 以下指令开始工作循环,等待PC机命令进行操作 */ }