我想请教一下,用C8051F340+CH375,不扩展RAM那个例子最适合? 有那些地方需要改动?谢谢
你可以使用我们的CH375LIB里面的MCS51下面的LIB5是最合适的,只需要修改下头文件就可以了
需在示例主程序中,作如下修改: (1)若用总线方式,那么需要根据硬件,定义CH375的命令口、数据口地址、中断线,且在读写函数中直接对地址操作 (2)若用模拟I/O方式,那么需要根据硬件,定义CH375的CS,WR,RD,A0,D7-DO,INT
我第一次做,向用C0851F340那样的单片机,一般应该选择总线方式、还是模拟I/O方试,容易成功。还有读写的速度会怎么样。还有像C8051F340这样的单片机不扩展RAM用那个例子能达到处理文件最快的目的。谢谢
对于C0851F340,总线方式和模拟I/O的配置都比较简单,我们例程就是模拟I/O,详细的配置还需要您去看手册说明,速度当然是前者快。下面是C0851F410模拟I/O程序: /* 本例用I/O引脚模拟产生CH375的并口读写时序 */ /* 本例中的硬件连接方式如下(实际应用电路可以参照修改下述定义及子程序) */ /* 单片机的引脚 CH375芯片的引脚 P1.3: A0 P1.4: WR P1.5: RD P1.6 CS 如果模拟出的并口上只有CH375,那么CS#可以直接接低电平,强制片选 P1.7: INT P2.0-P2.6: D0-D6 P0.7: D7 */ sbit CH375_A0 = P1 ^ 3; sbit CH375_WR = P1 ^ 4; sbit CH375_RD = P1 ^ 5; sbit CH375_CS = P1 ^ 6;
#define CH375_DATA_DAT_OUT(d) { P0 &= 0x7F; \ P2 &= 0x80; \ P0 |= d & 0x80; \ P2 |= d & 0x7F; \ } // 向并口输出数据
#define CH375_DATA_DAT_IN( ) ( (P0 & 0x80) | (P2 & 0x7F) ) // 从并口输入数据
#define CH375_DATA_DIR_OUT( ) { \ P0MDOUT |= 0x80; \ P2MDOUT |= 0x7F; \ } // 设置并口方向为输出 #define CH375_DATA_DIR_IN( ) { \ P0MDOUT &= 0x7F; \ P2MDOUT &= 0x80; \ P0 |= 0x80; \ P2 |= 0x7F; \ }
void CH375_PORT_INIT(void) // 由于使用通用I/O模拟并口读写时序,所以进行初始化 { //---------------------------------------------------------- // P1口引脚的输入方式: P1.7-P1.2: 数字 P1MDIN |= 0xFC; //1111,1100 // P1口引脚的输出方式: P1.7-P1.2: 推挽输出 P1MDOUT |= 0xFC; //---------------------------------------------------------- // P2口引脚的输入方式: P2.6-P2.0: 数字 P2MDIN |= 0x7F; // P2口引脚的输出方式: P2.7-P2.0: 推挽输出 P2MDOUT |= 0x7F; //---------------------------------------------------------- // P0口引脚的输入方式: P0.7: 数字 P0MDIN |= 0x80; // P0口引脚的输出方式: P0.7: 推挽输出 P0MDOUT |= 0x80; //---------------------------------------------------------- CH375_CS = 1; CH375_WR = 1; CH375_RD = 1; CH375_A0 = 0; CH375_DATA_DIR_IN(); // 设置并口输入 }
void Write375Cmd( UINT8 mCmd ) /* 向CH375写命令 */ { CH375_DATA_DAT_OUT( mCmd ); /* 向CH375的并口输出数据 */ CH375_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH375_A0 = 1; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号*/ _nop_(); _nop_(); CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; CH375_A0 = 0; CH375_DATA_DIR_IN( ); /* 禁止数据输出 */ }
static void Write375Data( UINT8 mData ) /* 向CH375写数据*/ { CH375_DATA_DAT_OUT( mData ); /* 向CH375的并口输出数据 */ CH375_DATA_DIR_OUT( ); /* 设置并口方向为输出 */ CH375_A0 = 0; CH375_CS = 0; CH375_WR = 0; /* 输出有效写控制信号, 写CH375芯片的数据端口 */ _nop_(); _nop_(); CH375_WR = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; CH375_DATA_DIR_IN( ); /* 禁止数据输出 */ }
static UINT8 Read375Data( void ) /* 从CH375读数据 */ { UINT8 mData; CH375_DATA_DIR_IN( ); /* 设置并口方向为输入 */ CH375_A0 = 0; CH375_CS = 0; CH375_RD = 0; /* 输出有效写控制信号, 读CH375芯片的数据端口 */ _nop_(); _nop_(); mData = CH375_DATA_DAT_IN( ); /* 从CH375的并口输入数据 */ CH375_RD = 1; /* 输出无效的控制信号, 完成操作CH375芯片 */ CH375_CS = 1; return( mData ); }
如果对速度要求比较高的话推荐使用总线方式,另外读写方式采用扇区方式,对速度都有提高. RAM可以选取16个扇区的倍数,比如8K,16K,这样速度会快一点. CH375操作相对简单.CH374稍微复杂,库代码的占用空间会比375大几K,但是374的速度快.
我想从U盘读BMP照片,在从LCD 上显示出来。用4楼的例子速度可以吗?
LCD显示对读U盘速度有要求么?这个您自己实测一下就知道了
我第一次做,向用C0851F340那样的单片机,一般应该选择总线方式、还是模拟I/O方试,容易成功。还有读写的速度会怎么样。还有像C8051F340这样的单片机不扩展RAM用那个例子能达到处理文件最快的目的。谢谢
总线当然要比模拟快很多,用51下面的库,速度都差不多,文件系统处理都是一样的 ,
我有个问题想问一下,具体的总线模式应该如何配置硬件呢? 我的P3口是数据口 P3.0~P3.7为D0~D7 P1.1 AO P1.3 CS P1.5 RD P1.7 WR P2.0 INT 请帮忙详细讲一下好么