我是想用372完成51單片機(jī)和pc機(jī)的通訊,板子是自己畫的,現(xiàn)在在用仿真器進(jìn)行調(diào)試,順利地時(shí)候可以正確的完成上位機(jī)和下位機(jī)的數(shù)據(jù)傳輸, 但是,有的時(shí)候會(huì)出現(xiàn)連372初始化,也就是CHECK_EXIST命令就是執(zhí)行不過去??赡苡袝r(shí)候一天都不能成功的初始化,但是如果不管它,轉(zhuǎn)天來調(diào)試又很順利地連數(shù)據(jù)都能傳。我用的是萬利的仿真器 有沒有哪位能給我分析一下可能是什么原因造成這種不穩(wěn)定性??謝謝各位了!不然小妹就要天天看372的臉色了!謝謝??!
附上我初始化的關(guān)鍵代碼,大家?guī)臀铱纯词遣皇谴a的問題,再次謝謝大家! void Delay2us( )//延時(shí)程序 { unit8 i; for ( i = 4; i != 0; i -- ); } void CH372_INIT() /* CH372初始化代碼 */ { unit8 i,j,k; CH372_WR_CMD_PORT(CMD_RESET_ALL); Delay50ms();
CH372_CMD_PORT=0; CH372_DAT_PORT=0;
CH372_WR_CMD_PORT(CMD_CHECK_EXIST); CH372_WR_DAT_PORT_8(0xAA); i=~0xAA; j=CH372_RD_DAT_PORT();
if(j!=i) /*CH372出錯(cuò)*/ { // while(1) // { // LED=0; //}
for(k=10;k!=0;k--) { CH372_WR_CMD_PORT(CMD_RESET_ALL); Delay50ms(); } /*重復(fù)發(fā)送復(fù)位命令*/ CH372_WR_DAT_PORT_8(0);/*數(shù)據(jù)歸零 */ Delay50ms(); }
當(dāng)你測試命令不成功的話,那么,計(jì)算機(jī)上面可以找到新的硬件嗎?
我在調(diào)下位機(jī)的時(shí)候發(fā)現(xiàn),如果我的372可以順利執(zhí)行完check_exist的話,pc的“設(shè)備管理器”里就能顯示出“外部接口——CH372”,但是如果我說的這種不能順利初始化的時(shí)候,pc的“設(shè)備管理器”里就沒有顯示ch372
如果沒顯示的話,那就不能和計(jì)算機(jī)進(jìn)行通信,估計(jì)程序上面還有問題,你用的是什么單片機(jī)?采用的是總線方式還是模擬I/O口的方式?可以不可以看下三個(gè)讀寫子函數(shù)?
下面的程序你可以參考一下: /********************************************************************** ch372初始化 測試CH372是否正常工作 /**********************************************************************/ void ch372_init() { uchar i; CH372_CMD_PORT=CMD_CHECK_EXIST; /* 測試CH372是否正常工作 */ delay2us(); CH372_DAT_PORT=0x33; /* 寫入測試數(shù)據(jù) */ delay2us(); i = ~0x33; /* 返回?cái)?shù)據(jù)應(yīng)該是測試數(shù)據(jù)取反 */ for (i=80;i!=0;i--) { if(CH372_DAT_PORT!= i) /* CH372不正常 */ { CH372_CMD_PORT=CMD_RESET_ALL; /* 多次重復(fù)發(fā)命令,執(zhí)行硬件復(fù)位 */ delay2us(); } } CH372_CMD_PORT=0; delay50ms(); /* 延時(shí)50ms */ }
好的,代碼如下,采用的89c52,我可不可以弱弱的問一句什么是總線方式?什么是模擬I/O口的方式? void CH372_WR_CMD_PORT(unit8 cmd) /*向CH372命令端口寫命令數(shù)據(jù),周期不小于4uS */ { Delay2us(); CH372_CMD_PORT=cmd; Delay2us(); /* 至少延時(shí)2uS */ } void CH372_WR_DAT_PORT_8(unit8 dat)/*向CH372的數(shù)據(jù)端口寫入單字節(jié)數(shù)據(jù)*/ { CH372_DAT_PORT=dat; Delay1us(); } unit8 CH372_RD_DAT_PORT() /*從CH372的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5us */ {
Delay1us(); return(CH372_DAT_PORT);
}
這三個(gè)子函數(shù)沒有問題, 至于什么是總線方式和模擬I/O口的方式,建議你看一下CH372的datasheet,最后有講到CH372如何與單片機(jī)連接的部分. 還有就是建議你把程序下載到單片機(jī)去看一下結(jié)果,確認(rèn)一下是不是受仿真器的影響!!!
恩,謝謝各位的解答 正在跟大家請(qǐng)教這會(huì),我又把仿真器插了拔,拔了插,窮鼓搗了半天,竟然莫名其妙的又好了,現(xiàn)在真的懷疑是仿真器的問題。 不管怎樣,謝謝大家熱心的幫忙!!謝謝!