復位是單片機的重要操作內容,復位功能是系統正常運行的先決條件。在簡單的復位電路中,只要在微處理芯片的RESET引腳保持高電平達2個以上的機器周期,即可完成一次復位操作[1]。考慮到電源的穩定時間,參數漂移,晶振穩定時間以及復位的可靠性等因素,一般只要在RESET引腳出現10ms以上的高電平,就能使單片機有效復位。但是在單片機應用系統中除單片機外,往往還有若干個外圍器件,如果外圍器件有復位要求,便形成了多個芯片的綜合復位系統,這時,一般的復位電路就不能滿足使用要求,本文以常用芯片80C552為例,提出了一種多芯片同步復位電路設計方法,供讀者參考。 1.MSC-51系列的一般上電復位電路 圖1 一般復位電路 一般上電復位電路是利用RC充電原理實現的,如圖1(a)所示。初始上電,電容兩端等電位,則RESET為高電平,隨著對電容的充電,RESET端電位逐漸降低,直至低電平,復位過程結束。RC的選取應使RESET端保持10ms的高電平,才能實現可靠復位。 圖1(a)雖然能實現上電復位功能,但對干擾沒有抵抗作用,不能保證復位電路任何時候都能可靠地工作。單片機復位端口的干擾主要來自電源的噪聲,盡管不會造成單片機的錯誤復位,但會引起某些內部寄存器錯誤復位。因此要采取必要措施,消除干擾低復位功能的影響。 圖1(b)給出了一個改進的電路。電阻R與電容C構成一個低通濾波環節,然后通過74LS14施密特電路接入單片機復位端,可以提高對串入復位端噪聲的抑制能力。電路中并聯二極管D的目的是在電源斷電后,電容能迅速放電。如果沒有二極管,那么在斷電窄脈沖的干擾下,由于電容C不能迅速將電荷放掉,待電源恢復時,由于電容C兩端仍維持較高電壓,單片機不能上電自動復位,導致程序運行失控。 2. 基于80C552的多芯片同步復位的硬件電路 2.1 80C552內部特殊的復位結構 圖 2 80C552片內復位電路 80C552[4]芯片的內部復位電路和MSC-51系列的其他芯片不同,它已經將抑制噪聲干擾的史密特電路集成到芯片內部,這樣就減少了外部連接的不可靠因素的影響,而且將上電復位用的充電電阻也集成到芯片內部,簡化了外部復位電路的硬件設計,提高了上電復位的可靠性。 另外,80C552內部有一個定時監視器T3,可以產生內部復位。如圖2所示。80C552的內部復位過程是:將定時監視器T3置為有效,當程序運行出現異常時,定時器T3溢出,并輸出寬度為3個機器周期的窄脈沖到復位電路,這樣的脈沖足以完成一次復位操作,使系統盡快地從故障中恢復正常。80C552的外部復位與內部復位是相互獨立的,當允許內部復位時,不管RST引腳是否為高電平,都能產生一次復位操作。 2.2 單獨采用80C552芯片的復位電路 圖 3 80C552外部復位電路 如果80C552的復位端不再連到其它芯片上,可以采取圖3(a)的方案,外部元件少,而且外部復位、內部復位均可實現,系統設計簡單,可靠性也高。 2.3 多芯片簡單復位電路 當系統中有多個復位端連在一起時,不能采用圖3(a)的方案。因為電容的放電作用,使得T3輸出的窄脈沖無法在RST引腳出現,這樣,當產生內部復位條件時,雖然80C552可以得到復位,但其它外圍芯片無法得到復位。這時應采用圖3(b)的方案,電容不直接與RST引腳相連,在RST引腳就可以取到T3輸出的窄脈沖了。這樣,當產生內部復位條件時,整個系統都可以實現復位了。 但由于不同廠家生產的芯片結構不同,對復位的要求也不同[5],況且多芯片的復位連接必然使復位線加長,這極易引起較大的分布電容,從而使外圍電路的復位過程滯后于單片機,如果單片機復位結束后立即對外圍電路進行初始化操作,往往會導致失敗。解決的方法是在程序的初始處加一些延時軟件,然后再對外圍芯片進行初始化設置,可實現多個芯片的可靠同步。 2.4 基于80C552的多芯片同步復位電路設計圖 圖4多芯片綜合復位電路舉例 5 軟件復位流程圖 圖4是我們設計的遙控數據采集器的接收和轉發電路,紅外接收器接收發射器發過來的現場數據信息,送到89C2051進行處理,然后通過I2C總線傳送到80C552,經過80C552進一步處理后,采用CAN總線傳送到數據處理中心.我們這里僅對它的復位電路進行討論. 在這個系統中,除了80C552需要復位外,還有兩個芯片需要復位操作,一個是CAN控制器SJA1000,一個是單片機89C2051。其復位要求是:既要有上電自動復位功能,又要能通過定時監視器T3實現“看門狗”復位功能;當80C552復位時,89C2051和SJA1000也同時復位;當89C2051或SJA1000出現問題時,通過80C552能夠分別對其進行復位,而不影響80C552程序的正常運行。而且,89C2051和SJA1000兩個芯片的復位電平信號不同,前者為高電平復位,后者為低電平復位。按照上述功能要求,簡單的采用前面介紹的兩種復位電路均不可行。于是我們采取了一種軟件與硬件結合的方法,這種方法是,在硬件結構上,芯片80C552的外部復位電路仍采用圖3(a)的結構,芯片89C2051和SJA1000的復位不直接與80C552的復位端相連,而是連到了80C552的兩根I/O口線P1.1和P1.3;在軟件設計上,通過在初始化程序中軟件模擬上電復位過程,就可以滿足系統的要求,其程序流程圖如圖5所示。 系統綜合復位過程是:系統上電后,80C552首先復位,開始運行軟件程序,在執行初始化部分時,首先通過P1.1和P1.3實現對89C2051和SJA1000的復位操作,然后再運行其他程序。當程序運行出現異常時,“看門狗”起作用,T3溢出產生內部復位操作,程序重新開始,初始化部分也重新運行,89C2051和SJA1000隨之再復位一次。在程序正常運行過程中,如果與89C2051或SJA1000相關的模塊出現錯誤時,可以通過軟件判定是否出現異常,之后通過P1.1、P1.3端口分別對89C2051或SJA1000單獨進行復位操作,此時80C552并不需要復位,程序正常運行。 3 結論: 本文作者創新點: 對于多芯片結構提出了一種軟件與硬件相結合的方法建立同步復位系統。這種方法有利于提高系統設計的靈活性和可靠性。經過長期使用的結果表明,這種采用軟件、硬件相結合的復位方法,具有硬件器件少、靈活、可靠性高的特點,完全能夠保證多個芯片的可靠同步。 |