<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于80C552單片機(jī)的多芯片同步復(fù)位電路

          基于80C552單片機(jī)的多芯片同步復(fù)位電路

          作者: 時(shí)間:2007-09-04 來(lái)源:網(wǎng)絡(luò) 收藏
          摘要:首先分析了應(yīng)用系統(tǒng)的一般,然后討論了多系統(tǒng)對(duì)功能的要求,并針對(duì)的特殊結(jié)構(gòu),詳細(xì)介紹了一種軟件、硬件相結(jié)合的復(fù)位。
          關(guān)鍵詞:軟件復(fù)位;;可靠性

          0.引言

          復(fù)位是的重要操作內(nèi)容,復(fù)位功能是系統(tǒng)正常運(yùn)行的先決條件。在簡(jiǎn)單的復(fù)位中,只要在微處理的RESET引腳保持高電平達(dá)2個(gè)以上的機(jī)器周期,即可完成一次復(fù)位操作[1]??紤]到電源的穩(wěn)定時(shí)間,參數(shù)漂移,晶振穩(wěn)定時(shí)間以及復(fù)位的可靠性等因素,一般只要在RESET引腳出現(xiàn)10ms以上的高電平,就能使有效復(fù)位。但是在單片機(jī)應(yīng)用系統(tǒng)中除單片機(jī)外,往往還有若干個(gè)外圍器件,如果外圍器件有復(fù)位要求,便形成了多個(gè)的綜合復(fù)位系統(tǒng),這時(shí),一般的復(fù)位電路就不能滿足使用要求,本文以常用芯片為例,提出了一種多芯片復(fù)位電路設(shè)計(jì)方法,供讀者參考。

          1.MSC-51系列的一般上電復(fù)位電路

          圖1 一般復(fù)位電路


          一般上電復(fù)位電路是利用RC充電原理實(shí)現(xiàn)的,如圖1(a)所示。初始上電,電容兩端等電位,則RESET為高電平,隨著對(duì)電容的充電,RESET端電位逐漸降低,直至低電平,復(fù)位過(guò)程結(jié)束。RC的選取應(yīng)使RESET端保持10ms的高電平,才能實(shí)現(xiàn)可靠復(fù)位。

          圖1(a)雖然能實(shí)現(xiàn)上電復(fù)位功能,但對(duì)干擾沒(méi)有抵抗作用,不能保證復(fù)位電路任何時(shí)候都能可靠地工作。單片機(jī)復(fù)位端口的干擾主要來(lái)自電源的噪聲,盡管不會(huì)造成單片機(jī)的錯(cuò)誤復(fù)位,但會(huì)引起某些內(nèi)部寄存器錯(cuò)誤復(fù)位。因此要采取必要措施,消除干擾低復(fù)位功能的影響。

          圖1(b)給出了一個(gè)改進(jìn)的電路。電阻R與電容C構(gòu)成一個(gè)低通濾波環(huán)節(jié),然后通過(guò)74LS14施密特電路接入單片機(jī)復(fù)位端,可以提高對(duì)串入復(fù)位端噪聲的抑制能力。電路中并聯(lián)二極管D的目的是在電源斷電后,電容能迅速放電。如果沒(méi)有二極管,那么在斷電窄脈沖的干擾下,由于電容C不能迅速將電荷放掉,待電源恢復(fù)時(shí),由于電容C兩端仍維持較高電壓,單片機(jī)不能上電自動(dòng)復(fù)位,導(dǎo)致程序運(yùn)行失控。

          2. 的多芯片同步復(fù)位的硬件電路

          2.1 80C552內(nèi)部特殊的復(fù)位結(jié)構(gòu)

          圖 2 80C552片內(nèi)復(fù)位電路


          80C552[4]芯片的內(nèi)部復(fù)位電路和MSC-51系列的其他芯片不同,它已經(jīng)將抑制噪聲干擾的史密特電路集成到芯片內(nèi)部,這樣就減少了外部連接的不可靠因素的影響,而且將上電復(fù)位用的充電電阻也集成到芯片內(nèi)部,簡(jiǎn)化了外部復(fù)位電路的硬件設(shè)計(jì),提高了上電復(fù)位的可靠性。

          另外,80C552內(nèi)部有一個(gè)定時(shí)監(jiān)視器T3,可以產(chǎn)生內(nèi)部復(fù)位。如圖2所示。80C552的內(nèi)部復(fù)位過(guò)程是:將定時(shí)監(jiān)視器T3置為有效,當(dāng)程序運(yùn)行出現(xiàn)異常時(shí),定時(shí)器T3溢出,并輸出寬度為3個(gè)機(jī)器周期的窄脈沖到復(fù)位電路,這樣的脈沖足以完成一次復(fù)位操作,使系統(tǒng)盡快地從故障中恢復(fù)正常。80C552的外部復(fù)位與內(nèi)部復(fù)位是相互獨(dú)立的,當(dāng)允許內(nèi)部復(fù)位時(shí),不管RST引腳是否為高電平,都能產(chǎn)生一次復(fù)位操作。

          2.2 單獨(dú)采用80C552芯片的復(fù)位電路

          圖 3 80C552外部復(fù)位電路


          如果80C552的復(fù)位端不再連到其它芯片上,可以采取圖3(a)的方案,外部元件少,而且外部復(fù)位、內(nèi)部復(fù)位均可實(shí)現(xiàn),系統(tǒng)設(shè)計(jì)簡(jiǎn)單,可靠性也高。

          2.3 多芯片簡(jiǎn)單復(fù)位電路

          當(dāng)系統(tǒng)中有多個(gè)復(fù)位端連在一起時(shí),不能采用圖3(a)的方案。因?yàn)殡娙莸姆烹娮饔?,使得T3輸出的窄脈沖無(wú)法在RST引腳出現(xiàn),這樣,當(dāng)產(chǎn)生內(nèi)部復(fù)位條件時(shí),雖然80C552可以得到復(fù)位,但其它外圍芯片無(wú)法得到復(fù)位。這時(shí)應(yīng)采用圖3(b)的方案,電容不直接與RST引腳相連,在RST引腳就可以取到T3輸出的窄脈沖了。這樣,當(dāng)產(chǎn)生內(nèi)部復(fù)位條件時(shí),整個(gè)系統(tǒng)都可以實(shí)現(xiàn)復(fù)位了。

          但由于不同廠家生產(chǎn)的芯片結(jié)構(gòu)不同,對(duì)復(fù)位的要求也不同[5],況且多芯片的復(fù)位連接必然使復(fù)位線加長(zhǎng),這極易引起較大的分布電容,從而使外圍電路的復(fù)位過(guò)程滯后于單片機(jī),如果單片機(jī)復(fù)位結(jié)束后立即對(duì)外圍電路進(jìn)行初始化操作,往往會(huì)導(dǎo)致失敗。解決的方法是在程序的初始處加一些延時(shí)軟件,然后再對(duì)外圍芯片進(jìn)行初始化設(shè)置,可實(shí)現(xiàn)多個(gè)芯片的可靠同步。

          2.4 80C552的多芯片同步復(fù)位電路設(shè)計(jì)圖


          圖4多芯片綜合復(fù)位電路舉例

          5軟件復(fù)位流程圖


          圖4是我們?cè)O(shè)計(jì)的遙控?cái)?shù)據(jù)采集器的接收和轉(zhuǎn)發(fā)電路,紅外接收器接收發(fā)射器發(fā)過(guò)來(lái)的現(xiàn)場(chǎng)數(shù)據(jù)信息,送到89C2051進(jìn)行處理,然后通過(guò)I2C總線傳送到80C552,經(jīng)過(guò)80C552進(jìn)一步處理后,采用CAN總線傳送到數(shù)據(jù)處理中心.我們這里僅對(duì)它的復(fù)位電路進(jìn)行討論.

          在這個(gè)系統(tǒng)中,除了80C552需要復(fù)位外,還有兩個(gè)芯片需要復(fù)位操作,一個(gè)是CAN控制器SJA1000,一個(gè)是單片機(jī)89C2051。其復(fù)位要求是:既要有上電自動(dòng)復(fù)位功能,又要能通過(guò)定時(shí)監(jiān)視器T3實(shí)現(xiàn)“看門狗”復(fù)位功能;當(dāng)80C552復(fù)位時(shí),89C2051和SJA1000也同時(shí)復(fù)位;當(dāng)89C2051或SJA1000出現(xiàn)問(wèn)題時(shí),通過(guò)80C552能夠分別對(duì)其進(jìn)行復(fù)位,而不影響80C552程序的正常運(yùn)行。而且,89C2051和SJA1000兩個(gè)芯片的復(fù)位電平信號(hào)不同,前者為高電平復(fù)位,后者為低電平復(fù)位。按照上述功能要求,簡(jiǎn)單的采用前面介紹的兩種復(fù)位電路均不可行。于是我們采取了一種軟件與硬件結(jié)合的方法,這種方法是,在硬件結(jié)構(gòu)上,芯片80C552的外部復(fù)位電路仍采用圖3(a)的結(jié)構(gòu),芯片89C2051和SJA1000的復(fù)位不直接與80C552的復(fù)位端相連,而是連到了80C552的兩根I/O口線P1.1和P1.3;在軟件設(shè)計(jì)上,通過(guò)在初始化程序中軟件模擬上電復(fù)位過(guò)程,就可以滿足系統(tǒng)的要求,其程序流程圖如圖5所示。

          系統(tǒng)綜合復(fù)位過(guò)程是:系統(tǒng)上電后,80C552首先復(fù)位,開(kāi)始運(yùn)行軟件程序,在執(zhí)行初始化部分時(shí),首先通過(guò)P1.1和P1.3實(shí)現(xiàn)對(duì)89C2051和SJA1000的復(fù)位操作,然后再運(yùn)行其他程序。當(dāng)程序運(yùn)行出現(xiàn)異常時(shí),“看門狗”起作用,T3溢出產(chǎn)生內(nèi)部復(fù)位操作,程序重新開(kāi)始,初始化部分也重新運(yùn)行,89C2051和SJA1000隨之再?gòu)?fù)位一次。在程序正常運(yùn)行過(guò)程中,如果與89C2051或SJA1000相關(guān)的模塊出現(xiàn)錯(cuò)誤時(shí),可以通過(guò)軟件判定是否出現(xiàn)異常,之后通過(guò)P1.1、P1.3端口分別對(duì)89C2051或SJA1000單獨(dú)進(jìn)行復(fù)位操作,此時(shí)80C552并不需要復(fù)位,程序正常運(yùn)行。

          3 結(jié)論:

          本文作者創(chuàng)新點(diǎn): 對(duì)于多芯片結(jié)構(gòu)提出了一種軟件與硬件相結(jié)合的方法建立同步復(fù)位系統(tǒng)。這種方法有利于提高系統(tǒng)設(shè)計(jì)的靈活性和可靠性。經(jīng)過(guò)長(zhǎng)期使用的結(jié)果表明,這種采用軟件、硬件相結(jié)合的復(fù)位方法,具有硬件器件少、靈活、可靠性高的特點(diǎn),完全能夠保證多個(gè)芯片的可靠同步。

          參考文獻(xiàn)

          [1]孫涵芳 徐愛(ài)卿.MCS-51、96系列單片機(jī)原理及應(yīng)用[M],北京:北京航空航天大學(xué)出版社,1995,4
          [2]王幸之 王雷 翟成 王閃.單片機(jī)應(yīng)用系統(tǒng)抗干擾技術(shù)[M],北京:北京航天大學(xué)出版社,2000,9
          [3]張有德.飛利浦80C51系列單片機(jī)原理與應(yīng)用技術(shù)手冊(cè)[M],北京:北京航空航天大學(xué)出版社,1999,1
          [4]田景文,性能卓越的單片機(jī)80C552[J].石油儀器[J] 1998,3:32-34
          [5]洪一池,袁一萍.微控制器實(shí)時(shí)系統(tǒng)監(jiān)測(cè)復(fù)位電路的軟件設(shè)計(jì)[J].微型計(jì)算機(jī)應(yīng)用2003,3:44-45.
          [6]喬維德.87LPC768微處理器相位計(jì)的設(shè)計(jì)[J].微計(jì)算機(jī)信息2006,3-2:43-44.

          DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();