請教372通訊初始化的問題

1, 寫入CMD_CHECK_EXIST命令, 2, 寫入0x55數(shù)據(jù), 3, 讀數(shù)據(jù)為0x0,(為什么呢)

然后不停的發(fā)CMD_RESET_ALL,收到的數(shù)據(jù)為0xFF.

這是什么情況呢,為什么測試命令后的數(shù)據(jù)沒有取反, 我擔心是不是372壞了。

不是的,有可能的話,你將你的數(shù)據(jù)口加上上拉試下看可以不可以,OXFF的話有可能是372的晶振沒起振造成的


多謝指點。 今天早上換了個372片子,其它沒動,現(xiàn)在情況是這樣, 1, 寫入CMD_CHECK_EXIST命令, 2, 寫入0x55數(shù)據(jù), 3, 讀數(shù)據(jù)為0x1F(數(shù)據(jù)線沒有問題) 然后不停的發(fā)CMD_RESET_ALL,收到的數(shù)據(jù)為0x1F.

這是什么問題,是晶振不準嗎?(電路板上是12MHZ晶體+2個22PF的電容) 我用的5V電源,量得有2.2V的電壓,用示波器測試是否起振時,會不會引起停振? 我用的是51仿真器,P0口與372數(shù)據(jù)線相連,是不是一定要接上拉呢?


p0口在復位之后是三態(tài),所以在你程序一開始的時候你讀下端口P0的數(shù)據(jù),如果為0X00,則要加上拉,如果為0X方法,則不需要加上拉,如果晶振電壓是2.2V的話,那說明你的晶振是起振了,你在不停的發(fā)數(shù)據(jù),你看下你的時序上面有沒有問題,或者說是不是哪個數(shù)據(jù)線或則別的線存在問題,你可以用示波器看下


還沒搞定, 那個不論發(fā)什么都回0x1F的搞了幾次之后,然后有幾次變成了0x5F, 再幾次,又變成換片子之前的狀態(tài)了,就是, 寫入CMD_CHECK_EXIST命令,寫入0x55數(shù)據(jù),讀數(shù)據(jù)為0x0,發(fā)CMD_RESET_ALL,收到的數(shù)據(jù)為0xFF。 我現(xiàn)在加了上拉電阻,并且兩個電容換成了12pf, 晶振有2.2V,應該是沒問題的,程序用的是例子程序,時序也應該不會問題, 電路上就一個51仿真器和一個372, 為什么會這樣呢,救救我吧。


那你用示波器看下你的數(shù)據(jù)有沒有發(fā)出去,還有就是你在你的程序一開始的時候讀取下P0口的數(shù)據(jù)是多少?或者你在循環(huán)的發(fā)數(shù)據(jù),你看下你的數(shù)據(jù)端口有沒有將數(shù)據(jù)發(fā)送出去?


P0口開始時數(shù)據(jù)為0xFF,沒有問題。 數(shù)據(jù)肯定是發(fā)出去了的, 比如在發(fā)出命令或數(shù)據(jù)時,在WR信號變成0后,我用萬用表一個個量了372引腳上的電壓, 在讀數(shù)據(jù)時,在RD信號變成0后,我也用萬用表一個個量了372引腳上的電壓,確是372輸出有問題。 還有哪些可考慮的呢?


用萬用表好象不行吧,應該用示波器看下你的時序上面有沒有問題


我是用單步執(zhí)行的,所以可以用萬用表來測。 我現(xiàn)在發(fā)現(xiàn)規(guī)律如下: 1) 當起振正常時(我用示波器測了為12MHZ): 寫入CMD_CHECK_EXIST命令,寫入0x55數(shù)據(jù),讀數(shù)據(jù)為0x0; 發(fā)CMD_RESET_ALL,收到的數(shù)據(jù)為0xFF。 2) 在起振后又強制停振(如將振蕩腳接地等),情況則是: 寫入CMD_CHECK_EXIST命令,寫入0x55數(shù)據(jù),讀數(shù)據(jù)為一個隨機數(shù),比如0x1F, 發(fā)CMD_RESET_ALL,收到的數(shù)據(jù)也為0x1F。 我想這個數(shù)是在372內(nèi)部寄存器的,所以停振后讀出來一直相同。 怎么辦呢?


今天還是老樣子,救救我呀。 剛才試了幾個別的命令,情況如下: 1 發(fā)出ENTER_SLEEP命令,然后再發(fā)出GET_STATUS命令,返回的數(shù)據(jù)為0x06(從睡眠中被喚醒事件) 2 發(fā)出GET_IC_VER命令后,返回的數(shù)據(jù)為0xA3,(pdf文檔上說對于CH372A芯片,返回值為0A2H), 我用的是CH372A,得到的卻是0xA3,升級了嗎,還是數(shù)據(jù)不對? 我覺得,這說明我現(xiàn)在用的CH372A芯片在工作,但有問題,是電路上的問題,還是程序上的, 我自己現(xiàn)在無法檢查出來,請求支持!?。?/p>


你的ID獲得是正確的,你用的是總線方式還是用模擬IO方式??


用模擬IO方式。 我覺得現(xiàn)在是寫命令正確,讀數(shù)據(jù)正確,就是數(shù)據(jù)沒有寫進去。 什么原因呢?


把你的 寫命令 寫數(shù)據(jù) 以及讀數(shù)據(jù) 的函數(shù)貼出來看看..


/* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機較快則延時 */ void CH375_WR_CMD_PORT( unsigned char cmd ) { delay2us(); /// CH375_CMD_PORT=cmd; CH375_D0_D7 = cmd; CH375_A0 = 1; //選擇CH375的命令口 CH375_RD = 1; //如果I/O默認電平是高電平,那么這是可選操作 CH375_CS = 0; CH375_WR = 0; _nop_(); _nop_(); CH375_WR = 1; CH375_CS = 1; CH375_A0 = 0; CH375_D0_D7 = 0xFF; //對于準雙向I/O,請在此設置輸出全高電平 }

/* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機較快則延時 */ void CH375_WR_DAT_PORT( unsigned char dat ) { delay2us(); ///CH375_DAT_PORT=dat; CH375_D0_D7 = dat; CH375_A0 = 0; CH375_RD = 1; CH375_CS = 0; CH375_WR = 0; _nop_(); _nop_(); CH375_WR = 1; CH375_CS = 1; CH375_D0_D7 = 0xFF; // 對于準雙向I/O,請在此設置輸出全高電平 }

/* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機較快則延時 */ unsigned char CH375_RD_DAT_PORT( void ) { unsigned char dat = 0;

CH375_D0_D7 = 0xFF; // 對于準雙向I/O,請在此設置輸出全高電平,便于輸入 CH375_CS = 0; CH375_RD = 0; _nop_(); _nop_(); dat = CH375_D0_D7; CH375_RD = 1; CH375_CS = 1; CH375_D0_D7 = 0xFF; // 對于準雙向I/O,請在此設置輸出全高電平 return( dat ); ///return( CH375_DAT_PORT ); }

很感謝您的及時關注,以上程序基本上是例子程序,應該沒有問題的。


恩,確實看不出問題.你的是普通51單片機吧


因為燒片子不方便,要去別的部門。 我現(xiàn)在用的是仿真器,仿真89C51,仿真器是"EasyPack/E 8052F". 是不是仿真器的影響呢? 郁悶中...


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

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