老大,请教下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 );
}
此号封存
好的 谢谢 明白了 哈哈
这人很懒,什么都没留下
只有登录才能回复,可以选择微信账号登录