搜索的用戶組別: 遊客[0級]
搜索選項 要有附件 作者搜索
搜索範圍
Dedo 論壇搜索系統
DC論壇影城 ad.vbox
香港易存網庫 [服務器租用|easyhost.com.hk] 域名 電郵 VPN 網頁寄存 快速穩定 雲端 Hosting Server 電話:(852)-21550486 / (86)-21-61979257 服務:[ 資訊, 電郵服務, 資訊網絡, 網頁儲存, 網頁設計, 網站設計, 網頁寄存, 網站寄存, 主機租用, 主機托管, 伺服器管理, 伺服器租用, 伺服器托管, 服務器租用, 服務器托管, 香港服務器托管, 香港服務器租用, 域名註冊, 網站地圖, 客戶優惠, 報章報導, web hosting, hosting, email service, web page design, web design, dedicated server, dedicated host, server management, server colocation, colocation, Virtual Host, MPLS, CDN, IPLC ]
返回列表 發帖

[原創] 89s52看门狗的写法

89s52看门狗的写法

sfr  WDTRST  =   0xA6;   
sfr  WDTPRG  =   0xA7;   

//WDTRST sfr 地址为0x1E and then 0xE1,复位// 地址为0x0。
void rst_Watchdog( void )
{
    W TPRG |= 0x07;
    WDTRST  = 0x1E;
    WDTRST  = 0xE1;
}

void main( void )
{
int i;
                                     // 设置看门狗时间为1个时钟循环后
rst_Watchdog();
                                   //关看门狗一个时钟循环
for( i = 0; i < 500; i++)
{
  rst_Watchdog();
}

while(1)
{
                        //模拟出错
}
}

嗯 我不知道是干什么的耶  既然进来了 就看看吧

TOP

WDT 是為了防止系統出錯誤的一種記時器,當記時器數到 0 就會把機器的 PC 指到最後的位置,
上述的範例只有在 main 放個迴圈然後不斷去清除 WDT 計時器,沒有功能,
小弟一般的寫法會在 main 中的最初位置先去判斷一個暫存器的內容,因為 WDT 執行後並不會清除 RAM 內容,
所以寫法就是
void main (void) {
if(m_for_wdt_reg == 0xaa)
{ 這裡就是 WDT 當機後執行的地方可以放置當機處理程序 }
else
{ m_for_wdt_reg = 0xaa; }

while (1)
{
rst_Watchdog();
process_loop();      // 這一段的時間週期不能夠超過 wdt 的計時週期
}

}

TOP

看看,谢谢楼主,辛苦!

TOP

返回列表