如何测试单片机与375的硬件是否正常?

如题,我想问一下用8m晶振行否?我发了一个set_mode命令没有正确返回。

375或者372的晶振必须为12M,别的是不行的,还有测试硬件是否正确你可以用测试命令,关于测试命令在375或者372的说明书里面都有介绍


我是如下测试的: P4DR = 0x06; delay2us(); /*P37 --->A0*/ P37 = 1; /*P36 --->-CS#*/ P36 = 0; /*P34 --->-WR*/ P34 = 0; /*P36 --->-CS#*/ P36 = 0;

/*P34 --->-WR*/ P34 = 1;

/*P36 --->-CS#*/ P36 = 1;

/*P37 --->A0*/ P37 = 0; /* 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; */

P4DR = 0x00; delay2us(); /*P37 --->A0*/ P37 = 0; /*P36 --->-CS#*/ P36 = 0; /*P34 --->-WR*/ P34 = 0; /*P36 --->-CS#*/ P36 = 0;

/*P34 --->-WR*/ P34 = 1;

/*P36 --->-CS#*/ P36 = 1; /* 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 */

UINT8 mData; /*input function*/ P4CR = 0x00; delay2us(); /*P37 --->A0*/ P37 = 0; /*P36 --->-CS#*/ P36 = 0; /*P33 --->-RD*/ P33 = 0; /*P36 --->-CS#*/ P36 = 0;

mData = P4DR;

/*P33 --->-RD*/ P33 = 1;

/*P36 --->-CS#*/ P36 = 1;

/*output function*/ P4CR = 0xff; /* 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; */ 发现mData不是0xff;请问问题出在那里


真正测试的时候,实际上是单片机发一个测试命令(CHECK-EXIST,0x06),然后在输出一个数据到375,接着在读单片机和375相连接的端口的数据,看输入的数据是不是输出数据的取反,是取反的话就说明你的硬件有问题


我现在就是这样测试的,


那返回的数据是多少呢?是不是你输入数据的取反还是别的数据,只有知道了返回的数据的话,那么才可以知道单片机和375之间的连线有没有问题


我上面已经写得很清楚了,输入的数据是0,得到的不是0xff,而且我已经把程序贴在上面,就是想请你们帮忙看看时序又问题否?好像你们根本不看细节。


那你知道读出来的数据是多少吗?还有一个就是你最好不要输入0X00数据,因为有的时候例如晶振不起振也会出现返回的数据是0XFF的现象。


你好: 你的PCB我已经看过了,没有什么问题,现在我看了你的程序的配置,你在配置A0的时候为0,而WR,CS,RD都为1,是不是为1的时候为输出,那这样的话,A0配置就不正确了,如果0为输出的话,那么WR,CS RD就又有问题了。因为你的单片机资料没有全看,所以只能借鉴你的程序,你一直返回的是0XAA的话,那么你还要检查你的8个数据口的配置


多谢回复! 你好象理解错误,代码如下: /*P3 as output function ---1 input function ----0 p30 p33 p34 p36 p37 ---output p31 p32 p35 ---input 11011001b */ P3CR = 0xd9; 从上面的注释可以得到p30 p33 p34 p36 p37为output,p31 p32 p35 为input所以P3的控制寄存器为11011001b /*P36 --->-CS#*/ P36 = 1; /*P34 --->-WR*/ P34 = 1; /*p33 --> -RD*/ P33 = 1; /*P37 --->A0*/ P37 = 0; 以上的代码是设定初始的初值难道不能够这样设定吗?还望指教。


我说的是你的引脚的配置是不是这样配置的,也就是说你的I/O方向不需要进行配置吗?


I/O方向是需要配置的,P3CR = 0xd9;这个就是用来配置方向的, P36 = 1; /*P34 --->-WR*/ P34 = 1; /*p33 --> -RD*/ P33 = 1; /*P37 --->A0*/ P37 = 0; 是用来设定初始值的,两个是不同的寄存器。


你可以这样测试下你的配置有没有问题,在复位完成之后,你读下端口,看下端口的数据是多少?正常的情况下应该是FF,如果不是的话,那么就是你的端口配置有问题了


如何知道复位完成呢?


你在你的程序的一开始就读你的端口的数据,不管375的状态,主程序一上来就读取你的8位数据口的数据是多少?


好的,我们将做相关的实验,周末你们那边的联系方式是多少?


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