U盤讀寫,CH375B,單片機(jī)12M晶振,串口方式,初始化問題求助

我的目標(biāo)是U盤讀寫

環(huán)境參數(shù): 51單片機(jī) STC11F32XE:32K flash,1280 on-chip RAM,接12M晶振 CH375B芯片:接12M晶振,交叉串口方式相連,INT#接P3.2; 采用文件級子程序CH375HF5.LIB,F(xiàn)ILELIB5/EXAM7示例程序為原型。

問題描述: 使用9600波特率(單片機(jī)12M晶振的誤差為7%,與PC通訊測試有數(shù)據(jù)差錯),執(zhí)行CH375LibInit()中的CH375Init()函數(shù),卡住沒有返回值。 進(jìn)而試用4800波特率(單片機(jī)12M晶振下串口測試無數(shù)據(jù)差錯),如下: 先在單片機(jī)9600下發(fā)出更改ch375波特率的命令: xWriteCH375Cmd(CMD_SET_BAUDRATE); //02H xWriteCH375Data(0x02); //4800波特率的分頻系數(shù) xWriteCH375Data(0x64); //4800波特率的分頻常數(shù)=256-750000/4800=99.75=100=64H 延時后,更改單片機(jī)波特率為4800,執(zhí)行CH375LibInit(),依然在CH375Init()卡住。

求指正,求解決方法!

關(guān)鍵程序如下:(省略部分皆依EXAM7示例程序中默認(rèn)設(shè)置)

/*---------CH375HFT2.C-----------*/ //CH375HFT2.C文件是在EXAM7的CH375HFT.C基礎(chǔ)上改的 #include #include

#define MAX_BYTE_IO 16 #define LIB_CFG_FILE_IO 1 #define LIB_CFG_INT_EN 0

#define DISK_BASE_BUF_ADDR 0x0000 #define FILE_DATA_BUF_ADDR 0x0000

#define FILE_DATA_BUF_LEN 0x0200

#define CH375_INT_WIRE INT0

#define NO_DEFAULT_CH375_F_ENUM 1 #define NO_DEFAULT_CH375_F_QUERY 1

#include "CH375HF5.H" #include "ST7920.H" //個人調(diào)試所加,為了在lcd上顯示

void mDelay1_2uS( ) /* 至少延時1.2uS,根據(jù)單片機(jī)主頻調(diào)整 */ { return; }

// 如果單片機(jī)與CH375是串口連接,那么參考下面的子程序 void CH375_PORT_INIT( ) { SCON = 0xD0; // 設(shè)置串口為9位數(shù)據(jù) //設(shè)置波特率和其它串口參數(shù) TMOD = 0x20; //timer 1, mode 2, 8-bits reload TH1 = 0xFD; //Baund: 9600bps 12M晶振(借用了11.0592M的初值) TL1 = 0xFD; PCON = 0x00; //波特率加倍控制:不加倍 TR1 = 1; //timer1 run

}

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

/* 延時100毫秒,不精確 */ void mDelay100mS( ) { UINT8 i, j, c; for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3; }

/* 將程序空間的字符串復(fù)制到內(nèi)部RAM中,返回字符串長度 */ UINT8 mCopyCodeStringToIRAM( UINT8 idata *iDestination, UINT8 code *iSource ) { UINT8 i = 0; while ( *iDestination = *iSource ) { iDestination ++; iSource ++; i ++; } return( i ); }

/* 檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機(jī) */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) { RefreshCurChDisp(3,6,55); //lcd顯示調(diào)試信息 return; /* 操作成功 */ }

RefreshCurChDisp(3,7,99); //lcd顯示調(diào)試信息 while ( 1 ) { } }

void Func375() { uchar ret;

RefreshCurChDisp(0,1,2); //lcd顯示調(diào)試信息 ret = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ RefreshCurChDisp(0,2,3); //lcd顯示調(diào)試信息 mStopIfError( ret ); RefreshCurChDisp(0,3,4); //lcd顯示調(diào)試信息 }

void main() { SP = 0x5f; //lcd顯示初始 P4SW = 0x70; //單片機(jī)自己的IO口設(shè)置 init_lcd(); //lcd顯示初始

CH375_PORT_INIT( ); mDelay100mS( ); /* 延時100毫秒 */

//更改CH375的波特率 xWriteCH375Cmd(CMD_SET_BAUDRATE); //02H xWriteCH375Data(0x02); //4800波特率的分頻系數(shù) xWriteCH375Data(0x64); //4800波特率的分頻常數(shù)=256-750000/4800=99.75=100=64H TR1 = 0; TH1 = 0xF3; //設(shè)波特率為4800 TL1 = 0xF3; TR1 = 1;

mDelay100mS( ); /* 延時100毫秒 */

Func375();

while(1) {} }

采用主機(jī)模式、字節(jié)讀寫方式,忘了提到。 頭一次發(fā)帖求助,請大伙幫忙指正下怎么回事,十分感謝!


這樣根本就無法通訊. 剛開始375是默認(rèn)9600波特率,你修改波特率,這么大的誤差根本就不可能成功. 也就是: //更改CH375的波特率 xWriteCH375Cmd(CMD_SET_BAUDRATE); //02H xWriteCH375Data(0x02); //4800波特率的分頻系數(shù) xWriteCH375Data(0x64); //4800波特率的分頻常數(shù)=256-750000/4800=99.75=100=64H

根本不會成功的,修改也沒有用,更換晶振.


為什么看到有許多帖子寫他們用非11.0592或其倍數(shù)的晶振也這么干呢? 我想到晶振的問題了,但沒死心,現(xiàn)在你也這樣說了。。。我先拿個串口調(diào)試工具瞅瞅到底MCU發(fā)出來的命令準(zhǔn)不準(zhǔn),之后死心。。。


375允許的晶振誤差2%以內(nèi).9600bps誤差7%,修改為4800撥特率是無法修改成功的.可能PC允許的范圍更廣. 你可以去試試吧.建議你去更改晶振.以免浪費您的勞動,告訴你肯定不會成功如果這么大的誤差.通訊會出現(xiàn)錯誤的.


為什么這位仁兄(http://m.findthetime.net/bbs/View.asp?S=101&I=19735)回答說51單片機(jī)可以和ch375共用一個12M晶振?! 我覺得既然CH375用12M晶振都能接受,為什么單片機(jī)方面非要在9600下比較準(zhǔn)的11.0592M呢??


明白了,他用的是并口,我用的是串口。謝謝


我換晶振,不說了。有了問題請教大俠們


稍等稍等,既然是串口,那么CH375的12M晶振也需要換成11.0592M嗎???


不需要換成12M,單片機(jī)你換成11.0592M,但是CH375的晶振一定是12M


忘記了,結(jié)貼。 只要保證MCU端波特率在9600下通信誤差很小,就沒問題,MCU端晶振是12M或11.0592M無所謂了,比如采用T2(定時器2)做波特率發(fā)生器,當(dāng)然,方法不限,關(guān)鍵是通信正確。ch375必須12M晶振。


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

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