亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C51環(huán)境下W77E58Watchdog的應(yīng)用

        2006-04-29 00:00:00王法軍王光艷
        電子產(chǎn)品世界 2006年16期

        摘 要:在單片機的應(yīng)用中,逐步引入了高級語言,C語言就是其中一種。但是如果C語言應(yīng)用不當很可能會引起單片機系統(tǒng)無法正常運行,重點介紹了利用C51作為編程語言在使用W77E58時,如果程序在定義全局變量或靜態(tài)變量時進行了初始化會對Watchdog的復(fù)位產(chǎn)生的影響及其解決方法。

        關(guān)鍵詞:C51;Watchdog;W77E58

        引言

        W77E58是華邦公司設(shè)計的一片增強型MCS-51單片機,它的最高工作頻率40MHZ,指令系統(tǒng)采用4個機器周期,具有3個16位定時器,12個中斷,32KB flashEPROM程序空間,兩個UART串口等特性。尤其適用于對存儲器資源有一定要求和對軟件運行速度有特別要求的場合,目前在工業(yè)控制中得到了廣泛應(yīng)用。單片機系統(tǒng)受干擾后,經(jīng)常出現(xiàn)的問題是程序執(zhí)行進入一種“跑飛”或“死機”狀態(tài),為此,可以采用Watchdog技術(shù)保持系統(tǒng)的正常運行。在W77E58已經(jīng)集成了一個用戶可編程的看門狗定成器,因此只要硬件接法正確,在軟件設(shè)計中調(diào)用相應(yīng)語句即可啟動Watchdog。

        C語言可以縮短開發(fā)周期,降低開發(fā)成本,而且開發(fā)出的系統(tǒng)易于維護、可靠性高、可移植性好,筆者編制程序使用的是C51。程序中開啟使用watchdog定時器后,發(fā)現(xiàn)當看門狗定時器溢出引起系統(tǒng)復(fù)位后系統(tǒng)無法重新

        開始正常運行,即復(fù)位后程序運行到main()函數(shù)之前一直在不停的復(fù)位,經(jīng)過詳細分析之后發(fā)現(xiàn)是由于在定義全局變量或靜態(tài)變量時進行變量初始化使得初始化程序執(zhí)行時間長于看門狗設(shè)置的最長時間引起的。

        W77E58Watchdog簡介

        W77E58自帶有看門狗定時器,此定時器是一個獨立于CPU自行運行的定時器,系統(tǒng)可通過編程將其設(shè)置為系統(tǒng)監(jiān)控器,時基發(fā)生器或事件定時器。該定時器基于一組分頻器,對系統(tǒng)時鐘頻率進行分割。分頻器輸出可選,并決定溢出時間。溢出時,如果看門狗有效(且看門狗定時器打開),將引起系統(tǒng)復(fù)位,系統(tǒng)復(fù)位將使“飛掉”的程序重新恢復(fù)運行,以達到提高程序運行的可靠性??撮T狗溢出中斷以及看門狗復(fù)位可利用軟件進行設(shè)置,將兩者合并或分離(即看門狗定時器溢出并使系統(tǒng)復(fù)位以及看門狗定時器僅溢出而不引起系統(tǒng)復(fù)位)。

        看門狗定時器先用RWT來啟動,這保證看門狗定時器從一個確定的狀態(tài)開始運行。RWT位用來啟動看門狗定時器。該位會自動清零,就是說在軟件向該位寫入1后,系統(tǒng)會自動把該位清為0。將RWT設(shè)為1后,看門狗定時器會對時鐘周期進行計數(shù)。超時時間由WDl和WD0位來決定(CKCON.7和CKCON.6)。超時時間到以后,WDIF位置位,之后看門狗定時器將等待512個時鐘周期,如果EWT=1且在等待期間沒有對RWT進行操作,那么512個時鐘周期以后會產(chǎn)生看門狗定時器復(fù)位。這個復(fù)位會連續(xù)兩個周期同時WTRF標志位置位,軟件可以用此來判斷是否是看門狗定時器復(fù)位。

        表1給出了看門狗定時器的溢出值,對于不同的時鐘頻率,看門狗定時器就會產(chǎn)生不同的溢出時間。當使能看門狗定時器復(fù)位后,這個復(fù)位會在其溢出并經(jīng)過512個時鐘周期后結(jié)束。看門狗定時器在上電或掉電復(fù)位后,看門狗定時器復(fù)位不會關(guān)閉看門狗定時器,但會將其重新啟動,軟件應(yīng)重新啟動定時器把它放入一個確定的狀態(tài)。

        CPU使用W77E58,主程序由C語言開發(fā)的系統(tǒng),最初在設(shè)計編制Watchdog定時器程序時發(fā)現(xiàn)開啟Watchdog定時器后,當定時器溢出引起系統(tǒng)復(fù)位后系統(tǒng)無法重新開始正常運行,即復(fù)位后程序運行到main()函數(shù)之前一直在不停的復(fù)位。經(jīng)過認真分析發(fā)現(xiàn)原來是在定義全局變量或靜態(tài)變量時對這些變量進行初始化引起的。

        問題產(chǎn)生的原因

        用C語言編程時,系統(tǒng)復(fù)位Reset后所執(zhí)行的第一個程序模塊并不是使用者的主程序main(),而是一個隱藏在KEIL—C51標準程序庫中稱為startup.a(chǎn)51的程序模塊。startup.a(chǎn)51的主要作用是將單片機內(nèi)部所有RAM單元清零,接著startup.a(chǎn)51被執(zhí)行的仍然是一個隱藏在KEIL-C51標準程序庫中被稱為init.a(chǎn)51的程序模塊,init.a(chǎn)51的主要工作是初始化程序的全局變量或靜態(tài)變量。完成上述初始化程序之后,才會開始執(zhí)行main()程序。由前面的介紹可知看門狗定時器在上電或掉電復(fù)位后,看門狗定時器復(fù)位不會關(guān)閉看門狗定時器,即在系統(tǒng)熱啟動(看門狗或其他原因引起的復(fù)位)程序重新開始運行startup.a(chǎn)51、init.a(chǎn)51時,看門狗定時器仍在繼續(xù)運行;由于運行startup.a(chǎn)51、init.a(chǎn)51花費的時間比較長,即使將看門狗定時器中斷時間設(shè)置為最長,程序運行到main()程序之前看門狗定時器將溢出并引起系統(tǒng)復(fù)位。所以由熱啟動引起系統(tǒng)復(fù)位時,看門狗定時器在運行到main()函數(shù)之前將反復(fù)引起系統(tǒng)復(fù)位此時系統(tǒng)將無法進入main()程序運行。

        問題解決的方法

        針對上述情況W77E58C51編程環(huán)境下初始化程序執(zhí)行時間長于看門狗設(shè)置的最長時間,如果想使watchdog正常運行下面提供了兩種方法:

        1.最簡單的方法是在程序中定義全局變量和靜態(tài)變量時不要對這些變量賦以初值,對這些變量的賦置可以放在程序中進行。這樣系統(tǒng)復(fù)位(Reset)后程序在運行到main()函數(shù)之前只運行startup.a(chǎn)5l,運行startup.a(chǎn)51所占用的時間比較短,程序運行到main()函數(shù)時看門狗定時器將不溢出。當程序運行到main()函數(shù)時可以將main()的第一條語句寫為“喂狗”(將看門狗定時器值復(fù)零)指令,這樣可以確保熱啟動時看門狗定時器不溢出,系統(tǒng)得以正常運行。對于W77E58單片機來說其內(nèi)部資源有限,程序代碼空間為32K,如果程序量比較大,精簡指令減少程序代碼是非常有必要的,采用這種方法時程序代碼中不包含有init.a(chǎn)51初始化程序全局變量或靜態(tài)變量的代碼,可以有效的縮減程序代碼。

        如果程序量比較少,為了簡便在定義全局變量和靜態(tài)變量時對這些變量進行了初始化,在這種情況下可以在將init.a(chǎn)51添加到項目程序中。Init.a(chǎn)51模塊中包含有watchdog宏,在初始化程序執(zhí)行時間長于看門狗設(shè)置的最長時間的時候可以設(shè)置這個宏,即在系統(tǒng)熱啟動程序重新運行到init.a(chǎn)51時,首先執(zhí)行“喂狗”指令,這樣可以確保程序在運行到main()之前看門狗不溢出,系統(tǒng)可以正常運行。

        結(jié)語

        在惡劣的現(xiàn)場環(huán)境下受到外部干擾,單片機系統(tǒng)會出現(xiàn)“死機”、程序“跑飛”等現(xiàn)象,Watchdog技術(shù)是恢復(fù)系統(tǒng)的有效方法之一。隨著C語言在開發(fā)單片機系統(tǒng)中越來越廣泛的被應(yīng)用,確保C51環(huán)境下正常運行Watchdog也尤為重要。文中給出了使用W77E58作為系統(tǒng)CPU,在利用C語言編制程序時定義全局變量或靜態(tài)變量時進行變量初始化對Watchdog的使用產(chǎn)生的影響及解決方法,當然利用C語言編程在使用其他CPU的Watchdog時也可以借鑒此種方法,利用這種方法可以保證Watchdog的正常運行,有效提高單片機系統(tǒng)運行的可靠性。

        国产自拍av在线观看| 美女裸体自慰在线观看| 伊人亚洲综合网色AV另类| 大岛优香中文av在线字幕| 日本二一三区免费在线| 狠狠色婷婷久久综合频道日韩| 人妻无码中文专区久久五月婷| 中文字幕有码高清| 成人大片免费在线观看视频| 欧洲熟妇色| 久久国产色av| 亚洲国产成人aⅴ毛片大全| 婷婷一区二区三区在线| 国产三级国产精品三级在专区 | 成年女人免费v片| 国产suv精品一区二区6| 天天草夜夜草| 在线观看高清视频一区二区三区 | 人妻被公上司喝醉在线中文字幕| 男男亚洲av无一区二区三区久久 | 久久午夜一区二区三区 | 岳毛多又紧做起爽| 免费在线亚洲视频| 国产一级r片内射视频播放| 91快射视频在线观看| 亚洲av香蕉一区区二区三区| 久久免费的精品国产v∧| 亚洲中文字幕久爱亚洲伊人| 人妻少妇中文字幕久久hd高清| 国产精品日本一区二区在线播放| 亚洲日韩国产精品乱-久| 国产亚洲欧美日韩综合综合二区| 国产欧美久久久精品影院| 久久夜色精品国产噜噜噜亚洲av| 国产自拍高清在线观看| 成人免费看吃奶视频网站| 国产精品久久婷婷婷婷| 免费在线亚洲视频观看| 在线观看视频播放| 国产无套护士在线观看| 亚洲在战AV极品无码|