;***************************************************** ;P87C591看门狗演示程序 ;程序初始化时P1.1引脚上的LED闪一下 ;P1.0引脚上的LED闪烁发光 ;看门狗定时器的重装周期必须小于已编程的看门狗间隔。 ;否则看门狗将溢出并产生系统复位 ;激活看门狗后,如果不喂狗,则复位(P1.1引脚上的LED闪一下) ;***************************************************** T3 EQU 0FFH ;看门狗定时器T3的地址 WATCHINTV EQU 156 ;看门狗间隔(ms) AUXR1 EQU 0A2H ORG 0000 LJMP MAIN ORG 000BH ;定时器0的中断向量地址 AJMP TIME0 ;跳转到真正的定时器程 ORG 30H MAIN: SETB P1.1 LCALL DELAY CLR P1.1 LCALL DELAY SETB P1.1 LCALL DELAY MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#0EAH MOV TL0,#60H ;即60000 SETB EA ;开总中断允 SETB ET0 ;开定时/计数器0允许 SETB TR0 ;定时/计数器0开始运 ORL AUXR1,#00010000B;置位AUXR1中的WDE位使能看门狗 LOOP: SETB P1.0 LCALL DELAY CLR P1.0 LCALL DELAY LJMP LOOP ;定时器0的中断处理程序 TIME0: PUSH ACC PUSH PSW ;将PSW和ACC推入堆栈保护 LCALL WATCHDOG ;喂狗指令,可以将这句注释后看不喂狗的情形 MOV TH0,#0EAH MOV TL0,#60H ;重置定时常数 POP PSW POP ACC RETI WATCHDOG: ORL PCON,#10H ;置位条件标志(PCON.4) MOV T3,#WATCHINTV ;将看门狗间隔装入 T3 RET ;延时子程序 DELAY: MOV R7,#250 D1: MOV R6,#250 D2: DJNZ R6,D2 DJNZ R7,D1 RET END