80C51復位標志位的設置與應用研究
發布時間:2008/6/3 0:00:00 訪問次數:1023
    
    
    作者:李學海 劉治山
    
    引言
    
    設置復位標志位便于區分不同原因引發的復位,作為一種新技術被越來越多的新型單片機所采納。例如philips公司的p87lpc700和 p89lpc900系列、freescale公司(原motorola半導體部)的mc68hc05系列和mc68hc08系列、sunplus公司的 spmc65系列、microchip公司的pic系列等,內部都設計了專門用于記錄各種復位標志的狀態寄存器。
    
    mc68hc08系列有一個復位狀態寄存器,負責記錄6種復位標志位:上電復位、引腳復位、看門狗復位、非法指令復位、非法地址復位和欠壓復位。spmc65系列有一個系統控制寄存器,負責記錄5種復位標志位:上電復位、外部復位、看門狗復位、非法地址復位和欠壓復位。51兼容的p89lpc900系列有一個復位源寄存器,負責記錄6種復位標志位:欠壓復位、上電復位、外部復位、看門狗復位、軟件復位和uart收到間隔字符復位(主要作為進入isp監控程序的途徑之一)。就連初學者很常用的 at89s51/52和p89c52x2,也在其電源控制寄存器pcon中增設了一個上電標志位pof。
    
    1 復位標志位的設置方法
    
    傳統的80c51單片機沒有設計復位標志位的記錄功能,這應該說是一種遺憾,那么能否通過一定的技術手段來彌補這個缺憾呢?這里給廣大80c51單片機用戶提供一種啟示和引導。
    
    實現復位標志位的記錄肯定需要一定的硬件電路支持,而這種電路的設計不存在固定模式。筆者利用一片max813l設計了一種支撐電路,如圖1所示,僅供讀者參考。
    
    
    
    圖1 80c51設置復位標志的支撐電路
    
    在圖1中,應用了一個4輸入端“與非”門g1和一個按鈕開關sw1,還占用了80c51的5條i/o引腳p1.0~p1.4以及一個外部中斷源 int0,并且預先通過初始化軟件設置int0為唯一的高級中斷源,下降沿觸發方式有效,開放總中斷使能位ea。平時g1因各輸入端都維持在高電平上,因而其輸出端也保持高電平。電路中利用了一個海量電容器c1作為儲存能量的器件,扮演著備用電池的角色。由于二極管d1的存在,在主電源斷電期間,c1僅為單片機供電,應該讓這時的80c51進入耗能最低的停機狀態(pd模式)。
    
    在圖1電路的基礎上配合必要的用戶軟件,就可以在7種不同復位源引起復位之后保存6個標志位來記錄7種復位標志,以下分別進行講解。可以事先在ram的位尋址區間分配一個字節,例如20h單元,用于記錄6個復位標志位,如表1所列。
    
    
    
    表1 用戶定義的系統復位標志寄存器(srfr)
    
    假設該寄存器定名為srfr(system reset flag register),字節地址為20h,8位當中僅利用了6位,bit5~bit0分別記錄人工復位、欠壓復位、看門狗復位、非法地址復位、軟硬件復位和軟件復位。
    
    ① mrst:人工復位。當復位按鈕sw1被按下時引發int0中斷;在中斷服務程序中檢測輸入引腳p1.4的狀態。如果p1.4=0,則置位mrst,記錄下曾經發生了一次人工復位操作。然后進行一次主動的復位操作,方法是從輸出腳p1.0輸出一個低電平給max813l的輸入引腳mr,經 max813l延時后從輸出端reset送出高電平復位信號給80c51,令其進行一次硬件復位操作。
    
    ② lvr:欠壓復位。當上游電源電壓開始跌落并且下降到max813l的pfi檢測門限以下,輸出端pfo送出低電平,引發int0中斷;在中斷服務程序中檢測輸入引腳p1.3的狀態。如果p1.3=0,則置位lvr,記錄下曾經發生了一次欠壓復位操作;然后進行一次主動的復位操作(方法同上),或者令單片機進入停機狀態,以便節省能耗和保持數據,以及等待主電源的恢復。
    
    ③ wdr:看門狗復位。當發生看門狗溢出時,max813l的輸出端wdo送出低電平,引發int0中斷;在中斷服務程序中檢測輸入引腳p1.2的狀態。如果 p1.2=0,
    
    
    作者:李學海 劉治山
    
    引言
    
    設置復位標志位便于區分不同原因引發的復位,作為一種新技術被越來越多的新型單片機所采納。例如philips公司的p87lpc700和 p89lpc900系列、freescale公司(原motorola半導體部)的mc68hc05系列和mc68hc08系列、sunplus公司的 spmc65系列、microchip公司的pic系列等,內部都設計了專門用于記錄各種復位標志的狀態寄存器。
    
    mc68hc08系列有一個復位狀態寄存器,負責記錄6種復位標志位:上電復位、引腳復位、看門狗復位、非法指令復位、非法地址復位和欠壓復位。spmc65系列有一個系統控制寄存器,負責記錄5種復位標志位:上電復位、外部復位、看門狗復位、非法地址復位和欠壓復位。51兼容的p89lpc900系列有一個復位源寄存器,負責記錄6種復位標志位:欠壓復位、上電復位、外部復位、看門狗復位、軟件復位和uart收到間隔字符復位(主要作為進入isp監控程序的途徑之一)。就連初學者很常用的 at89s51/52和p89c52x2,也在其電源控制寄存器pcon中增設了一個上電標志位pof。
    
    1 復位標志位的設置方法
    
    傳統的80c51單片機沒有設計復位標志位的記錄功能,這應該說是一種遺憾,那么能否通過一定的技術手段來彌補這個缺憾呢?這里給廣大80c51單片機用戶提供一種啟示和引導。
    
    實現復位標志位的記錄肯定需要一定的硬件電路支持,而這種電路的設計不存在固定模式。筆者利用一片max813l設計了一種支撐電路,如圖1所示,僅供讀者參考。
    
    
    
    圖1 80c51設置復位標志的支撐電路
    
    在圖1中,應用了一個4輸入端“與非”門g1和一個按鈕開關sw1,還占用了80c51的5條i/o引腳p1.0~p1.4以及一個外部中斷源 int0,并且預先通過初始化軟件設置int0為唯一的高級中斷源,下降沿觸發方式有效,開放總中斷使能位ea。平時g1因各輸入端都維持在高電平上,因而其輸出端也保持高電平。電路中利用了一個海量電容器c1作為儲存能量的器件,扮演著備用電池的角色。由于二極管d1的存在,在主電源斷電期間,c1僅為單片機供電,應該讓這時的80c51進入耗能最低的停機狀態(pd模式)。
    
    在圖1電路的基礎上配合必要的用戶軟件,就可以在7種不同復位源引起復位之后保存6個標志位來記錄7種復位標志,以下分別進行講解。可以事先在ram的位尋址區間分配一個字節,例如20h單元,用于記錄6個復位標志位,如表1所列。
    
    
    
    表1 用戶定義的系統復位標志寄存器(srfr)
    
    假設該寄存器定名為srfr(system reset flag register),字節地址為20h,8位當中僅利用了6位,bit5~bit0分別記錄人工復位、欠壓復位、看門狗復位、非法地址復位、軟硬件復位和軟件復位。
    
    ① mrst:人工復位。當復位按鈕sw1被按下時引發int0中斷;在中斷服務程序中檢測輸入引腳p1.4的狀態。如果p1.4=0,則置位mrst,記錄下曾經發生了一次人工復位操作。然后進行一次主動的復位操作,方法是從輸出腳p1.0輸出一個低電平給max813l的輸入引腳mr,經 max813l延時后從輸出端reset送出高電平復位信號給80c51,令其進行一次硬件復位操作。
    
    ② lvr:欠壓復位。當上游電源電壓開始跌落并且下降到max813l的pfi檢測門限以下,輸出端pfo送出低電平,引發int0中斷;在中斷服務程序中檢測輸入引腳p1.3的狀態。如果p1.3=0,則置位lvr,記錄下曾經發生了一次欠壓復位操作;然后進行一次主動的復位操作(方法同上),或者令單片機進入停機狀態,以便節省能耗和保持數據,以及等待主電源的恢復。
    
    ③ wdr:看門狗復位。當發生看門狗溢出時,max813l的輸出端wdo送出低電平,引發int0中斷;在中斷服務程序中檢測輸入引腳p1.2的狀態。如果 p1.2=0,