串行模式ch375 的庫(kù)函數(shù) 無(wú)法初始化

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; } }

你這是用什么單片機(jī)啊?


(1)調(diào)高到多少出錯(cuò),單片機(jī)晶振是多少,波特率是否有誤差存在 (2)起始和結(jié)束位由硬件自身完成,無(wú)需用戶考慮 (3)程序空間沒(méi)有溢出,當(dāng)然不算過(guò)大 (4)庫(kù)初始化用CH375LibInit,CH375Init僅初始化芯片,未初始化子程序庫(kù)


并沒(méi)有看到波特率的設(shè)置,貼出來(lái)看看.


謝謝了,o(∩_∩)o...

1,單片機(jī)晶振是11.0592M,波特率設(shè)置為57600時(shí)誤差為零,但是ch375的晶振是12M,會(huì)不會(huì)是這個(gè)的問(wèn)題?

2,用串口調(diào)試助手看到ch375libinit 之后有返回值,程序開(kāi)始運(yùn)行到返回00 00 E0 00 00 00 E0 15 06 06 44 05 05, 該程序會(huì)與單片機(jī)和375沖突嗎?

3,我用的芯片為375B,單片機(jī)為sst公司的89E58RD

4,波特率設(shè)置 void CH375_PORT_INIT( ) { SCON = 0xD0; TMOD = 0x20; /*設(shè)置波特率和其它串口參數(shù)*/ PCON = 0x80; TH1 = 0xFA; TL1 = 0xFA; TR1 = 1; xWriteCH375Cmd(CMD_SET_BAUDRATE); xWriteCH375Data(0x03); xWriteCH375Data(0x98); TH1 = 0xFF; }


不要用232和PC通訊,去掉,可能會(huì)有干擾的.


感謝沁恒工程師的幫助,現(xiàn)在程序已經(jīng)完全調(diào)通了,速度雖然慢了點(diǎn)但滿足我們的需求。經(jīng)過(guò)測(cè)試在串行9600波特率工作下支持128M的MMC,MiniSD,紫光U盤,1G金士頓,2G愛(ài)國(guó)者的多種U盤。 謝謝啦


設(shè)置波特率的時(shí)候首先是按照9600的波特率設(shè)置,在發(fā)送設(shè)置波特率命令之后,延時(shí)2MS在將單片機(jī)的波特率修改掉就可以進(jìn)行數(shù)據(jù)通信了。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频