你好,我现在作了一块板子,它的连接是这样子的。 CH341的D0-D7连接CH421的XD0-XD7,加4.7k的上拉排阻; CH341的A0连接CH421的XA0,加4.7k上拉电阻; CH341的RD#连接CH421的XRD,加4.7k的上拉电阻; CH341的WR#连接CH421的XWR,加4.7k上拉电阻; CH421的XALE和XCS接地。 然后又用一块8051与CH421连接: CH421的YD0-YD7连接8051的AD0-AD7,加上拉排阻; CH421的YWR连接8051的WR; CH421的YRD连接8051的RD; CH421的YCS连接8051的P2.5/A13; CH421的YA0连接8051的T1/P3.5; 我用MEMWriteAddr0写入地址,MEMWriteAddr1写入数据,8051自动循环从CH421读取数据,在将读到的数据原封不动的将数据传回给CH421,并且读取的地址与写入的地址是一样的。我再从MEMWriteAddr0写入地址,MEMReadAddr1读取数据。 现在碰到两个问题(以下所有值为十六进制): 1、我从CH341端向地址“3F”写入数据“3F”,其他地址的数据为非“FF”的任意值(而后不再变动数据,只是读取),再多次读取全部地址数据时,除3F地址的数据,有几个地址(不一定)读出来的数据会跳动变化,大多变成“FF”,有时又正常,00地址读出的数据总是会变化,大多变成“FF”。如果再从CH341端将地址“3F”的数据改成非“FF”与“3F”的值,再读取任何一地址的数据就正常了(与原本输入的值相等,可见8051向CH421写入的值时并没有出错,只是用CH341读取后显示在电脑上就错了)。刚开始在连接CH341的D0-D7与CH421的XD0-XD7间没有接上拉4.7k排阻时,有很多地址的址会变化,加上排阻有,有较少地址的值会变化,大多只有地址“00”的值会变化。若在地址“3F”数据为“3F”时,改变任意地址的数据,那个数据值(Y)只要超过某值(X),那个数据将被自动降低,低于X的值(Z)。不同地址的X值不同。若,将地址“3F”的数据数据改成非“FF”与“3F”的值,那个改动数据的地址的数据值为Z而非Y(说明,此期间,无法从CH341正常写入数据)。 2、我从CH341端向任意地址写入大于“F9”的数据,其他地址数据为小于的等于“F9”的任意值(而后不再变动数据,只是读取),在多次读取全部地址数据时,数据值小于“FA”的有些地址读出的数据值为“FF”而非小于“FA”的的值,数据为大于“F9”的地址的往下一个地址的数据大多会被读成“FF”。如果写入数据的值为“FF”,大部分地址的数据会被读成“FF”,若将那个数据值大于“F9”的地址的数据改为小于“FA”的值,全部地址说读取的数据将恢复正常(可见8051向CH421写入的值时并没有出错,只是用CH341读取后显示在电脑上就错了)。CH341的D0-D7与CH421的XD0-XD7间加不加排阻的情形一样。地址“00” 的数据若大于“F5”将出现上述情况。
已经研究了好几天了,还是没有解决问题,望贵公司多多帮忙。