📄 ats_wu_f14s.asm
字号:
CLR GJKZ ; 关机
SETB YMKZ ; 关闭油门
MOV SECOND5,#100 ; 5s关机信号
CLR SEC5_F
WRONG1:
JNB SDYC_F,MAIN7
JNB SEC5_F,WRONG1
SETB GJKZ
WRONG2:
JB SDYC_F,WRONG2
AJMP MAIN7X
MAIN7:
SETB JYNO_F ; 市电供电情况下不检测飞轮
MAIN7X:
SETB DYKZ ;20070917 22:56 市电供电
SETB GJKZ ;关闭关机信号
SETB QDKZ ;关闭启动信号
SETB YMKZ
LJMP MAIN1
;**************************************
;**************************************
; 发电机正常启动的情况下,检测到了市电
MAIN7A:
MOV SECOND5,#40 ;1分钟内市电异常,
CLR SEC5_F
JNB SEC5_F,$ ;延时2s转发电机供电
SETB DYKZ ;CLR DYKZ
SETB JYNO_F ;市电供电情况下不检测飞轮
MAIN1YY:
LJMP MAIN1
;**************************************
;**************************************
FDJZCQD:
CLR SEC5_F
CLR MIN1_F ;10-180S到标志
MOV SECOND5,#100
MOV MINUTE1,YSDATA
FDJZCQD1:
JNB SDYC_F,MAIN7A
JB FDJYC_F, ZGJJJ ;延时10-180S的时间内 ,发电机输入异常->只关机
JNB MIN1_F,FDJZCQD1 ;等待1分钟(可调)
CLR DYKZ ;切换到发电机供电
CLR JYNO_F ;发电机供电才检测飞轮!!20070918 20:56
MOV COUNT1A,#20
LJMP MAIN1
;**************************************
ZGJJJ: ;20070917 22:20增加
; JNB FLYYC_F,ZGJJJ1 ;飞轮有,就不关机了
CLR GJKZ ;延时10-180S的时间内 ,发电机输入异常->只关机
SETB YMKZ ;关闭油门
SETB JYNO_F ; 关机这5s不检测飞轮
MOV SECOND5,#100
CLR SEC5_F
JNB SEC5_F,$
SETB GJKZ
ZGJJJ1:
LJMP MAIN1
;**************************************
;**************************************
;从发电机恢复到市电状态
FDJTOSD:
JB SDYC_F, MMM4
MMM1:
MOV SECOND5,#40 ;2s 切换电源
CLR SEC5_F
JNB SEC5_F,$
SETB DYKZ
MOV SECOND5,#100
CLR SEC5_F
CLR MIN1_F ;1分钟到标志
MOV MINUTE1,#8 ;改为40s #12
MMM2:
JB SDYC_F,MMM3
JNB MIN1_F,MMM2
SETB YMKZ ;关闭油门
CLR GJKZ ;1分钟内市电来了,输出关机信号
SETB JYNO_F ; 关机这5s不检测飞轮
MOV SECOND5,#100
CLR SEC5_F
JNB SEC5_F,$
SETB JYNO_F ; 市电供电情况下不检测飞轮
SETB DYKZ ;切换到市电
SETB GJKZ
SETB QDKZ
SETB BJKZ
CLR AAA_F
CLR BBB_F
CLR BJ_F
RET
MMM3:
MOV SECOND5,#40 ;1分钟内市电异常,
CLR SEC5_F
JNB SEC5_F,$ ;延时2s转发电机供电
CLR DYKZ
CLR JYNO_F ;发电机供电要检测
MMM4:
RET ;转发电机正常供电
;*********************************************
;**********************************************
; 定时器1中断,用于产生精确定时, *
; 采样端口K1=1有市电,K1=0 无市电 *
;**********************************************
TIMER1:
PUSH ACC
CLR TF1
MOV TH1, #03CH ;
MOV TL1, #0B0H ;50ms 定时
MOV WDT_CONTR,#3CH ;启动看门狗!!
DJNZ SECOND1,YHG0
MOV SECOND1,#20 ;精确产生1s定时,用与计算频率
;*********************************
SETB SEC1_F ;1S定时标志
YHG00:
;*********************************只在发电机正常市电异常的情况下检测频率
LCALL GJDELAY ;每秒采样一次关机延时电压!!
LCALL BATGL ;每秒采样一次电池电压!!
LCALL FDJCY ;每秒采样一次发电机电压
YHG0:
JNB K1,YHG1 ;1=有电!! 0=无电==;市电异常检测
DEC TEMP5
MOV A,TEMP5
JNZ YHG2 ;市电异常不够5s
CLR SDYC_F ;连续1s都you市电,清市电异常标志
MOV KZTEMP5,#100
MOV TEMP5,#20
AJMP YHG2
YHG1:
DJNZ KZTEMP5,YHG2
SETB SDYC_F
MOV TEMP5,#20
MOV KZTEMP5,#100 ;100次采样×0.050=5s
YHG2:
DJNZ SECOND5,YHG0B
SETB SEC5_F ;定时5s到标志
MOV SECOND5,#100 ;
DJNZ MINUTE1,YHG0B
SETB MIN1_F ;定时1分钟到标志
MOV MINUTE1,#2
;*********************************************
;*********************************************
YHG0B:
JNB K2,YHG1B ;1=有电!! 0=无电== ;发电机异常检测
DEC TEMP6
MOV A,TEMP6
JNZ YHG3 ;发电机电异常不够1s
CLR FDJYC_F ;连续1s都you市电,qing市电异常标志
MOV KZTEMP6,#20
MOV TEMP6, #20
AJMP YHG3
YHG1B:
DJNZ KZTEMP6,YHG3
SETB FDJYC_F
MOV TEMP6, #20
MOV KZTEMP6, #20 ;20次采样×0.050=1s
;***********************************低油压异常检测
;***********************************低油压异常检测
YHG3:
; JB JYNO_F,YHG5 ;飞轮检测无效,则跳过检测
JB FLYL,YHG3B ;1=飞轮有输入!!
MOV COUNT1, #60
DJNZ COUNT1A,YHG5
MOV COUNT1A,#60
; SETB FLYYC_F ;连续3s飞轮异常,置异常标志
CLR FLYYC_F ;连续3s飞轮正常,清异常标志 去掉飞轮检测功能!!2007.10.21
AJMP YHG5
YHG3B:
MOV COUNT1A,#60
DJNZ COUNT1,YHG5
MOV COUNT1, #60
CLR FLYYC_F ;连续3s飞轮正常,清异常标志
;**********************************
YHG5:
;**********************************
JNB BJ_F,YHG5A ;报警报警有效才闪烁
DJNZ RUNTEMP,YHG6
MOV RUNTEMP,#6
CPL ALMLED
AJMP YHG6
YHG5A:
CLR ALMLED ;没报警的时侯,熄灭报警灯
YHG6:
POP ACC
RETI
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;**********************************
; 关机延时采样子程序GJDELAY() 采样通道1
;********************************** MINUTE1=2 10S定时关机!数字加14 增加10s延时
GJDELAY:
MOV A,#CHANNEL1
LCALL ADZH
MOV B,#14
DIV AB
INC A
CLR C
RLC A
MOV YSDATA,A
RET
;**********************************
; 电池管理子程序BATGL() 采样通道2
;**********************************
BATGL:
MOV A,#CHANNEL2
LCALL ADZH
MOV ZJDATA,A
CJNE A,#95H,BATGL1 ;11.5V=87; 12V=8DH; 12.5V=92H
BATGL1:
JNC BATGL2
MOV FDCOUNT,#5 ;小于12.5V,清取消充电计数器
DJNZ CDCOUNT,BATGL4
SETB CDKZ ;连续2s电压低于 12.5V,开始充电
MOV CDCOUNT,#5
LJMP BATGL4
BATGL2:
MOV A,ZJDATA
CJNE A,#0A2H,BATGL3 ;99H=12.8V 13.5V=9EH
BATGL3:
JC BATGL4
MOV CDCOUNT,#5 ;大于13.5V,清充电计数器
DJNZ FDCOUNT,BATGL4
CLR CDKZ ;连续2s电压高于 13.5V,停止充电
MOV FDCOUNT,#5
LJMP BATGL4
BATGL4:
RET
;**********************************
; 发电机采样子程序FDJCY() 采样通道3
;**********************************
FDJCY:
MOV A,#CHANNEL3
LCALL ADZH
MOV ZJDATA,A
CJNE A,#54H,FDJCY1 ;采样的1.6V,对应215V======#52H,
FDJCY1:
JNC FDJCY2
MOV GYCOUNT,#3 ;小于215V,清过压计数器
DJNZ QYCOUNT,FDJCY4 ;欠压计数器-1
MOV QYCOUNT,#3
SETB QIANY_F ;置欠压标志
;CLR QIANY_F
AJMP FDJCY4
;**********************************
FDJCY2:
MOV A,ZJDATA
CJNE A,#06AH,FDJCY3 ;是否大于265V=====#065H 2.07V
FDJCY3:
JC FDJCY4A
MOV QYCOUNT,#3 ;大于265V,清欠压计数器
DJNZ GYCOUNT,FDJCY4
MOV GYCOUNT,#3
SETB GUOY_F
;CLR GUOY_F
AJMP FDJCY4
FDJCY4A:
CLR QIANY_F
CLR GUOY_F
MOV GYCOUNT,#3
MOV QYCOUNT,#3
FDJCY4:
RET
;*********************************************
;*********************************************
;**********************************
; AD转换子程序ADZH()
;**********************************
ADZH:
ORL ADC_CONTR,#80H
LCALL DELAY
MOV ADC_CONTR,A ;启动AD电源开关,并选择采样通道
LCALL DELAY ;延时2ms
MOV ADC_DATA,#00
ORL ADC_CONTR,#08H ;启动AD转换
AD_WAIT:
MOV A,#10H
ANL A,ADC_CONTR ;判断AD转换是否完成!!
JZ AD_WAIT ;AD转换未完,继续等待!
ANL ADC_CONTR,#0E7H ;清0 ADC_FLAG,ADC_START,停止AD转换
MOV A,ADC_DATA
RET
;**********************************
; 延时子程序DELAY()2ms
;**********************************
DELAY:
MOV 4EH,#4
DELAY1:
MOV 4FH,#255
DJNZ 4FH,$
DJNZ 4EH,DELAY1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -