测试不正确,谁帮我看看初始化程序啊,谢了

下面是我的初始化程序,就一个简单的硬件测试指令,不管输入什么测试数据,返回值一直是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机命令进行操作 */ }

首先上电后要有50MS的延时而你只做了2MS,有可能375上电复位未完成,你测一下,25,26脚,正常情况下25.26应该为低电平和高电平.对于这个问题昨天帖子里已经给你提出,希望你能更正! 你用的是模拟并口的,所以和375的数据命令地址无关的 你的程序有点问题,下面一写命令函数分析为例, 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 |=BIT6; P1OUT |=BIT5;P1OUT |=BIT3;P1OUT &=~BIT7; /* 输出无效的控制信号, 完成操作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较慢而只需少量延时 */ } 程序中P1OUT &=~BIT7;应该去掉或者放在后面,否则在写命令的时候就切换到写数据的端口了,而你的WR的上升沿在P1OUT &=~BIT7后面才产生的,这就会导致你写命令不成功. 因为看不到你的硬件连接的定义,所以简单分析一下,希望对你有帮助!其余函数自己检查一下!


我用的是MSP430单片机的低频震荡时钟,只有32.768KHz,所以延时50ms还是有的,另外,上电后我也检查了25,26脚,正常,晶振也正常,就是结果不对,我在仿真器里单步执行看了下,在读数据函数xReadCH375Data()里,只要执行指令:P4DIR = 0; /* 读操作所以数据输入 */ ,读出的结果P4IN就为0xFF了,把P4DIR = 0指令去掉后,P4IN又和输入的测试数据一样了,就是不得正确结果 另外,我曾忽略掉硬件测试指令,直接写CH375工作模式2,计算机提示找到新硬件,我刚兴奋了下,拔掉电源,再上电复位后,计算机又没有反应了,是什么原因啊 ,CH375我给的工作的电压是3.3V,会不会是产生的UD+上的电压相应的比较低,计算机识别困难呢 谢谢 急啊 好几天了 连个测试都没搞定。


如果计算机确实提示找到新硬件,那么说设置模式是成功的,写命令,写数据的时序不会有太大问题,测试命令失败,有可能是读数据时序有问题,把读数据时序修改一下试试: UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; _NOP( ); /* 至少延时1uS,实际由于模拟I/O较慢而不一定有必要 */ P4DIR = 0; /* 读操作所以数据输入 */ P1OUT |= BIT6; P1OUT &= ~BIT7; /*A0 = 0*/ P1OUT &= ~BIT3;/* 输出有效读控制信号, 读CH375芯片的数据端口, A0(P1.7)=0; CS(P1.3)=0; WR=(P1.6)=1; RD(P1.5)=0; */ P1OUT &= ~BIT5; _NOP( ); /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度为100nS */ mData = P4IN; /* 从CH375的并口输入数据 */ P1OUT |= BIT5; P1OUT |= BIT3; /* 输出无效的控制信号, 完成操作CH375芯片, A0(P1.7)=0; CS(P1.3)=1; WR=(P1.6)=1; RD(P1.5)=1; */ return( mData ); }


驱动安装成功了,谢谢楼上的,确实是程序的问题


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