📄 ld094.asm
字号:
clrwdt
call KEYSCAN ;扫描按键
btfss AJBIAT,7
GOTO ZU_Down1
call DebugKey
btfsc DebugModeTime,short
goto ZU_UP
btfsc DebugModeTime,Long
goto DEBUG_4
;使用模式
ZU_UP
bsf GASLED ;GAS状态灯(绿LED)
movlw 1
movwf ZSKZ ;把转速控制方式值写到EEPROM
bcf YOULED ;油状态灯
call AJPDOPEN
ZU_UP1
call KEYSCAN
btfss AJBIAT,7
GOTO ZU_UP1
call DebugKey
btfsc DebugModeTime,short
goto ZU_Down
btfsc DebugModeTime,Long
goto DEBUG_4
;-------------------------------------------------------------------------
;--------------------- ;把所有新设置的值全部保存 -------------------
DEBUG_4
clrf DEBUG_FALG
call LedInt
bsf DEBUG_FALG,4 ;LED全闪
call AJPDOPEN ;检查按键释放完成
;---------刷新液位传感器型号-----
movfw YEXH ;把液位型号值写到EEPROM
movwf MOREN
movlw D'2' ;地址
call WRITE_EE
;----------刷新安全时间---------
call DELAY
call DELAY
movfw NEW_RpmData ;新的时间数据
movwf MOREN
movlw D'4' ;地址
call WRITE_EE
;---------刷新浮动模式-----
call DELAY
call DELAY
movfw ZSKZ ;把转速控制方式值写到EEPROM
movwf MOREN
movlw D'3' ;地址
call WRITE_EE
DebugEnd
clrwdt
nop
goto DebugEnd
;*********************************************************************
;*********************************************************************
AJPDOPEN
clrwdt
call KEY_WAIT ;等待按键松开
btfss AJBIAT,5
goto AJPDOPEN
RETURN
;*********************************************************************
;Name 使用按键时的时间检测
;*********************************************************************
DebugKey
bsf StatusFlag,KeyFlag ;;按键定时入口标志
bcf TIME_1S,KeyTime3sFlag
clrf KeyDelay
DebugKey_wait
call KEY_WAIT ;按键是否已释放?
btfsc AJBIAT,5
goto DebugKeyOk1 ;释放!到第2种传感器模式
btfss TIME_1S,KeyTime3sFlag
goto DebugKey_wait
goto DebugKeyOk2 ;DELAY 到,进入第2步修改模式状态
DebugKeyOk1
clrf DebugModeTime
bsf DebugModeTime,short
goto DebugKeyEnd
DebugKeyOk2
clrf DebugModeTime
bsf DebugModeTime,Long
goto DebugKeyEnd
DebugKeyEnd
bcf StatusFlag,KeyFlag
clrf KeyDelay
bcf TIME_1S,KeyTime3sFlag
return
;*********************************************************************
;Name RAM清空
;*********************************************************************
RamInt
MOVLW 0x20
MOVWF FSR
RamIntLoop
CLRWDT
CLRF INDF
INCF FSR,F
BTFSS FSR,7
GOTO RamIntLoop
return
;*********************************************************************
;Name LED 初始化
;*********************************************************************
LedInt
btfsc INTCON,GIE
bcf INTCON,GIE
bcf YOULED
nop
bcf GASLED
nop
bcf YWLED5
nop
bcf YWLED4
nop
bcf YWLED3
nop
bcf YWLED2
nop
bcf YWLED1
bsf INTCON,GIE
return
;*********************************************************************************
;*************************** 延时程序1 ************************************
DELAY1 ;廷时20us
MOVLW 0AH
MOVWF COUNT1
L4 CLRWDT
DECFSZ COUNT1,1
GOTO L4
RETURN
;*********************************************************************************
;*************************** 延时程序 ************************************
DELAY ;廷时20us
MOVLW 06H;0FFH;
MOVWF COUNT1
L2 CLRWDT
MOVLW 0FFH;0FFH;
MOVWF COUNT2
L3 CLRWDT
DECFSZ COUNT2,1
GOTO L3
DECFSZ COUNT1,1
GOTO L2
RETLW 0
;*********************************************************************************
;**过滤**
;*********************************************************************************
LEACH ;采用6驵数据去掉最高最低数,中间四位取平均
MOVF ADBUFF1,W
SUBWF ADBUFF6,W
BTFSS STATUS,C
GOTO CHANGE1
BUFF2 MOVF ADBUFF2,W
SUBWF ADBUFF6,W
BTFSS STATUS,C
GOTO CHANGE2
MOVF ADBUFF2,W
SUBWF ADBUFF1,W
BTFSC STATUS,C
GOTO CHANGE3
BUFF3 MOVF ADBUFF3,W
SUBWF ADBUFF6,W
BTFSS STATUS,C
GOTO CHANGE4
MOVF ADBUFF3,W
SUBWF ADBUFF1,W
BTFSC STATUS,C
GOTO CHANGE5
BUFF4 MOVF ADBUFF4,W
SUBWF ADBUFF6,W
BTFSS STATUS,C
GOTO CHANGE6
MOVF ADBUFF4,W
SUBWF ADBUFF1,W
BTFSC STATUS,C
GOTO CHANGE7
BUFF5 MOVF ADBUFF5,W
SUBWF ADBUFF6,W
BTFSS STATUS,C
GOTO CHANGE8
MOVF ADBUFF5,W
SUBWF ADBUFF1,W
BTFSC STATUS,C
GOTO CHANGE9
;--------------平均--------------
AVERAGE
CLRF ADBUFF1
MOVF ADBUFF2,W
ADDWF ADBUFF3,F
BTFSC STATUS,C
INCF ADBUFF1
MOVF ADBUFF4,W
ADDWF ADBUFF3,F
BTFSC STATUS,C
INCF ADBUFF1
MOVF ADBUFF5,W
ADDWF ADBUFF3,F
BTFSC STATUS,C
INCF ADBUFF1
RRF ADBUFF1
RRF ADBUFF3
RRF ADBUFF1
RRF ADBUFF3
MOVF ADBUFF3,W
RETURN
;**********************互换***************************
CHANGE1
ADDWF ADBUFF1,F
SUBWF ADBUFF6,F
GOTO BUFF2
CHANGE2
ADDWF ADBUFF2,F
SUBWF ADBUFF6,F
GOTO BUFF3
CHANGE3
ADDWF ADBUFF2,F
SUBWF ADBUFF1,F
GOTO BUFF3
CHANGE4
ADDWF ADBUFF3,F
SUBWF ADBUFF6,F
GOTO BUFF4
CHANGE5
ADDWF ADBUFF3,F
SUBWF ADBUFF1,F
GOTO BUFF4
CHANGE6
ADDWF ADBUFF4,F
SUBWF ADBUFF6,F
GOTO BUFF5
CHANGE7
ADDWF ADBUFF4,F
SUBWF ADBUFF1,F
GOTO BUFF5
CHANGE8
ADDWF ADBUFF5,F
SUBWF ADBUFF6,F
GOTO AVERAGE
CHANGE9
ADDWF ADBUFF5,F
SUBWF ADBUFF1,F
GOTO AVERAGE
;*********************************初始化程序**********************************
INITIAL
clrf STATUS
clrf PORTA
clrf PORTC
INITIAL1
BSF STATUS,RP0 ;设置寄存器体1
MOVLW B'1100' ;端口设置
MOVWF TRISA
BSF PIE1,TMR1IE ;开放TMR1中断使能位
MOVLW B'1000000' ;设置RA模拟输入端口,此处与873不同
MOVWF ANSEL ;AD0设置为模拟端口
MOVLW B'00100000' ;设置AD转换时钟比1:32
MOVWF ADCON1
MOVLW B'000000' ;RA端口弱上拉控制位,RA2弱上拉关闭(外部中断口)
MOVWF WPUA ;弱上拉控制寄存器
MOVLW B'100' ;RC2 input,其它全部选择输出
MOVWF TRISC
MOVLW B'10000110' ;上拉开,INT中断下降沿计数,内部指令周期记数
MOVWF OPTION_REG ;预分频分给WDT;分频比为1:8
MOVLW B'100'
MOVWF IOCA ;打开PORTA 2电平中断
clrf STATUS ;恢复寄存器体0
MOVLW B'110000' ;T1分频比设顶为1:8,暂不开启TMR1
MOVWF T1CON
movlw 0x07
movwf CMCON ;关闭比较器
RETURN
;*********************************************************
ErrRes
GOTO ZHU1
ORG 0X2100
DE 0X00,0X00,0X02,0X01,0x02 ;定义默认值 2=2s
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -