我不可以改动ExecCommand子程序么?强烈要求店小二,小小何,老虎头进来
我用ch375标准U盘读写模块在c8051f020的仿真版上做U盘读写。由于没有xram,我打算用字节读写需要改动了并口+查询示例程序中扇区读写的ExecCommand子程序,但是每次调试ch375U盘读写模块上的LED
灯都一直亮,说明没有查找到U盘连接。是我改写的子程序有误么? 望达人给予点耐心,帮我看看那里出了错误?

用高端口做的外设接口。这块板子的高端口是接在总线上的,P5是地址高8位, P7接数据总线。
我的电路连接:
/* 电路连接方式
单片机 模块
P32 = INT#
P34 = STA#
P46 = RD#
P47 = WR#
P50 = A0
P54 = CS#
P7 = data
以下为修改后的子程序 , 并口+查询的字节读写

unsigned char ExecCommand( unsigned char cmd, unsigned char len )

{
unsigned char i, k, status;

CH375HM_INDEX = 0;
CH375HM_DATA = cmd;
CH375HM_DATA = len;

if( len ){
for(i=0;i!=len;i++)
{
CH375HM_DATA = mCmdParam.Other.mBuffer[ i ];
}
}

CH375HM_STA = 0;
CH375HM_STA = 0;
CH375HM_STA = 0;
CH375HM_STA = 1;

while ( 1 )
{
while ( CH375HM_INT_WIRE );
CH375HM_INDEX = 63;
status = CH375HM_DATA;
if ( status == ERR_SUCCESS )
{
CH375HM_INDEX = 1;
i= CH375HM_DATA;

if ( i ) {
k = 0;
do {
mCmdParam.Other.mBuffer[ k ] = CH375HM_DATA;
k++;
} while ( --i );
}
break;
}

else if ( status == USB_INT_DISK_READ || status == USB_INT_DISK_WRITE || status == USB_INT_DISK_RETRY )
{
break;
}
else {

if ( status == ERR_DISK_DISCON || status == ERR_USB_CONNECT )
mDelaymS( 100 );
break;
}

while( CH375HM_INT_WIRE == 0 );
}
return( status );
}

不管你用字节还是扇区方式读写文件,ExecCommand这个函数都不须要改,两种方式只不过是命令不同而已.
你用的C8051F的单片机速度比较快,如果你将模块挂在总线上,操作模块时用MOVX指令的话,最好将MOVX指令的执行周期调长一点,以保证读写的时序.
在你调试时你可以先用查询磁盘连接这条命令来测试你的单片机和模块之间的连接正不正确,主要是看你定的地址对不对,有没有和其他外设冲突.
一旦查询磁盘连接命令成功后,接下来的文件操作很简单.

谢谢你, 不过我还是要问一个很菜的问题,怎样把movx指令调长一点呢,加延时函数么?

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