📄 main.asm
字号:
;*************************************************************************
; main.ASM
; CAT1021看门狗实验程序
;*************************************************************************
;*************************************************************************
;定义I/O接口
;*************************************************************************
LED BIT P0.0
SCL BIT P3.4
SDA BIT P3.5
;*************************************************************************
;复位入口
;*************************************************************************
ORG 0x0000
LJMP PreMain
;*************************************************************************
;程序段:PreMain
;功能:进入主程序之前的初始化操作
;*************************************************************************
PreMain:
MOV SP, #0x2F
LJMP main
;*************************************************************************
;宏定义:DJNZ_W
;功能:双字节数自减1,结果不为0跳转
;参数:
; (xh,xl):要操作的数
; Label:跳转目标
;*************************************************************************
DJNZ_W MACRO xh,xl, Label
LOCAL next
MOV A, xl
JNZ next
DEC xh
next:
DEC xl
MOV A, xh
ORL A, xl
JNZ Label
ENDM
;*************************************************************************
;函数:Delay()
;功能:延时0.001~65.536s
;参数:
; t>0时,延时(t*0.001)s
; t=0时,延时65.536s
;*************************************************************************
; void Delay(unsigned int t)
; t = (R6,R7)
Delay:
MOV TH0, #0xFC
MOV TL0, #0x66
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
DJNZ_W R6,R7, Delay
RET
;*************************************************************************
;函数:Feed()
;功能:清除CAT1021内部WDT定时器(喂狗)
;说明:如果没有在1.6秒(典型值)内喂狗,则CAT1021会输出复位信号
;*************************************************************************
; void Feed()
Feed:
PUSH 0x06
PUSH 0x07
CLR SDA
MOV R6, #0
MOV R7, #1
LCALL Delay
SETB SDA
POP 0x07
POP 0x06
RET
;*************************************************************************
;函数:SysInit()
;功能:系统初始化
;*************************************************************************
; void SysInit()
SysInit:
CLR LED ;点亮LED。如果CPU被看门狗复位,则能看到LED闪亮
SETB SCL
SETB SDA
ANL TMOD, #0xF0
ORL TMOD, #0x01
MOV R6, #0
MOV R7, #250
LCALL Delay ;上电后必须先延时200ms以上才能对CAT1021进行操作
RET
;*************************************************************************
;函数:void main()
;功能:主函数
;*************************************************************************
main:
LCALL SysInit
Loop:
; 喂狗
LCALL Feed
; 延时
MOV R6, #HIGH(800)
MOV R7, #LOW(800)
LCALL Delay
;
SJMP Loop
;*************************************************************************
;程序结束
;*************************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -