终于听取了各位大侠的意见,把52单片机换成了58的,这下容量够用了。可是,我又纠结了。昨天新到了一个CH375的模块,是艾米电子的。于是,我屁颠屁颠的将原来的CH375模块换了下来,测试这个新的模块。使用测试函数时,按位取反,OK,没问题。可当我把以下程序烧进58里,测试的时候,出问题了,纠结纠结……
#include #include #include #include"STC89.h"
#define CH375_CMD_PORT_ADDR 0xbdf1 //命令端口地址 #define CH375_DAT_PORT_ADDR 0xbcf0 //数据端口地址
#include "CH375HF6.H" #include"Functions.h"
void main() { AUXR=0x01;//为了使用单片机外部RAM设置的 Init_Ser();//串口初始化 Initialize();//375和U盘初始化 Disk_Refer();//获取U盘信息 while(1); }
void Init_Ser(void) { EA = 1; //定时器T1设置,波特率9600,11.0592M TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; //通讯模式设置 SCON = 0x50; //启动定时器 TR1 = 1; TI = 1; }
void Initialize( ) { delayus(5); printf("Initialize Begin.\n");
CH375Reset( ); delayus(10); state=CH375LibInit( ); if(!state) { printf("CH375 Init Succeed.\n"); while(CH375DiskConnect()!=0) { delayus(50); } printf("CH375DiskConnect succeed.\n");
state=CH375DiskReady( ); if(!state) { printf("CH375Disk Ready.\n"); } } else { printf("CH375 Init failed.\n"); } printf("Initialize End.\n"); }
void Disk_Refer() { state=CH375DiskSize(); delayus(50); printf("CH375DiskSize=%02x.\n",(UINT16)state); printf( "TotalSize = %u MB \n", (unsigned int)( mCmdParam.DiskSize.mDiskSizeSec * (CH375vSectorSize/512) / 2048 ) ); }
其中有些延时函数这里就不一一列举了。结果,串口调试出来个这: Initialize Begin. CH375 Init Succeed. CH375DiskConnect succeed. CH375Disk Ready. Initialize End. CH375DiskSize=00. TotalSize = 17151 MB
这个TotalSize就错了,我U盘容量3.6G的,结果却出来个17G……我把艾米的那个375模块换回了以前旧的模块以后,结果竟然是正确的。而且之前的375初始化,DiskReady都是正确的,CH375DiskSize返回也是00,正确,那不就说明了这个艾米的375模块没问题了嘛,可是偏偏最后这个,错了。纠结啊纠结,这是为什么呢…… PS.艾米的CH375晶振是12.2880M。据说,没问题。单片机晶振是11.0592。U盘之前出过问题,做过量产,原来是4G的,量产到现在只能做到3.6,没办法也不敢再修复了。