基于X25045的新型看門狗電路
發(fā)布時間:2008/5/28 0:00:00 訪問次數(shù):279
看門狗(watchdog)電路是嵌入式系統(tǒng)需要的抗干擾措施之一。本文用x25045芯片設計了一種新的看門狗電路,具有體積小、占用i/o口線少和編程方便的特點,可廣泛應用于儀器儀表和各種工控系統(tǒng)中。
前言
工控系統(tǒng)在運行時,通常都會遇到各種各樣的現(xiàn)場干擾,抗干擾能力是衡量工控系統(tǒng)性能的一個重要指標?撮T狗(watchdog)電路是自行監(jiān)測系統(tǒng)運行的重要保證,幾乎所有的工控系統(tǒng)都包含看門狗電路。在8096系列單片機和增強型8051系列單片機中,該系統(tǒng)已經(jīng)做在芯片內(nèi)部,用戶只要用軟件開放它就可以,使用很方便。但目前工控系統(tǒng)仍在使用廉價的普通型8051系列單片機,則看門狗電路必須由用戶自己建立。
看門狗電路一般有軟件看門狗和硬件看門狗兩種。軟件看門狗不需外接硬件電路,但系統(tǒng)需要出讓一個定時器資源,這在許多系統(tǒng)中很難辦到,而且若系統(tǒng)軟件運行不正常,可能導致看門狗系統(tǒng)也癱瘓。硬件看門狗是真正意義上的“程序運行監(jiān)視器”,如計數(shù)型的看門狗電路通常由555多諧振蕩器、計數(shù)器以及一些電阻、電容等組成,分立元件組成的系統(tǒng)電路較為復雜,運行不夠可靠。
x25045芯片簡介
x25045是美國xicor公司的生產(chǎn)的標準化8腳集成電路,它將eeprom、看門狗定時器、電壓監(jiān)控三種功能組合在單個芯片之內(nèi),大大簡化了硬件設計,提高了系統(tǒng)的可靠性,減少了對印制電路板的空間要求,降低了成本和系統(tǒng)功耗,是一種理想的單片機外圍芯片。x25045引腳如圖1所示。
其引腳功能如下。cs:片選擇輸入;
so:串行輸出,數(shù)據(jù)由此引腳逐位輸出;
si:串行輸入,數(shù)據(jù)或命令由此引腳逐位寫入x25045;
sck:串行時鐘輸入,其上升沿將數(shù)據(jù)或命令寫入,下降沿將數(shù)據(jù)輸出;
wp:寫保護輸入。當它低電平時,寫操作被禁止;
vss:地;
vcc:電源電壓;
reset:復位輸出。
x25045在讀寫操作之前,需要先向它發(fā)出指令,指令名及指令格式如表1所示。
x25045看門狗電路設計及編程
x25045硬件連接圖如圖2所示。x25045芯片內(nèi)包含有一個看門狗定時器,可通過軟件預置系統(tǒng)的監(jiān)控時間。在看門狗定時器預置的時間內(nèi)若沒有總線活動,則x25045將從reset輸出一個高電平信號,經(jīng)過微分電路c2、r3輸出一個正脈沖,使cpu復位。圖2電路中,cpu的復位信號共有3個:上電復位(c1、r2),人工復位(s、r1、r2)和watchdog復位(c2、r3),通過或門綜合后加到reset端。c2、r3的時間常數(shù)不必太大,有數(shù)百微秒即可,因為這時cpu的振蕩器已經(jīng)在工作。
看門狗定時器的預置時間是通過x25045的狀態(tài)寄存器的相應位來設定的。如表2所示,x25045狀態(tài)寄存器共有6位有含義,其中wd1、wd0和看門狗電路有關(guān),其余位和eeprom的工作設置有關(guān)。
wd1=0,wd0=0,預置時間為1.4s。
wd1=0,wd0=1,預置時間為0.6s。
wd1=1,wd0=0,預置時間為0.2s。
wd1=1,wd0=1,禁止看門狗工作。
看門狗電路的定時時間長短可由具體應用程序的循環(huán)周期決定,通常比系統(tǒng)正常工作時最大循環(huán)周期的時間略長即可。編程時,可在軟件的合適地方加一條喂狗指令,使看門狗的定時時間永遠達不到預置時間,系統(tǒng)就不會復位而正常工作。當系統(tǒng)跑飛,用軟件陷阱等別的方法無法捕捉回程序時,則看門狗定時時間很快增長到預置時間,迫使系統(tǒng)復位。
以下是c語言編寫的看門狗程序部分。
#include "reg51.h"
sbit cs=p1^2;/*片選信號由p1.2產(chǎn)生*/
sbit sck=p1^3; /*時鐘信號由p1.3 產(chǎn)生*/
sbit si=p1^0; /*si由p1.0產(chǎn)生*/
sbit so=p1^1; /*so由p1.1產(chǎn)生*/
sbit c=acc^7; /*定義位變量*/
bdata unsigned char com;
void tran() /*發(fā)送一字節(jié)數(shù)據(jù)子函數(shù)*/
{
unsigned char i;
for(i=0; i<8; i++)
{ acc=com; /*將數(shù)據(jù)放入a中*/
si=c;
sck=0; /*sck產(chǎn)生一個上跳變*/
sck=1;
com=com<<1; /*左移一位*/
}
return;
}
main()
{
com=0x06; /*發(fā)寫讀使能命令*/
cs=0
看門狗(watchdog)電路是嵌入式系統(tǒng)需要的抗干擾措施之一。本文用x25045芯片設計了一種新的看門狗電路,具有體積小、占用i/o口線少和編程方便的特點,可廣泛應用于儀器儀表和各種工控系統(tǒng)中。
前言
工控系統(tǒng)在運行時,通常都會遇到各種各樣的現(xiàn)場干擾,抗干擾能力是衡量工控系統(tǒng)性能的一個重要指標?撮T狗(watchdog)電路是自行監(jiān)測系統(tǒng)運行的重要保證,幾乎所有的工控系統(tǒng)都包含看門狗電路。在8096系列單片機和增強型8051系列單片機中,該系統(tǒng)已經(jīng)做在芯片內(nèi)部,用戶只要用軟件開放它就可以,使用很方便。但目前工控系統(tǒng)仍在使用廉價的普通型8051系列單片機,則看門狗電路必須由用戶自己建立。
看門狗電路一般有軟件看門狗和硬件看門狗兩種。軟件看門狗不需外接硬件電路,但系統(tǒng)需要出讓一個定時器資源,這在許多系統(tǒng)中很難辦到,而且若系統(tǒng)軟件運行不正常,可能導致看門狗系統(tǒng)也癱瘓。硬件看門狗是真正意義上的“程序運行監(jiān)視器”,如計數(shù)型的看門狗電路通常由555多諧振蕩器、計數(shù)器以及一些電阻、電容等組成,分立元件組成的系統(tǒng)電路較為復雜,運行不夠可靠。
x25045芯片簡介
x25045是美國xicor公司的生產(chǎn)的標準化8腳集成電路,它將eeprom、看門狗定時器、電壓監(jiān)控三種功能組合在單個芯片之內(nèi),大大簡化了硬件設計,提高了系統(tǒng)的可靠性,減少了對印制電路板的空間要求,降低了成本和系統(tǒng)功耗,是一種理想的單片機外圍芯片。x25045引腳如圖1所示。
其引腳功能如下。cs:片選擇輸入;
so:串行輸出,數(shù)據(jù)由此引腳逐位輸出;
si:串行輸入,數(shù)據(jù)或命令由此引腳逐位寫入x25045;
sck:串行時鐘輸入,其上升沿將數(shù)據(jù)或命令寫入,下降沿將數(shù)據(jù)輸出;
wp:寫保護輸入。當它低電平時,寫操作被禁止;
vss:地;
vcc:電源電壓;
reset:復位輸出。
x25045在讀寫操作之前,需要先向它發(fā)出指令,指令名及指令格式如表1所示。
x25045看門狗電路設計及編程
x25045硬件連接圖如圖2所示。x25045芯片內(nèi)包含有一個看門狗定時器,可通過軟件預置系統(tǒng)的監(jiān)控時間。在看門狗定時器預置的時間內(nèi)若沒有總線活動,則x25045將從reset輸出一個高電平信號,經(jīng)過微分電路c2、r3輸出一個正脈沖,使cpu復位。圖2電路中,cpu的復位信號共有3個:上電復位(c1、r2),人工復位(s、r1、r2)和watchdog復位(c2、r3),通過或門綜合后加到reset端。c2、r3的時間常數(shù)不必太大,有數(shù)百微秒即可,因為這時cpu的振蕩器已經(jīng)在工作。
看門狗定時器的預置時間是通過x25045的狀態(tài)寄存器的相應位來設定的。如表2所示,x25045狀態(tài)寄存器共有6位有含義,其中wd1、wd0和看門狗電路有關(guān),其余位和eeprom的工作設置有關(guān)。
wd1=0,wd0=0,預置時間為1.4s。
wd1=0,wd0=1,預置時間為0.6s。
wd1=1,wd0=0,預置時間為0.2s。
wd1=1,wd0=1,禁止看門狗工作。
看門狗電路的定時時間長短可由具體應用程序的循環(huán)周期決定,通常比系統(tǒng)正常工作時最大循環(huán)周期的時間略長即可。編程時,可在軟件的合適地方加一條喂狗指令,使看門狗的定時時間永遠達不到預置時間,系統(tǒng)就不會復位而正常工作。當系統(tǒng)跑飛,用軟件陷阱等別的方法無法捕捉回程序時,則看門狗定時時間很快增長到預置時間,迫使系統(tǒng)復位。
以下是c語言編寫的看門狗程序部分。
#include "reg51.h"
sbit cs=p1^2;/*片選信號由p1.2產(chǎn)生*/
sbit sck=p1^3; /*時鐘信號由p1.3 產(chǎn)生*/
sbit si=p1^0; /*si由p1.0產(chǎn)生*/
sbit so=p1^1; /*so由p1.1產(chǎn)生*/
sbit c=acc^7; /*定義位變量*/
bdata unsigned char com;
void tran() /*發(fā)送一字節(jié)數(shù)據(jù)子函數(shù)*/
{
unsigned char i;
for(i=0; i<8; i++)
{ acc=com; /*將數(shù)據(jù)放入a中*/
si=c;
sck=0; /*sck產(chǎn)生一個上跳變*/
sck=1;
com=com<<1; /*左移一位*/
}
return;
}
main()
{
com=0x06; /*發(fā)寫讀使能命令*/
cs=0