宋 芳 張夢(mèng)潔
摘要:工作在惡劣環(huán)境中的通訊設(shè)備,容易受到電磁干擾等因素的影響,出現(xiàn)程序跑飛、死機(jī)等現(xiàn)象,造成通訊中斷,且不能自行恢復(fù)正常工作,本文針對(duì)這一現(xiàn)象進(jìn)行電路的硬件和軟件設(shè)計(jì),通過監(jiān)聽串口數(shù)據(jù),對(duì)設(shè)備CPU進(jìn)行斷電復(fù)位,從而使設(shè)備恢復(fù)正常工作,提高通訊可靠性。
關(guān)鍵詞:高可靠性通訊保護(hù);串口監(jiān)聽;定時(shí)器;P89LPC915單片機(jī)
1概述:
在設(shè)計(jì)應(yīng)用于工業(yè)現(xiàn)場(chǎng)的通訊設(shè)備時(shí),例如無人值守的變電站抄表設(shè)備,應(yīng)充分考慮設(shè)備的抗干擾性能,結(jié)合硬件和軟件兩方面進(jìn)行優(yōu)化組合,在不可避免出現(xiàn)死機(jī)等嚴(yán)重故障時(shí),設(shè)備應(yīng)能夠可靠復(fù)位,重新開始工作。本設(shè)計(jì)中通過使用PHILIPS公司CPU芯片P89LPC915來監(jiān)控主CPU的對(duì)外通訊串行口,定期采集主CPU的發(fā)送腳TXD的狀態(tài),若在設(shè)定的時(shí)間內(nèi),TXD腳上的電平?jīng)]有變化,即可判定主CPU工作異常,此時(shí)控制主CPU完成掉電,然后上電
2系統(tǒng)硬件電路設(shè)計(jì):
2.1電路原理圖
2.2電路分析
系統(tǒng)電源--在圖1中,U1和U2為電源管理芯片SPX3819M5-3.3,這是SIPEX公司的微功耗LDO,靜態(tài)電流為90uA,輸出電流為500mA,具有輸出使能和輸出短路保護(hù)功能,輸入電壓最大為20V,輸出電壓為3.3V,精度為1%. 在本應(yīng)用中, SPX3819M5-3.3的3腳為輸出使能端,當(dāng)該引腳上的電壓高于+2V,芯片輸出+3.3V; 當(dāng)該引腳上的電壓低于+0.4V,芯片無輸出電壓。在圖中使用U1為U3供電,將U1的輸出使能端(U1的第3腳)連至+5V,使U1一直輸出+3.3V;使用U2為主CPU供電,U2的使能端受控于U3,在U3的控制下完成對(duì)主CPU的斷送電,實(shí)現(xiàn)主CPU的上電復(fù)位。
系統(tǒng)CPU——在圖1中,U3為PHLIPS公司的增強(qiáng)型51單片機(jī)P89LPC915,該芯片采用了高性能的處理器結(jié)構(gòu),指令執(zhí)行時(shí)間只需2到4個(gè)時(shí)鐘周期,速度是標(biāo)準(zhǔn)80C51芯片的6倍,具有2K可字節(jié)擦除的Flash存儲(chǔ)器和256字節(jié)的RAM數(shù)據(jù)存儲(chǔ)器,有可編程 I/O 口輸出模式-可配置為準(zhǔn)雙向口,開漏輸出,推挽和僅為輸入功能。芯片內(nèi)部還集成了許多系統(tǒng)級(jí)的功能,如片內(nèi)的RC震蕩器、內(nèi)部上電復(fù)位功能、內(nèi)部看門狗、實(shí)時(shí)時(shí)鐘、波特率發(fā)生器、I2C接口、ICP接口等。芯片有DIP和TSSOP封裝,使用靈活方便,可靠性好,成本低。在本應(yīng)用中CPU的P0.0、P0.1、P0.2、P0.3分別接主CPU的TXD0、TXD1、TXD2、TXD3四個(gè)發(fā)送端;P1.4用于控制電源管理芯片U2的輸出使能。CPU程序時(shí)刻采樣P0.0、P0.1、P0.2、P0.3的狀態(tài),如果在設(shè)定的時(shí)間內(nèi),P0.0、P0.1、P0.2、P0.3四個(gè)引腳的狀態(tài)一直為高電平,程序即認(rèn)為主CPU通訊出現(xiàn)了異常,此時(shí)就在P1.4輸出低電平,將主CPU斷電,延時(shí)后重新上電,這就完成了主CPU的上電復(fù)位,主CPU恢復(fù)正常工作。
ICP接口——在圖1中,JP1為單片機(jī)P89LPC915的ICP接口,在電路板上設(shè)計(jì)有插座,將ICP編程器插在該插座上即可實(shí)現(xiàn)對(duì)單片機(jī)的在電路編程,可隨時(shí)升級(jí)程序。
工作指示-D1為紅色的發(fā)光二極管,它與CPU的P1.2口連接,可指示CPU的工作狀態(tài),方便調(diào)試。
開關(guān)機(jī)按鍵-S1為主CPU的復(fù)位上電按鍵,與CPU的P1.3口連接,程序判斷此引腳狀態(tài),完成主CPU的斷電和上電。
3系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)分為CPU初始化、定時(shí)器設(shè)計(jì)、端口采樣函數(shù)、延時(shí)函數(shù)、看門狗定時(shí)器等幾部分,流程圖如下:
程序清單
#include "REG915.H"
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P0_2=P0^2;
sbit P0_3=P0^3;
sbit P0_4=P0^4;
staticint Count=0;
staticint Count1=0;
void init(void);
/**************初始**************/
void init(void)
{
DIVM=4;//相當(dāng)于標(biāo)準(zhǔn)8051的晶振為12MHz的速度
P0M1=0x0F;//
P0M2=0x00;// p0.0--p0.3配置為僅為輸入口
P1M1=0x0C;//p1.2 p1.3 配置為開漏
P1M2=0x1C;// p1.4為推挽輸出
RTCH=0xFF;
RTCL=0xFF;//實(shí)時(shí)時(shí)鐘初值
RTCCON=0x00;//選擇CCLK為時(shí)鐘源
RTCCON=0x62;//0110 0011,時(shí)鐘中斷使能
TMOD=0x11;//定時(shí)器0和定時(shí)器1工作于16位模式
TAMOD=0x00;
TH0=0x00;//定時(shí)器初值
TL0=0x00;
TH1=0xfc;
TL1=0x18;
IP0H=0x48;
IP0=0x0A;//中斷優(yōu)先級(jí)
WDL=0xFF;//2.62s看門狗初值
WDCON=0xE5;//看門狗時(shí)鐘源為看門狗震蕩器,
WFEED1=0xA5;
WFEED2=0x5A;//清零序列
}
/*********看門狗清零序列*********/
void WatDog()
{
EA=0;
WFEED1=0xA5;
WFEED2=0x5A;
EA=1;
}
/*****************************/
/**********ms延時(shí)函數(shù)*********/
void Delay(unsigned int Time)
{
unsigned int j=0;
for(;Time>0;Time--)
{
for(j=0;j<256;j++)
{;}
}
}
/**************************/
/***實(shí)時(shí)時(shí)鐘中斷程序(定時(shí)復(fù)位)*****/
void RTC_int() interrupt 10
{
if(RTCCON==0xE3)//是實(shí)時(shí)時(shí)鐘中斷
{
Count++;
RTCCON = 0x63;
}
else
{
EA=0;
WFEED1=0xA5;
WFEED2=0x5A;
EA=1;
}
}
/***************************/
/***指示燈閃爍定時(shí)器*******/
void timer0() interrupt 1
{
TH0=0x00;
TL0=0x00;
Count1++;
if(Count1>=8)
{
P1_2=~P1_2;
Count1=0;
}
}
/***************************/
/****定時(shí)采集端口狀態(tài)*******/