好的,谢谢,我去看看。
#define extern
//+++++++++++++++++++++++++++++++++++++++++++++
#include "REG51RC.h" #include #include #include
//#define CH375_CMD_PORT_ADDR 0xa000 /* CH375命令端口的I/O地址 */ //#define CH375_DAT_PORT_ADDR 0x8000 /* CH375数据端口的I/O地址 */
//+++++++++++++++++++++++++++++++++++++++++++++
extern unsigned char xdata cmd _at_ 0xa000; extern unsigned char xdata dat _at_ 0x8000;
//+++++++++++++++++++++++++++++++++++++++++++++
void main(void) { unsigned char i; cmd = 0x05; cmd = 0x06; dat = 0xa5; i = dat; while(1); }
//+++++++++++++++++++++++++++++++++++++++++++++ 我写了个简单的测试程序,最后i返回的值应该是0x5a,可实际得到的返回值却是0xa5,请问有人试过吗?
cmd = 0x05; 完了之后需要延时50MS以上
在cmd = 0x05;之前也要延时100mS,等待375复位完成后,才能发送命令
好的,谢谢各位,我用的仿真器本身好像也有异常,所以现在不好定位,我再继续测试,有疑问再请教大家, 谢谢。
extern uchar xdata CH375_CMD _at_ 0xa000; extern uchar xdata CH375_DAT _at_ 0x8000;
//+++++++++++++++++++++++++++++++++++++++++++++
void main(void) { Delay_mS(500); //延时500mS CH375_CMD = 0x05; Delay_mS(500); CH375_CMD = 0x06; CH375_DAT = 0xa6; State = CH375_DAT; if(State == 0x59) { DataToDspBuf(59); ClearFailZero(0); DisWin1(); DisWin2(); DisWin3(); while(1); } if(State == 0xa6) { DataToDspBuf(106); ClearFailZero(0); DisWin1(); DisWin2(); DisWin3(); while(1); } }
本来想直接贴图的,好像不行,弄在附件里,为了节省时间,省掉了很多无关的借口,麻烦各位帮我看看测试程序有没为问题?实际返回值跟发送值都为0xa6;此外,能否帮忙看附件的接口电路是否有问题,谢谢,在线等。
(1)单片机主频是多少?写命令后需要延时1.5uS,读写数据后需要延时0.6uS (2)如果是想读写U盘物理扇区,那么下载CH375EVT.ZIP,参考MISCELL下的例程,注意仅修改CH375地址、中断线,其余部分程序不要修改
我用的主频是22.1184MHz晶振,谢谢,我试试加延时;请问延时加多了会影响吗?
不好意思,漏问了,写指令有延时要求吗?
(1)延时参考手册中的7.3. 时序参数 (2)接口子程序写法参考下面例程: void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay2us(); CH375_CMD_PORT=cmd; delay2us(); }
void CH375_WR_DAT_PORT( unsigned char dat ) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ CH375_DAT_PORT=dat; delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */ }
unsigned char CH375_RD_DAT_PORT() { /* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */ delay1us(); /* 因为MCS51单片机较慢所以实际上无需延时 */ return( CH375_DAT_PORT ); }
做了延时后返回值为0xff,刚看了一下7.3的延时参数,WR、RD的选通时间从60nS到10000nS,请问主要受什么因素影响范围这么宽,我现在用标准51的总线,22.1184MHz晶振大概是45nS一个机械周期,这样CH375B就不能直接当总线使用了是吗?
我在RSTI跟VCC之间接的电容为0.1uF,而非0.47uF,请问会对通讯造成影响吗?
你只需要去用万用表去测下芯片25、26脚的电压,正常复位的话,25脚为低,26脚为高。
(1)这个范围用户不用关心,有效脉宽只要大60nS即可,也不要过大,否则影响速度 (2)可以直接挂在总线上使用 (3)没有什么影响 (4)延时500mS到底够不够,会不会被编译器优化了 (5)在发复位命令之前作2次测试命令,测试数据为0x55,0xAA,如果不成功得检查硬件连接和接口程序,如地址定义是否正确
谢谢,那看来我要把晶振换成11.0592MHz比较安全了。继续模拟总线调试一下。