1當(dāng)波特率設(shè)置為9600時(shí)能夠用check_exist命令,檢測(cè)到的值正確。 但是當(dāng)把波特率調(diào)高時(shí),返回值就固定為0x51了,我用的是字符型液晶顯示ch375的返回值。
2用示波器檢測(cè)發(fā)現(xiàn)ch375發(fā)送的數(shù)據(jù)為10位,但在單片機(jī)里面設(shè)置的發(fā)送的數(shù)據(jù)是9位,加上起始和結(jié)束位應(yīng)該是11位,怎么解決這種情況?
3由于參考lib中的filelib5程序,需要添加lib函數(shù),編譯之后的代碼量達(dá)到10多k,對(duì)于sst89E58RD來(lái)說(shuō)(256內(nèi)部ram,1k外部ram,以及32k程序存儲(chǔ)空間)是不是太大了
4芯片利用lib中內(nèi)置的ch375init程序似乎總是不能成功初始化
代碼如下: void CH375_PORT_INIT( ) { SCON = 0xD0; TMOD = 0x20; /*設(shè)置波特率和其它串口參數(shù)*/ PCON = 0x80; TH1 = 0xFA; TL1 = 0xFA; TR1 = 1; }
void xWriteCH375Cmd( UINT8 mCmd ) { TI = 0; TB8 = 1; SBUF = mCmd; while ( TI == 0 ); }
void xWriteCH375Data( UINT8 mData ) { TI = 0; TB8 = 0; SBUF = mData; while ( TI == 0 ); }
UINT8 xReadCH375Data( void ) { while ( RI == 0 ); RI = 0; return( SBUF ); }
/* 延時(shí)100毫秒,不精確 */ void mDelay100mS( ) { UINT8 i, j, c; for ( i = 100; i != 0; i -- ) for ( j = 100; j != 0; j -- ) c+=3; }
void mStopIfError( UINT8 iError ) { char b[3]; b[0]=iError/100+'0'; b[1]=(iError/10)%10+'0'; b[2]=iError%10+'0'; if ( iError == 0x00 ) return; /* 操作成功 */ else PutStr( 0,0,b); /* 顯示錯(cuò)誤 */ }
main() { int i; int k; UINT8 f; unsigned char b[3]; P1=0xff; CH375_PORT_INIT(); LcdInit(); xWriteCH375Cmd(0x15); /*設(shè)置USB工作模式*/ xWriteCH375Data(0x06); mDelay100mS(); xWriteCH375Cmd(0x06); xWriteCH375Data(0x44); ; i=xReadCH375Data(); b[0]=i/100+'0'; b[1]=(i/10)%10+'0'; b[2]=i%10+'0'; PutStr(0,0,b); if(i==0xBB) P1_0=0; else {P1_1=0; /* CH375出錯(cuò) */ for ( k = 2; k != 0; k -- ) { /* 強(qiáng)制數(shù)據(jù)同步 */ xWriteCH375Cmd( 0x05 ); /* CH375執(zhí)行硬件復(fù)位 */ i=xReadCH375Data(); /* 延時(shí) */ } }
f=CH375LibInit( ); mStopIfError( f ); while(1) {PutStr( 0,1," USB WAIT " ); P1_2=0; } }