原创 软件看门狗 softdog.c

2008-4-30 22:07 4012 7 8 分类: MCU/ 嵌入式

softdog.c
 
 
 
;汇编

ERRORP SEGMENT CODE
PUBLIC error
RSEG ERRORP
error:
 CLR EA
 MOV DPTR,#ERR1
 PUSH DPL
 PUSH DPH
 RETI
ERR1:
 CLR A
 PUSH ACC
 PUSH ACC
 RETI
 END


 


//以下程序只是一个范例
 
void error(void)


//定时器0,清除定时器1的计时
void int_t0(void) interrupt 1 {
 TL0=TL0+68;TH0=0xfd; //700
 TH1=0xfb;
}
//
定时器1,中断作为看门狗
void int_t1(void) interrupt 3 {
 error(); //
复位
}


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

unsigned char b_job1[5][3];   
unsigned char b_job2[5][3];


void job0(void) {
 unsigned char i;
 adds=0;
 for (i=0;i<5;i++) {         //数据采集部分,此处简化过程

  b_job0[0]=b_job0[1]=b_job0[2]=123;
 }
 while (1) {}
}
void job1(void) {
 unsigned char i;
 adds=1;
 for (i=0;i<5;i++) {         //
数据采集部分,此处简化过程
  b_job0[0]=b_job0[1]=b_job0[2]=23;
 }
 while (1) {}
}
void job2(void) {
 unsigned char i;
 adds=2;
 for (i=0;i<5;i++) {         //
数据采集部分,此处简化过程
  b_job0[0]=b_job0[1]=b_job0[2]=12;
 }
 while (1) {}
}


//为了在复位时不把b_power清零,连接时必须和nostart.obj连接
void main(void) {
 unsigned int b_power;
 unsigned char b_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;i<5;i++) {
   for (j=0;j<2;j++) {
    b_test_ram=job0[j];
    if (b_test_ram==job0[j+1]) break;
    b_test_ram=job0[j+1];
   }
   if (j==2) break;
  }
  if (i!=5) {}//
处理job0数据出错


  for (i=0;i<5;i++) {
   for (j=0;j<2;j++) {
    b_test_ram=job1[j];
    if (b_test_ram==job1[j+1]) break;
    b_test_ram=job1[j+1];
   }
   if (j==2) break;
  }
  if (i!=5) {}//处理job1数据出错

 
  for (i=0;i<5;i++) {
   for (j=0;j<2;j++) {
    b_test_ram=job2[j];
    if (b_test_ram==job2[j+1]) break;
    b_test_ram=job2[j+1];
   }
   if (j==2) break;
  }
  if (i!=5) {}//
处理job2数据出错


  switch (adds) {
  case 0:job0();break;
  case 1:job1();break;
  case 2:job2();break;
  }
 }
 while (1) {}
}

文章评论1条评论)

登录后参与讨论

用户124183 2008-6-1 23:03

支持!
相关推荐阅读
用户391860 2008-06-20 10:31
基于神经网络的电子鼻肺癌早期诊断系统
作者:江苏大学 赵景波 赵德安 蒋春彬 肺癌是目前全世界最常见的恶性肿瘤之一,其发病率和死亡率不断上升。究其原因是肺癌病因不明,发病时间短、转移快、恶性程度高,早期不易诊断,到中、晚期失去了手术机会,...
用户391860 2008-06-20 10:24
怎样应对医疗电子设备日益复杂的设计挑战?
作者:苏宇 医疗电子设备要从微弱而复杂的人体电信号中采集有效信息,并根据这些信息进行监控、显示和疾病诊断,同时还要避免医疗电子设备对人体造成伤害,因此技术人员在医疗电子设 备的开发过程中面临诸多挑战。...
用户391860 2008-06-20 10:23
医学研究中的统计技术
人与人之间普遍存在着个体差异,所以医学研究中的变异无处不在,再加上外在因素的影响,医学现象更显得变化无常。         例如,某种疾病的发生或流行是什么因素所致?可能涉及的多种因素中哪些是无关紧要...
用户391860 2008-06-20 10:22
RFID有效追踪药品和医疗管理
药品是特殊商品,如果给病人用错药,用假药、劣药或者过期药品,将给人民的身体健康及生命带来威胁。  近些年来,药品安全问题频频发生,2006年我国就发生了几起药品叫停事件:卫生部紧急叫停欣弗、国家食品药...
用户391860 2008-06-20 10:22
酸度计的使用方法
酸度计简称pH计,由电极和电计两部分组成。使用中若能够合理维护电极、按要求配制标准缓冲液和正确操作电计,可大大减小pH示值误差,从而提高化学实验、医学检验数据的可*性。 一、 正确使用酸度计的使用方法...
用户391860 2008-05-22 17:36
虚拟仪器概念
       虚拟仪器( VI - Virtual Instrumentation )是指通过应用程序将通用计算机与功能化硬件结合起来,用户可通过友好的图形界面来操作这台计算机,就像在操作自己定义、自...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条