📄 ld094.asm
字号:
#include <P16F676.INC>
__CONFIG 0x004c
__idlocs 0x2007
LIST R=DEC
errorlevel 0,-302 ,-305 ,-306
;说明:复位端口当作IO口,震荡用内部震荡
;
;---------------------------------变量寄存器----------------------------
;ram max 64 byte
cblock 0x20
FSR_TEMP
W_TEMP
STATUS_TEMP
PCLATH_TEMP
COUNT1
COUNT2
TEMP
TIME_1S ;2=H,标志 ,1=H,固定时间标志 3=H按键延时
XhTimeMR ;熄火默认设置时间
XhTimeCount ;熄火时间计数器
XhTimeCountH ;熄火时间计数器
AJBIAT ;按键采集标志
CYFXFLAG ;程序流程标志
ZSD ; 指示灯闪烁延时变量寄存器
ZSD2
DefelRpm ;默认转速数据
RpmSingFlag
NEW_RpmData ;计算得到的转速数据
YW
KeyDelay ;按键时间超过3S记数器
GdDelay ;固定延时3S记数器
LEDdelay ;液位LED延时时间(每个灯延时1S)
LEDCOUNT
MOREN ;默认值寄存器
MOREN_FLAG ;1=H,默认值已经更改
YEXH ;把液位型号值写到EEPROM
ZSKZ ;把转速控制方式值写到EEPROM
OLD_YW
OLDLEDCOUNT
YwDataFlag
YWSZ ;保存液位数据
KeyStatusCount ;按键循环状态
DubugSaveRpmCount ;调试模式保存转速值记数
yeweidelay
StatusFlag ;状态标志
DEBUG_FALG
GasFlag
DebugModeTime
YW_FALG
COUNTER
ADBUFF1 ;采样缓冲数组
ADBUFF2
ADBUFF3
ADBUFF4
ADBUFF5
ADBUFF6
endc
;***********************************************************
;---------------端口定义
;***********************************************************
;按键端口
#DEFINE AJPD PORTA,3 ; 按键端口
;---信号输入
#DEFINE YWSING PORTC,2 ; 液位信号输入端口
#DEFINE ZSSING PORTA,2 ; 转速信号输入端口
;----输出
#DEFINE GasOut PORTA,0 ; 气继电器输出(控制端高电平为关)
#DEFINE PortOut PORTA,1 ; 油继电器输出
;----状态指示
#DEFINE YOULED PORTC,4 ; LED (黄)
#DEFINE GASLED PORTA,5 ; LED (红)
;----液位显示
#DEFINE YWLED5 PORTC,1 ; 5 LED
#DEFINE YWLED4 PORTC,0 ; 4 LED
#DEFINE YWLED3 PORTC,3 ; 3 LED
#DEFINE YWLED2 PORTC,5 ; 2 LED
#DEFINE YWLED1 PORTA,4 ; 1 LED (RED)
;***********************************************************
;StatusFlag ;状态标志
#DEFINE DebugFlag 0 ; 调试模式(H)
#DEFINE KeyFlag 1 ; 调试模式(H)
#DEFINE RpmSaveFlag 2 ; 转速默认值刷新
;RpmCompFlag
;TIME_1S,各种定时时间到标志
#DEFINE KeyTime3sFlag 1 ;按键3S记时到标志
#DEFINE OtherTime3S 2 ;其他3s时间到标志
#DEFINE XhTime 3 ;熄火保护时间到标志
#DEFINE XhTimeOpen 4 ;已经开始
; DebugModeTime ;短时间释放标志(H )
#DEFINE short 0 ;短时间释放标志(H )
#DEFINE Long 1 ;5S时间到标志
;RpmSingFlag,
#DEFINE RpmSingH 0 ;转速采集记时开始
#DEFINE RpmSingOK 1 ;有转速信号标志
#DEFINE JcXhTime 2 ;要检测熄火时间
#DEFINE TimeClose 4 ;进入气工作条件1成立标志(当前转速数据超过默认转速数据)
#DEFINE JDQ 5 ;无转速信号标志(H)
#DEFINE LcGb 6 ;流程改变标志(H)
;YwDataFlag
#DEFINE DataYz 3 ;刷新液位值进入标志(数据相等不进入 H)中断进入入口
#DEFINE DataUp 4 ;升
#DEFINE DataDown 5 ;降
#DEFINE DataSx 0 ;入口标志
;GasFlag,
#DEFINE GasStatus 0 ;工作在gas标志
#DEFINE NOKZ 5
;CYFXFLAG ;程序流程标志
#DEFINE LC0 0 ;状态0
#DEFINE LC1 1
#DEFINE LC2 2
#DEFINE LC3 3 ;状态3
;***********************************************************
ORG 0000H
nop
GOTO ZHU1
ORG 0004H
;***********************************************************
;*********************中断处理**********************
ZD
MOVWF W_TEMP
MOVFW STATUS
SWAPF STATUS,W
CLRF STATUS
MOVWF STATUS_TEMP
MOVFW PCLATH
MOVWF PCLATH_TEMP
MOVFW FSR
MOVWF FSR_TEMP
CLRF PCLATH
goto ZDpd
ZD_EXIT
CLRF STATUS
MOVFW FSR_TEMP
MOVWF FSR
MOVFW PCLATH_TEMP
MOVWF PCLATH
SWAPF STATUS_TEMP,W ;恢复STATUS
MOVWF STATUS
SWAPF W_TEMP,F ;恢复STATUS
SWAPF W_TEMP,W
RETFIE ;中断返回
;************************************************************************
;---------------定时器1中断处理(400ms中断一次)--------------
;************************************************************************
TMR1_ZD
BCF PIR1,TMR1IF ;清中断
btfsc StatusFlag,DebugFlag
goto TimeDebug ;进入调试模式定时
btfss YwDataFlag,DataYz ;刷新液位值进入标志(数据相等不进入 H)
goto TRM1EXIT
incf yeweidelay,F
movlw 3 ;1S
subwf yeweidelay,W
btfss STATUS,C
goto TRM1EXIT
clrf yeweidelay
;是否等于0
movf LEDdelay,f
btfsc STATUS,Z
goto LEDdelayEnd ;已经达到设置值(已等于新的数据)
;首先判断数据是加还是减
btfsc YwDataFlag,DataUp
goto ADDdata
btfsc YwDataFlag,DataDown
goto SUBdata
ADDdata
decf LEDdelay,f
incf OLDLEDCOUNT,f
movfw OLDLEDCOUNT
goto LEDsc
SUBdata
decf LEDdelay,f
decf OLDLEDCOUNT,f ;上次的数据减1
movfw OLDLEDCOUNT
goto LEDsc
LEDsc
addwf PCL,F
nop
goto LED1
goto LED2
goto LED3
goto LED4
goto LED5
NOP
goto TRM1EXIT
LEDdelayEnd
bcf YwDataFlag,DataSx ;液位AD子程序检测进入标志
bcf YwDataFlag,DataYz
goto TRM1EXIT
;------------------------------------------------------------------
;--------进入调试模式定时;用于LED闪烁---------
;------------------------------------------------------------------
TimeDebug
INCF ZSD2,F ;指示灯寄存器加1
MOVLW D'1' ;0.5s
SUBWF ZSD2,W
BTFSS STATUS,C
GOTO TRM1EXIT
;---DEBUG ZSD 闪烁-----
CLRF ZSD2 ;时间到
BTFSS DEBUG_FALG,0
GOTO TimeDebug0
MOVLW 0X10
XORWF PORTA,F ;第0个闪(红)
GOTO TRM1EXIT
TimeDebug0
BTFSS DEBUG_FALG,1
GOTO TimeDebug1
MOVLW 0X20
XORWF PORTC,F ;第1个闪
GOTO TRM1EXIT
TimeDebug1
BTFSS DEBUG_FALG,2
GOTO TimeDebug3
MOVLW 0X08
XORWF PORTC,F ;第2个闪
GOTO TRM1EXIT
TimeDebug3
BTFSS DEBUG_FALG,4
GOTO TRM1EXIT
MOVLW 0X30
XORWF PORTA,F
MOVLW 0X3B
XORWF PORTC,F ;指示灯全闪
GOTO TRM1EXIT
;---------出口----------------
TRM1EXIT
MOVLW 0x3C ;赋初值50000=65535-15535,中断1次时间为50MS
MOVWF TMR1H
MOVLW 0xAF
MOVWF TMR1L
GOTO ZD_EXIT
;************************************************************************
;**外部触发中断处理*
;************************************************************************
Rpm_ZD
bcf INTCON,RAIF
btfsc ZSSING ;转速信号
return
bsf RpmSingFlag,RpmSingOK
btfss RpmSingFlag,JcXhTime
goto Fwei
bsf GASLED ;GAS状态灯
bsf GasOut ;气继电器输出
bsf RpmSingFlag,JDQ
Fwei
clrf GdDelay
clrf XhTimeCount
return
;************************************************************************
;-------------定时器0中断处理(32ms中断一次)----------
;实现功能:1:固定延时3S,;2:状态LED闪烁 3:按键3S延时
;************************************************************************
T0_ZD
BCF INTCON,T0IF
btfsc StatusFlag,DebugFlag
goto KeyTime ;进入调试模式定时
;监控转速信号
Zsdtime
btfss ZSSING ;转速信号
goto GAS_ok
INCF GdDelay,F ;固定延时寄存器加1
MOVLW D'31' ;固定为1S
SUBWF GdDelay,W
BTFSS STATUS,C
goto ZD_EXIT
bcf RpmSingFlag,RpmSingOK
btfss RpmSingFlag,JcXhTime ;要检测熄火时间标志
goto ZD_EXIT
btfss RpmSingFlag,JDQ ;继电器开状态
goto ZD_EXIT
btfsc RpmSingFlag,TimeClose
goto GAS_end
clrf GdDelay
incf XhTimeCount,f
movf XhTimeMR,W ;熄火默认设置时间
subwf XhTimeCount,w
btfss STATUS,C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -