老大,请教下U盘并口模块的一个问题.

; /* 2004.06.05 ; **************************************** ; ** Copyright (C) W.ch 1999-2007 ** ; ** Web: http://www.winchiphead.com ** ; **************************************** ; ** USB Host File Module @CH375 ** ; **************************************** ; */ ; /* U盘文件读写模块, 连接方式: 并口+查询 */ ; /* MCS-51单片机ASM语言示例程序, 仅适用于V3.0A及以上版本的模块 */ ; /* 因为使用U盘文件读写模块而不是使用U盘文件级子程序库,所以占用较少的单片机资源,可以使用89C51单片机测试 */ ; ;$include (REG51.INC) $include (..\CH375HM.INC)

; 电路连接方式 ; 单片机 模块 ; P0 = D0-D7 ; RD = RD# ; WR = WR# ; ? = CS# 如果没有外部RAM,那么CS#=P26,如果有超过16KB的外部RAM,那么CS#=P27 & ! P26 & ...,所以CS#的片选地址为BXXXH ; P20 = A0 ; INT0 = INT# 虽然连接到INT0,但是本程序只是查询模块的INT#的状态,所以可以用P1口等普通I/O引脚代替INT0

CH375HM_INDEX XDATA 0BCF0H ;CH375模块的索引端口的I/O地址 CH375HM_DATA XDATA 0BDF1H ;CH375模块的数据端口的I/O地址

为什么 "CH375HM_INDEX XDATA 0BCF0H"中 低8位为F0呢? 是不是只要下面这样形式的都可以? "CH375HM_INDEX XDATA 0BC*0H"

为什么 "CH375HM_INDEX XDATA 0BCF0H"中 低8位为F0呢? 是不是只要下面这样形式的都可以? "CH375HM_INDEX XDATA 0BC*0H"


计算索引端口和数据端口地址是根据单片机如何连接模块的ch421而来得(要考虑到A0,CS#的连接)


是这样的!这个是涉及到总线地址的算法问题,也就是我们所说的单片机外围总线扩展问题,这里面主要考虑CS以及A0的引脚的状态,当写命令的时候,CS=0,A0=0,当写数据的时候CS=0,A0=1;然后根据外部是否有外部扩展RAM来计算总线地址


也就是说我只要保证CS=0,A0=0就能保证U盘模块的写命令,是这样么?我外部扩展是通过P1控制的。


是在总线的方式下保证就可以了!否则就没有地址这一说法!如果你是用P1口来控制,那就谈不上总线地址了!你要模拟总线时序来操作!中间还有RD,WR等信号线的控制!给你一个大概的程序.其他部分自己修改一下: void xWriteCmd( UINT8 mCmd )/* 写命令 */ { mDelay1_2uS( ); P0 = mCmd; A0 = 0; CS = 0; WR = 0; CS = 0; WR = 1; CS = 1; A0 = 1; P0 = 0xFF; mDelay1_2uS( ); }

void xWriteData( UINT8 mData )/* 写数据 */ { P0 = mData; /* 向并口输出数据 */ A0 = 1; CS = 0; WR = 0; CS = 0; WR = 1; CS = 1; P0 = 0xFF; mDelay1_2uS( ); }

UINT8 xReadData( void ) /* 读数据 */ { UINT8 mData; mDelay1_2uS( ); P0 = 0xFF; A0 = 1; CS = 0; RD = 0; CS = 0; mData = P0; RD = 1; CS = 1; return( mData ); }


好的 谢谢 明白了 哈哈


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