📄 时序控制器汇编程序.asm
字号:
;///////////////////////////////////////////////////////////////////////////
;// 时序控制器程序 //
;// 作用:分时接通/断开各路加热板(有24路),防止大电流对电网过冲击 //
;// 晶振3.57MHz //
;// P2.6为接通/断开控制端,P2.7预留 //
;// P0、P1、P2.0~P2.5为输出端,经过驱动电路驱动各继电器 //
;// 2008年4月18日,通过测试,实际使用 //
;///////////////////////////////////////////////////////////////////////////
WDT EQU 0E1H ;定义看门狗地址
ORG 0000H ;主程序入口
LJMP KS
;****************************************************************************
;初始化程序
;****************************************************************************
ORG 0100H
KS: MOV WDT,#00111100B ;设置看门狗
MOV P0,#0FFH ;设置PO口继电器断开
MOV P1,#0FFH ;设置P1口继电器断开
MOV P2,#0FFH ;设置P2口继电器断开
MOV R0,#0FFH ;延时,待电源正常后系统才开始工作
DJNZ R0,$
MOV SP,#60H ;设SP开始位置
;****************************************************************************
;检测是否启动
;****************************************************************************
L1: MOV R0,#100 ;延时,作喂狗准备
L2: JNB P2.6,L3 ;P2.6为接通/断开控制端,检查是否接通(0为接通)
DJNZ R0,L2
MOV WDT,#00111100B ;喂狗
SJMP L1
L3: ACALL YS1 ;延时防误
JB P2.6,L1
;L1: JB P2.6,$
; ACALL YS1 ;延时防误
; JB P2.6,L1
;****************************************************************************
;以下为继电器接通程序,分时接通,防止固态继电器全部接通时对电网的过冲击
;****************************************************************************
MOV A,#0FFH ;设置A初值
LL1: CLR C
RLC A
MOV P0,A ;P0端各口依次输出低电平
ACALL YS2 ;延时
JNZ LL1 ;判断P0端的各继电器是否全部接通,全部接通后开始接通P1口
MOV A,#0FFH
LL2: CLR C
RLC A
MOV P1,A ;P1端各口依次输出低电平
ACALL YS2
JNZ LL2
MOV A,#0FFH
LL3: CLR C
RLC A
MOV P2,A ;P2端各口依次输出低电平
ACALL YS2 ;长延时
SETB ACC.7 ;屏蔽高4位(使其不受P2.7状态的影响)
SETB ACC.6 ;屏蔽高3位(使其不受P2.6状态的影响)
CJNE A,#11000000B,LL3;P2等于C0H时接通完毕,P2.6、P2.7为输入端,不接继电器
;****************************************************************************
;检测启动/断开开关是否断开
;****************************************************************************
Z1: MOV R0,#100 ;延时,作喂狗准备
Z2: JB P2.6,Z3 ;P2.6为接通/断开控制端,检查是否断开(1为断开)
DJNZ R0,Z2
MOV WDT,#00111100B ;喂狗
SJMP Z1
Z3: ACALL YS1 ;延时防误
JNB P2.6,Z1
; SJMP L4
;Z1: JNB P2.6,$
; ACALL YS1 ;延时防误
; JNB P2.6,Z1
; SJMP L4
;****************************************************************************
;检测启动/断开开关是否断开
;****************************************************************************
;L5: MOV R0,#100 ;延时,作喂狗准备
;L6: JNB P2.7,L7 ;P2.7为断开端,检查是否断开(为0断开)
; DJNZ R0,L6
; MOV WDT,#00111100B ;喂狗
; SJMP L5
;L7: ACALL YS1 ;延时防误
; JB P2.7,L5
;L2: JNB P2.7,$ ;P2.7为断开端,检查是否断开(为0断开)
; ACALL YS1 ;延时防误
; JNB P2.7,L2
;****************************************************************************
;以下为断开继电器程序,分时断开,防止冲击
;****************************************************************************
L4: CLR A ;设置A初值
LY1: SETB C
RLC A
MOV P0,A ;P0端各口依次输出低电平
ACALL YS3 ;延时
CJNE A,#11111111B,LY1;判断P0端的各继电器是否全部接通,接通后开始接通P1口
CLR A
LY2: SETB C
RLC A
MOV P1,A ;P1端各口依次输出低电平
ACALL YS3
CJNE A,#0FFH,LY2
CLR A
LY3: SETB C
RLC A
MOV P2,A ;P2端各口依次输出低电平
ACALL YS3 ;延时
SETB ACC.7 ;屏蔽高4位(使其不受P2.7状态的影响)
SETB ACC.6 ;屏蔽高3位(使其不受P2.6状态的影响)
CJNE A,#11111111B,LY3;P2等于3FH时接通完毕,P2.6、P2.7为输入端,不接继电器
SETB P2.7 ;P2.7恢复高电平
SETB P2.6 ;P2.6恢复高电平
AJMP L1
;****************************************************************************
;以下为延时子程序
;****************************************************************************
;开关延时防误延时子程序
YS1: MOV R1,#200 ;延时1
Y1: MOV R2,#100
Y2: NOP
NOP
NOP
DJNZ R2,Y2
MOV WDT,#00111100B ;设置看门狗
DJNZ R1,Y1
RET ;返回
;继电器延时接通延时子程序
YS2: MOV R1,#60 ;延时2
S1: MOV R2,#100
S2: NOP
NOP
NOP
DJNZ R2,S2
MOV WDT,#00111100B
DJNZ R1,S1
RET
;继电器延时断开延时子程序
YS3: MOV R1,#40 ;延时2
X1: MOV R2,#100
X2: NOP
NOP
NOP
DJNZ R2,X2
MOV WDT,#00111100B
DJNZ R1,X1
RET
;****************************************************************************
;软件陷阱程序
;****************************************************************************
ORG 0300H ;程序入口
NOP ;软件陷阱
NOP
NOP
LJMP KS ;返回主程序
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -