;***************************************************** ;AT89S52看门狗演示程序 ;程序初始化时 ;P1.7引脚上的LED闪烁发光 ;激活看门狗后,如果不喂狗,则复位(P1.1引脚上的LED闪一下) ;***************************************************** 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开始运 MOV 0A6H,#01EH MOV 0A6H,#0E1H ;在程序初始化中激活看门狗。 LOOP: SETB P1.7 LCALL DELAY CLR P1.7 LCALL DELAY LJMP LOOP ;定时器0的中断处理程序 TIME0: PUSH ACC PUSH PSW ;将PSW和ACC推入堆栈保护 MOV 0A6H,#01EH MOV 0A6H,#0E1H ;喂狗指令,可以将这两句注释后看不喂狗的情形 MOV TH0,#0EAH MOV TL0,#60H ;重置定时常数 POP PSW POP ACC RETI ;延时子程序 DELAY: MOV R7,#250 D1: MOV R6,#250 D2: DJNZ R6,D2 DJNZ R7,D1 RET END ;在16383个机器周期内必须至少喂狗一次。当晶振为12M时每16个毫秒需喂狗一次。