📄 ld094.asm
字号:
MinIt
clrf STATUS
goto MAIN
;上电复位从这开始
maintemp
BSF STATUS,RP0
bcf STATUS,RP1
bsf PCON,1 ;上电复位后置标志位
bsf PCON,0 ;欠压
clrf STATUS
call INITIAL ;调用初始化
call RamInt
;ifdef ret
call KEYSCAN ;初始化后只判断短时间开与关
btfsc AJBIAT,7 ;是否按了按键?
goto DEBUG ;是,调试
;读转速液位传感型号
call YWMODE
;读熄火默认设置时间
movlw D'4' ;送地址
call RED_EE
movwf XhTimeMR ;熄火默认设置时间
MOVF XhTimeMR,F
btfsc STATUS,Z
bsf RpmSingFlag,TimeClose ;不需要延时标志
incf XhTimeMR,f
;浮动控制
movlw D'3' ;送地址
call RED_EE ;读转速值
movwf TEMP ;熄火默认设置时间
movf TEMP,f
btfss STATUS,Z
bsf GasFlag,NOKZ ;使用
;读开机默认状态
movlw D'1' ;开机默认状态地址
call RED_EE ;读默认值,油态默认值为0,非0为气
movwf KeyStatusCount ;开机默认状态保存
call KEYSLC1
call MAINGB
call OpenZd ;开中断
;//******************************************************/
;主程序
;*******************************************************/
MAIN
clrwdt
call KEYSCAN ;按键是否按下!
btfsc AJBIAT,7
call KEYSLC ;程序流程标志确定模式
btfsc RpmSingFlag,LcGb ;流程改变标志(H)
call MAINGB
btfsc GasFlag,GasStatus ;如果已工作在GAS,则检测液位
call YWZJC ;液位检测
nop
goto MAIN
;//******************************************************/
;*******************************************************/
MAINGB
;CYFXFLAG ;程序流程标志
bcf RpmSingFlag,LcGb
btfsc CYFXFLAG,LC0
call Status0 ;油状态
btfsc CYFXFLAG,LC1
call Status1 ;全关状态
btfsc CYFXFLAG,LC2
call Status2 ;气状态
btfsc CYFXFLAG,LC3
call Status3 ;全开状态
return
;*******************************************************************
;Name:YOU
;状态0为用油
;油开,其余全部关
;********************************YOU*******************************
Status0
;初始化
;把默认值写到EEPROM
clrf MOREN
movlw 1 ;地址
call WRITE_EE
clrf STATUS ;恢复寄存器体0
bcf GasFlag,GasStatus ;工作在GAS标志
clrf YwDataFlag
call LedInt
bsf YOULED ;油状态灯
nop
nop
bcf GasOut ;气继电器输出关闭
bcf RpmSingFlag,JcXhTime ;不要检测熄火时间标志
bsf PortOut ; 油继电器输出开
return
;******************************************************************************
;********************状态1********************
;全关 ,状态灯都不亮 继电器全关
;******************************************************************************
Status1
clrf CYFXFLAG
call LedInt ;灯全关
bcf GasOut ;气继电器输出关
bcf GasFlag,GasStatus ;工作在GAS标志
bcf RpmSingFlag,JcXhTime ;不要检测熄火时间标志
bcf PortOut ;油继电器输出关
return
;******************************************************************************
;********************状态2为用气********************
;******************************************************************************
Status2
;--此部分为设置默认值--
bsf GasFlag,GasStatus ;工作在GAS标志
movlw D'2' ;把默认值写到EEPROM 气默认值为3
movwf MOREN
movlw 1 ;地址
call WRITE_EE
clrf STATUS ;恢复寄存器体0
call LedInt
bcf YWLED1
bsf YWLED2 ;液位R-LED 开机第一次始终绿灯全是亮的
bsf YWLED3
bsf YWLED4
bsf YWLED5
movlw D'5' ;液位显示初始值,最大开始显示
movwf OLDLEDCOUNT
bsf RpmSingFlag,JcXhTime ;要检测熄火时间标志
GAS
bcf PortOut ;油继电器输出关
btfss RpmSingFlag,RpmSingOK ;;有转速信号标志
return
bsf GASLED ;GAS状态灯
nop
bsf GasOut ;气继电器输出
return
;******************************************************************************
;********************状态3********************
;油与气全开,液为信号为全关,不显示
;当检测到无转速信号时,需关闭气伐,有信号,为开
;******************************************************************************
Status3
bcf GasFlag,GasStatus
clrf YwDataFlag
call LedInt
bsf YOULED ;油状态灯
bsf RpmSingFlag,JcXhTime
bsf PortOut ;油继电器输
btfss RpmSingFlag,RpmSingOK
return
bsf GASLED ;GAS状态灯
bsf GasOut ;气继电器输出
return
;****************************************************************
;****************************************************************
OpenZd
banksel PIE1
bsf PIE1,TMR1IE
banksel INTCON
movlw 0x3C ;赋初值50000=65535-15535,中断1次时间为50MS
movwf TMR1H
movlw 0xAF
movwf TMR1L
bsf INTCON,T0IE ;指示灯
bsf INTCON,RAIE
bsf INTCON,PEIE ;允许定时器1产生中断 (用于定时检测液位数据)
bsf T1CON,TMR1ON ;定时器1开
bsf INTCON,GIE
btfss INTCON,GIE
goto $-2
return
;****************************************************************
;Name:KEYSCAN 按键处理子程序
;****************************************************************
KEYSCAN
clrwdt
btfsc AJPD ;判断按键是否按下
return
call DELAY ;消抖
btfsc AJPD ;在判断
return
clrf AJBIAT
bsf AJBIAT,7 ;此标志代表是否按了按键
return
;-------按键释放检测-------------
KEY_WAIT
clrwdt
btfss AJPD ;判断
return
call DELAY
btfss AJPD
return
clrf AJBIAT
bsf AJBIAT,5 ;置标志位
return
;****************************************************************
;Name:KEYSLC 按键模式流程
;****************************************************************
KEYSLC
incf KeyStatusCount,f ;按键循环状态
movlw 4
btfss GasFlag,NOKZ ;不要浮动
movlw 3
subwf KeyStatusCount,w
btfss STATUS,C
goto KEYSLC1
movlw 0
movwf KeyStatusCount
KEYSLC1
movf KeyStatusCount,f
btfsc STATUS,Z
goto keylc0
movlw 1
subwf KeyStatusCount,w
btfsc STATUS,Z
goto keylc1
movlw 2
subwf KeyStatusCount,w
btfsc STATUS,Z
goto keylc2
clrf CYFXFLAG
bsf CYFXFLAG,LC3
goto keyend ;按键释放检测
keylc0
clrf CYFXFLAG
bsf CYFXFLAG,LC0
goto keyend
keylc1
clrf CYFXFLAG
bsf CYFXFLAG,LC1
goto keyend
keylc2
clrf CYFXFLAG
bsf CYFXFLAG,LC2
goto keyend
keyend
clrwdt
btfss AJPD ;判断
goto keyend
call DELAY
btfss AJPD
goto keyend
clrf AJBIAT
bsf RpmSingFlag,LcGb ;流程改变标志(H)
return
;******************读EEPROM**************
RED_EE
clrf STATUS
BSF STATUS,RP0 ;设置寄存器体1
MOVWF EEADR ;送地址
BSF EECON1,RD ;启动一次读操作
MOVF EEDATA,W
clrf STATUS
return
;******************写EEPROM**************
WRITE_EE
BCF INTCON,GIE
clrf STATUS
BSF STATUS,RP0 ;设置寄存器体1
MOVWF EEADR ;送地址
MOVFW MOREN
MOVWF EEDATA ;送数据
BSF EECON1,WREN ;启动一次write操作
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR ;开始写
BCF EECON1,WREN ;WRITE COLSE
clrf STATUS
BSF INTCON,GIE
RETURN
;**********************************ADC******************************
AC_JC
BSF ADCON0,GO ;开启A/D转换过程
WAIT CLRWDT
BTFSC ADCON0,GO ;等待A/D转换过程结束,检测ADC中断标志位
GOTO WAIT ;如果没有转换结束,则返回循环检测
MOVF ADRESH,W ;仅取高8位,把A/D结果读到W
RETURN
;*********************************************************************************
;*** 调试部分
;*********************************************************************************
DEBUG
call KEY_WAIT ;等待按键松开
btfss AJBIAT,5
goto DEBUG
bsf StatusFlag,DebugFlag ;trm1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -