请高手帮忙加个看门狗程序

来源:百度知道 编辑:UC知道 时间:2024/05/28 10:57:44
单片机89C2051晶振12M,看门狗使用MAX813。下面是实现功能的程序,已调试通过。现在想添加一个看门狗程序,求知道的帮忙一下。

ORG 0000H
AJMP START
ORG 000BH
START: MOV SP,#5FH
MOV PSW,#00H
MOV P3,#0FFH
MOV TMOD,#01H
MOV TL0,#B0H
MOV TH0,#3CH
MOV IE,#80H
SETB ET0
MAIN: SETB TR0
CLR P1.4
JNB P3.5,AB1
CLR TR0
MOV TL0,#B0H
MOV TH0,#3CH
MOV R7,#10
AJMP MAIN
AB1: JB TF0,AB2
AJMP MAIN
AB2: CLR TR0
CLR TF0
MOV TL0,#B0H
MOV TH0,#3CH
DJNZ R7,MAIN
AJMP FB
FB: CPL P1.4
ACALL DEL
AJMP MAIN
DEL: MOV R7,#10
DEL1: MOV R6,#100
DEL2: MOV R5,#248
DJNZ R5,$
DJNZ R6,DEL2
DJNZ R7,DEL1
MOV R7,#10
RET
END

还没有过看门狗的相关设计,所以不是很懂,不知道下面这么加可以不(好像下面是个看门狗程序吧?)?

AJMP T1INT
ORG 0030H
......
MOV TL1,#0B0H ;0.1S
MOV TH1,#3CH
MOV IE,#80H ;开中断
MOV R7,#30 ;置循环次数
MOV R6,#30

下面是间隔为16MS喂狗程序(抄的)每两次之间的间隔不得大于定时器的定时时间.但假如单片机系统完成一个任务需10S再重新开始,这么长的时间定时器如何设置?谢谢!!ORG 0000H AJMP MAIN ORG 000BH LJMP ERR MAIN: MOV SP, #60H MOV PSW, #00H MOV SCON, #00H MOV TMOD, #01H ;设置T0为16位定时器 SETB ET0 ;允许T0中断 SETB PT0 ;设置T0中断为高级中断 MOV TL0, #00H ;设定T0的定时初值,定时时间约为16ms(6M晶振) MOV TH0, #0B0H SETB EA ;开中断 SETB TR0 ;启动T0 LOOP: ...... ;主程序开始循环 (这里是真正的用户程序) LCALL WATCH DOG ;调用喂狗子程序 ...... LJMP LOOP ; 返回LOOP WATCH DOG: MOV TL0, #00H ;喂狗子程序 MOV TH0, #0B0H SETB TR0 RET ERR: POP ACC ;定时器中断 POP ACC ;看门狗软件复位程序 CLR A PUSH ACC PUSH ACC RETI

我们带你往程序里加程序块,那是没用的,到最后你还是不懂,编程最主要的一点就是思路,这一点你一定要谨记,只要思路对了,程序是活的,想怎么编就怎么编,每个人有每个人的编程风格,但最后结果是一样的,所以我只告诉你一个思路,用单片机内部的定时器的中断方式来定时,因为中断方式定时器是不占用CPU资源的,所以在程序的一开始你就启动定时器,每格一段时间就向CPU申请中断服务,然后CPU给定时器复位(喂狗)再启动定时器,假设CPU死机了,那么定时器的溢出将复位整个单片机(狗咬人),思路就是这样,所以你自己看了

用STC的吧,完全兼容51,其内部带有看门狗,只要在设定的时间里面执行规定的指令就OK了。
另外,STC内部还有EEPROM等资源,很方便,一