您现在的位置是:首页 > 创新技术

软件看门狗程序

智慧创新站 2025-03-06【创新技术】58人已围观

简介;汇编ERRORPSEGMENTCODEPUBLICerrorRSEGERRORPerror:CLREAMOVDPTR,#ERR1PUSHDPLPUSHDPHRETIERR1:CLRAPUSHACCPUSHACCRETI//以下程序只是一个范例voiderror(void);//定时器0,清除定时器...

;汇编

ERRORPSEGMENTCODE

PUBLICerror

RSEGERRORP

error:

CLREA

MOVDPTR,#ERR1

PUSHDPL

PUSHDPH

RETI

ERR1:

CLRA

PUSHACC

PUSHACC

RETI

//以下程序只是一个范例

voiderror(void);

//定时器0,清除定时器1的计时

voidint_t0(void)interrupt1{

TL0=TL0+68;TH0=0xfd;//700

TH1=0xfb;

}

//定时器1,中断作为看门狗

voidint_t1(void)interrupt3{

error();//复位

}

unsignedcharadds;

unsignedcharb_job0[5][3];//job0用到的数据,如A/D采集的数据,一共5组,每组3个,其中一个有效,其余2个备用

unsignedcharb_job1[5][3];

unsignedcharb_job2[5][3];

voidjob0(void){

unsignedchari;

adds=0;

for(i=0;i5;i++){//数据采集部分,此处简化过程

b_job0[i][0]=b_job0[i][1]=b_job0[i][2]=123;

}

while(1){}

}

voidjob1(void){

unsignedchari;

adds=1;

for(i=0;i5;i++){//数据采集部分,此处简化过程

b_job0[i][0]=b_job0[i][1]=b_job0[i][2]=23;

}

while(1){}

}

voidjob2(void){

unsignedchari;

adds=2;

for(i=0;i5;i++){//数据采集部分,此处简化过程

b_job0[i][0]=b_job0[i][1]=b_job0[i][2]=12;

}

while(1){}

}

//为了在复位时不把b_power清零,连接时必须和连接

voidmain(void){

unsignedintb_power;

unsignedcharb_test_ram,i,j;

TMOD=0x11;

TH0=0xfd;TH1=0xfb;

ET0=TR0=1;

ET1=TR1=1;

EA=1;

if(b_power!=0x1234){//b_power不等于0x1234表示刚开机

b_power=0x1234;

adds=0;//第一次执行job0

}else{//软件复位处理程序,主要是根据产生复位的地址来继续执行

//RAM数据错误检测和恢复,3中取2相等法

for(i=0;i5;i++){

for(j=0;j2;j++){

b_test_ram=job0[i][j];

if(b_test_ram==job0[i][j+1])break;

b_test_ram=job0[i][j+1];

}

if(j==2)break;

}

if(i!=5){}//处理job0数据出错

for(i=0;i5;i++){

for(j=0;j2;j++){

b_test_ram=job1[i][j];

if(b_test_ram==job1[i][j+1])break;

b_test_ram=job1[i][j+1];

}

if(j==2)break;

}

if(i!=5){}//处理job1数据出错

for(i=0;i5;i++){

for(j=0;j2;j++){

b_test_ram=job2[i][j];

if(b_test_ram==job2[i][j+1])break;

b_test_ram=job2[i][j+1];

}

if(j==2)break;

}

if(i!=5){}//处理job2数据出错

switch(adds){

case0:job0();break;

case1:job1();break;

case2:job2();break;

}

}

while(1){}

}

很赞哦!(127)