请教关于CH375的问题!!!!急!!!!

[Emot]20[/Emot][Emot]20[/Emot][Emot]20[/Emot] 我用的是CH375做数据采集.我将CH375的数据线,中断,还有读写信号线,A0数据\命令信号线,CS片选信号线直接连到单片机上,其中A0,CS连到了P1.0还有P1.1上.单片机的程序用C51.但是现在我发现程序中,读取数据的程序不对.例如: CH375_WR_CMD_PORT( CMD_CHECK_EXIST ); // 测试CH375是否正常工作 i = 0x5A; CH375_WR_DAT_PORT( i ); // 写入测试数据 i = ~i; // 返回数据应该是测试数据取反 dat = CH375_RD_DAT_PORT(); 但是读出来dat不对.正确的应该是0xA5,但是我读到的却是其它数.并且读到的数还和有子程序中的延时有关,我延时大,读到的数就相对大些. 我读数的子程序是: unsigned char CH375_RD_DAT_PORT() { unsigned char rev_data; CH375_CMD_DAT = 0; //数据 CS = 0; CH375_RD = 0; _nop_(); _nop_(); rev_data = CH375_DATA_PORT; CS = 1; CH375_DATA_PORT = 0xFF; return( rev_data ); } 请问好心的设计者们,这究竟是为什么是!?!?!?!?!?!? 先谢谢啦!!!!!!!!![Emot]1[/Emot][Emot]1[/Emot][Emot]1[/Emot]

你用的是模拟方式还是总线方式??还有就是如果是这样的话,返回的值是多少??你用的是什么单片机?


hcn怎么不回复我的那一篇帖子啊?我等着你回复呢?


我用的是模拟方式.单片机是STC89C52.返回值有的时候是0x38,有的时候是0x4E等等,跟我加的延时和控制信号有关.


这肯定是你的硬件有问题,也就是你的数据线,CS,A0,WR,RD有关系,还有就是你将你定义的部分贴出来还有就是你的读和写函数也贴出来看下


#define CH375_DATA_PORT P0 /* CH375端口的I/O地址 */ sbit CH375_CMD_DAT = P1^0; /* CH375地址线输入A0,A0=1时写命令,A0=0时读写数据 */ sbit CH375_RD = P3^7; /* CH375读选通输入,低电平有效 */ sbit CH375_WR = P3^6; /* CH375写选通输入,低电平有效 */ sbit CS = P1^1; //片选信号线 sbit CH375_INT_WIRE = P3^2; /* CH375中断请求输出,低电平有效 */ sbit rst = P1^2;

/* 与CH375有关的基本I/O操作 */ /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ void CH375_WR_CMD_PORT( unsigned char cmd ) { _nop_(); _nop_(); CH375_DATA_PORT = cmd; CH375_CMD_DAT = 1; // 命令 CS = 0; CH375_WR = 0; _nop_(); _nop_(); CH375_WR = 1; CS = 1; CH375_CMD_DAT = 0; // 命令 CH375_DATA_PORT = 0xFF; } /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ void CH375_WR_DAT_PORT( unsigned char dat ) { CH375_DATA_PORT = dat; CH375_CMD_DAT = 0; // 数据 CS = 0; CH375_WR = 0; _nop_(); CH375_WR = 1; CS = 1; CH375_DATA_PORT = 0xFF; }


对于51系列的单片机你可以将中间的延时去掉


那样的话,我读出来的数就更不对了.每多加一个_nop_();延时,读的数据就会加1!!!


你说我的硬件能哪出问题了呢? 我昨天看了一下,我的复位信号很正常啊!!!!时钟信号看不见,不过晶振应该是起振啦!!! 没理由坏了!!!


还有就是你的TXD接地了没有,晶振两端的电压是多少?还有就是你的片选,A0,WR,RD以及8个数据线这方面你仔细查下


把完整的程序贴出来看看吧


可以把你的硬件图贴出来只要375与51部分,大家帮你看看


晶振两端信号看不出什么方波或是正弦波,只是一个将近5V的高电平和一个2V左右的高电平.而我的工作电压环境是5V的!我的TXD是串一个1K欧姆的电阻接的地.我的片选和A0分别接在单片机的P1.0和P1.1上,通过子程序控制的.还有我的WR和RD是直接接的单片机的WR和RD,数据线也是按顺序和单片机接的.和手册上的没什么不同啊!!! 本来打算拿仿真器运行一下程序,好拿示波器看看RD,WR,CS,A0的信号,现在可到好,我的仿真器又有问题了.真是倒霉啊@!!!!!!


那你的晶振有点问题,你换个晶振和2个15P的退藕电容试下


我刚开始也是这么想的啊!!!因为看了你的帖子嘛!可是我都换了两个晶振了,且我的电容是15P的啊!!! 可是我的问题目前还没解决!


引用回复:#define CH375_DATA_PORT P0 /* CH375端口的I/O地址 */ sbit CH375_CMD_DAT = P1^0; /* CH375地址线输入A0,A0=1时写命令,A0=0时读写数据 */ sbit CH375_RD = P3^7; /* CH375读选通输入,低电平有效 */ sbit CH375_WR = P3^6; /* CH375写选通输入,低电平有效 */ sbit CS = P1^1; //片选信号线 sbit CH375_INT_WIRE = P3^2; /* CH375中断请求输出,低电平有效 */ sbit rst = P1^2;

/* 与CH375有关的基本I/O操作 */ /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ void CH375_WR_CMD_PORT( unsigned char cmd ) { _nop_(); _nop_(); CH375_DATA_PORT = cmd; CH375_CMD_DAT = 1; // 命令 CS = 0; CH375_WR = 0; _nop_(); _nop_(); CH375_WR = 1; CS = 1; CH375_CMD_DAT = 0; // 命令 CH375_DATA_PORT = 0xFF; } /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ void CH375_WR_DAT_PORT( unsigned char dat ) { CH375_DATA_PORT = dat; CH375_CMD_DAT = 0; // 数据 CS = 0; CH375_WR = 0; _nop_(); CH375_WR = 1; CS = 1; CH375_DATA_PORT = 0xFF; }


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