急呀,请问我这个测试CH375怎么不成功

#include /* 以下定义适用于MCS-51单片机,其它单片机参照修改 */ /* 单片机的引脚 CH375芯片的引脚 P3.2 INT# P2.0 A0 P1.1 CS# 如果模拟出的并口上只有CH375,那么CS#可以直接接低电平,强制片选 P3.6 WR# P3.7 RD# P0(8位端口) D7-D0 */ sbit CH375_A0 = P2^0; sbit CH375_CS = P1^1; sbit CH375_WR = P3^6; sbit CH375_RD = P3^7;

#define UINT8 unsigned char

void mDelay1_2uS( ) /* 至少延时1.2uS,根据单片机主频调整 */ { return; }

void CH375_PORT_INIT( ) /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */ { CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ { mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ P0 = mCmd; /* 向CH375的并口输出数据 */ 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( ); mDelay1_2uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 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; mDelay1_2uS( ); /* 至少延时1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ { UINT8 mData; mDelay1_2uS( ); /* 至少延时1.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 ); }

void mDelaymS( ) { unsigned char i, j; for( i=100; i!=0; i-- ) for( j=250; j!=0; j-- ); }

void mInitSTDIO( void ) { /* 仅用于调试用途及显示内容到PC机,与该程序功能完全无关,为printf和getkey输入输出初始化串口 */ SCON = 0x50; TMOD = 0x20; TH1 = 0xfD; TR1 = 1; TI = 1; }

main( ) {

mDelaymS( ); mDelaymS( ); mDelaymS( ); mDelaymS( ); CH375_PORT_INIT( ); mInitSTDIO( ); while(1) { SBUF=0x02; while(TI==0)TI=0; mDelaymS( ); xWriteCH375Cmd(0x06 ); /* 测试CH375 */ xWriteCH375Data(0x55 ); SBUF=xReadCH375Data(); while(TI==0)TI=0; while(1); } } 用的是STC89C52,11.0592晶振,5V电压,示波器测试25 26脚以及晶振都正常工作。测试了好几天了,电脑端串口调试助手只能接收到 02 55 。

建议你在P0口上面加一个4.7K的上拉排阻。


谢谢 ,我尝试下!


应该问题不大,读写函数的时序都是正常的,另外建议: 死循环写一个命令,比如0X55,用示波器测试一下WR,A0,DO-D7的数据状态是否正常,WR在低电平时,CH375采样数据。然后在写0XAA,看看数据状态是否正常。主要检查硬件连接部分,个信号线变化是否正常。同样的方式测试写数据,读数据。


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