各位大侠帮帮我

今天看那个U盘的读写模块的文件,有几点不是很明白:望大家赐教:万分感谢! #define CH375HM_INDEX XBYTE[0xBCF0] /* CH375模块的索引端口的I/O地址 */ #define CH375HM_DATA XBYTE[0xBDF1] /* CH375模块的数据端口的I/O地址 */ 索引端口和数据端口的地址是如何计算出来的?为什么要放在数组XBYTE[0XBCF0]里面?? /* 对于模拟的并口读写时序或者其它并口读写方式,请修改以下3个子程序 */ #define CH375HM_INDEX_WR( Index ) { CH375HM_INDEX = (Index); } /* 写索引地址 */ #define CH375HM_DATA_WR( Data ) { CH375HM_DATA = (Data); } /* 写数据 */ #define CH375HM_DATA_RD( ) ( CH375HM_DATA ) /* 读数据 */ 这一段程序实现什么功能??/* 对于模拟的并口读写时序或者其它并口读写方式,请修改以下3个子程序 */这一句如何解释?

1、索引端口和数据端口的地址其实是由A0和CS#来决定的。CS#=0,A0=1时为数据端口;CS#=0,A0=0时为索引端口; 2、这三个读写子程序是对375的低层操作:写命令,写数据,读数据;这里才用的挂到单片机总线的连接方式,采用模拟并口或其他并口方式得对这三个函数进行修改。


那我能不能这样编写写命令语句: CS=0; A0=0; P0=命令;


向索引地址写入63 CH375HM_INDEX_WR( 63 ); /* 写入索引地址63 */

是个什么概念??63的含义又是什么??希望各位大虾不吝赐教!


大体是这样的: 写命令: 向并口输出数据、A0=1 ;注意,A0一定要在CS和WR变化之前 CS=0和WR=0 延时几十纳秒 CS=1和WR=1 I/O禁止输出、A0=0 ;注意,A0一定要在CS和WR变化之后,建议操作完后的A0默认为低电平 写数据: 向并口输出数据、A0=0 CS=0和WR=0 延时几十纳秒 CS=1和WR=1 ;如果A0默认为低电平,则一定要注意,A0不能早于CS和WR为高电平 I/O禁止输出 读数据: 并口I/O方向设为输入 A0=0 ;注意,A0一定要在CS和WR变化之前,如果A0默认为低电平则此处可省掉 CS=0和RD=0 延时几十纳秒 ;对于低速单片机无所谓,对高速单片机很关键,要让并口有20nS的准备时间 从并口输入数据 CS=1和RD=1

CH375HM_INDEX_WR( 63 ); /* 写入索引地址63 */ 相当于偏移到这个地址,再发读命令可以从索引地址63读取中断状态 。


谢谢大哥,套用今年春晚的话:您太有才啦!!

不过小弟还有不明白的地方还希望大哥赐教,: 索引地址是个什么概念??它的作用是什么? 是否一定需要??我采用您上述的编程,模拟并口; 我可否这样操作: 假设U盘插入,中断,我这时候去读取并口的数据,把读到的数作为状态返回单片机处理??


我们的并口模块上有一个421芯片,索引地址相对于421来说的,具体你可以下载CH421DS1.PDF。 你采用模拟并口的话,只需要修改三个读写子程序,其他的可以直接参考并口的例子程序。


谢谢大哥


我能这样编程吗?? 假设我的单片机P0接 421的Y口 P27---YA0 P26------YRD P25-------YWR CS 接地强制片选 #define unsigned char uchar void CH375HM_INDEX_WR( uchar Index )//指向索引口 {YA0=0;//指向索引口 P0=Index; } uchar CH375HM_DATA_RD(void ) {uchar dat; YA0=1;指向数据口 YRD=0;读 P0=0XFF; dat=P0; return(dat); } void CH375HM_DATA_WR( uchar Data ) {YA0=1;指向数据口 YWR=0;写 P0=Data;

}

我这个程序可以对U盘读写模块标准板操作吗??因为我想买这块板作毕业设计, 那块板引出的脚有那些?? 能给出个简单图吗??


模拟并口的三个读写子程序不是你所想的这样,而是通过控制WR#,RD#,CS#,A0信号线来模拟一个读写时序出来。 你用的MCU为89S51,直接挂到总线上操作不是更简单吗,大体是这样连接: 单片机 模块 P0 = D0-D7 RD = RD# WR = WR# ? = CS# 如果没有外部RAM,那么CS#=P26,如果有超过16KB的外部RAM,那么CS#=P27 & ! P26 & ...,所以CS#的片选地址为BXXXH P20 = A0 P15 = STA# INT0 = INT# 虽然连接到INT0,但是本程序只是查询模块的INT#的状态,所以可以用P1口等普通I/O引脚代替INT0

其实你不用关心421芯片,这只是一个双缓冲芯片,只要考虑单片机与模块给出的引脚相连就可以了。 简单连接图可以参考说明文档CH375HMP.PDF,至于PCB图的话,你可以到网上下载PCB375HM.ZIP,下载权限的话你可以向销售申请一下。


可是我就不大喜欢挂在总线上,因为我的P0 和P2口都有具体用途了 怎么办啊??


在你们的下载页面找不到PCB375HM.ZIP这个东西


在在线下载页面下不是有吗?


技术资料 应用资料 其他资料都翻了好像没有


能给个不用挂在总线上操作的例子程序吗??就是不用去 定义那个索引口和数据口的地址的


1.搜索PCB,在第二页PCBCH375HM.ZIP就是的 2.你可以根据上面说的时序流程,模拟自己的端口时序


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