模拟并口时序总是通不过?(急求回复)

本人用Motorola单片机MC9S12D64和CH375A通信,调底层通信总是通不过。 有没有人能够指点一下。单片机采用模拟并口时序,三个读写子函数如下: void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延时2uS */ CS_HOST=0; A0=1; DDRA=0xFF; PORTA=mCmd; WR=0; DDRA=0xFF; WR=1; CS_HOST=1; DDRA=0x00; mDelay1uS( ); mDelay1uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { CS_HOST=0; A0=0; DDRA=0xFF; PORTA=mData; WR=0; DDRA=0xFF; WR=1; A0=1; CS_HOST=1; DDRA=0x00; mDelay1uS( ); /* 至少延时1.5uS */ }

UINT8 xReadCH375Data( ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据,最小周期为1.5uS,否则之前延时1.5uS */ { UINT8 mData; mDelay1uS( ); /* 至少延时1.5uS */ CS_HOST=0; A0=0; DDRA=0x00; RD=0; DDRA=0x00; mData=PORTA; RD=1; A0=1; CS_HOST=1; return(mData); }

测试底层通信如下: unsigned char TEST_CH375_PORT( ) { unsigned char c,i; xWriteCH375Cmd( CMD_CHECK_EXIST ); xWriteCH375Data( 0x55 ); c =xReadCH375Data( ); if ( c != 0xaa ) { for ( i = 100; i != 0; i -- ) { xWriteCH375Cmd( CMD_RESET_ALL ); c = xReadCH375Data( ); } mDelaymS(30); } return c; }

首先你的三个读写子程序有点问题。你改你下面的试试: void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延时2uS */ A0=1; PORTA=mCmd; DDRA=0xFF; CS_HOST=0; WR=0; DDRA=0xFF; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ WR=1; A0=0; CS_HOST=1; DDRA=0x00; /* 禁止数据输出 */ mDelay1uS( ); mDelay1uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ { PORTA=mData; DDRA=0xFF; CS_HOST=0; A0=0; WR=0; DDRA=0xFF; /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */ WR=1; A0=0; CS_HOST=1; DDRA=0x00; mDelay1uS( ); /* 至少延时1.5uS */ }

UINT8 xReadCH375Data( ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据,最小周期为1.5uS,否则之前延时1.5uS */ { UINT8 mData; mDelay1uS( ); /* 至少延时1.5uS */ DDRA=0x00; CS_HOST=0; RD=0; DDRA=0x00; /* 该操作无意义,仅作延时 mData=PORTA; RD=1; CS_HOST=1; return(mData); } 还有就是你返回的数据是什么?如果为0XFF的话,还得查查硬件是不是有问题。


返回数据总是0XFF,一定是硬件问题吗?


返回0XFF一般先检查375的晶振有没有起振.其次是检查你的复位有没有完全,具体的你可以用万用表来测下375的25脚和26脚的电压,如果上面说的都是正常的话,那么25脚电压位低,26脚电压为高,如果2个脚的电压都符合的话,那么在检查你的硬件连线以及你的I/O口的设置问题


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